MATLAB计算机视觉与机器认知----Haar矩形遍历演示

article/2025/7/16 10:43:29
clc; clear; close all;% Haar-like特征矩形计算board = 24                                              % 检测窗口宽度
num = 24                                                % 检测窗口分划数show = 1;                                               % 1为作图
time = 0.001;                                           % 作图间隔%%if mod(board,num)~=0error('检测窗口宽度必须是分划数的整数倍')
elsedelta = board/num                                   % 滑动步进值 
end%% Haar特征1:左白,右黑,(s,t)=(1,2)s = 1;
t = 2;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征1:左白,右黑,(s,t)=(1,2) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                   % Haar窗口高c = C(J)*delta;                                  % Haar窗口宽nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 列方向移动个数Px0 = [0 r];                                     % 矩形坐标初始化Py0 = [0 c/2 c];for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(Px,repmat(Py',1,2),'r','LineWidth',5)plot(repmat(Px,2,1),repmat([Py(1) Py(end)]',1,2),'r','LineWidth',5); hold offpause(time)endendendend
end
NUM%% Haar特征2:上白,下黑,(s,t)=(2,1)s = 2;
t = 1;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征2:上白,下黑,(s,t)=(2,1) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                  % Haar窗口宽nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 列方向移动个数Px0 = [0 r/2 r];                                 % 矩形坐标初始化Py0 = [0 c];for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(repmat(Px,2,1),repmat(Py',1,length(Px)),'r','LineWidth',3);plot(repmat([Px(1) Px(end)]',1,2),repmat(Py,2,1),'r','LineWidth',3); hold offpause(time)endendendend
end
NUM%% Haar特征3:左右白,中间黑,(s,t)=(1,3)s = 1;
t = 3;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征3:左右白,中间黑,(s,t)=(1,3) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                  % Haar窗口宽nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 列方向移动个数Px0 = [0 r];                                     % 矩形坐标初始化Py0 = [0 c/3 c*2/3 c];for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(Px,repmat(Py',1,2),'r','LineWidth',5)plot(repmat(Px,2,1),repmat([Py(1) Py(end)]',1,2),'r','LineWidth',5); hold offpause(time)endendendend
end
NUM%% Haar特征4:左右白,中间黑(2倍宽度),(s,t)=(1,4)s = 1;
t = 4;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征4:左右白,中间黑(2倍宽度),(s,t)=(1,4) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                  % Haar窗口宽nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 列方向移动个数Px0 = [0 r];                                     % 矩形坐标初始化Py0 = [0 c/4 c*3/4 c];for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(Px,repmat(Py',1,2),'r','LineWidth',5)plot(repmat(Px,2,1),repmat([Py(1) Py(end)]',1,2),'r','LineWidth',5); hold offpause(time)endendendend
end
NUM%% Haar特征5:上下白,中间黑,(s,t)=(3,1)s = 3;
t = 1;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征5:上下白,中间黑,(s,t)=(3,1) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                  % Haar窗口宽nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 列方向移动个数Px0 = [0 r/3 r*2/3 r];                           % 矩形坐标初始化Py0 = [0 c];for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(repmat(Px,2,1),repmat(Py',1,length(Px)),'r','LineWidth',3);plot(repmat([Px(1) Px(end)]',1,2),repmat(Py,2,1),'r','LineWidth',3); hold offpause(time)endendendend
end
NUM%% Haar特征6:上下白,中间黑(2倍宽度),(s,t)=(4,1)s = 4;
t = 1;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征6:上下白,中间黑(2倍宽度),(s,t)=(4,1) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                 % Haar窗口宽nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 列方向移动个数Px0 = [0 r/4 r*3/4 r];                           % 矩形坐标初始化Py0 = [0 c];for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(repmat(Px,2,1),repmat(Py',1,length(Px)),'r','LineWidth',3);plot(repmat([Px(1) Px(end)]',1,2),repmat(Py,2,1),'r','LineWidth',3); hold offpause(time)endendendend
end
NUM%% Haar特征7:左上右下白,其它黑,(s,s)=(2,2)s = 2;
t = 2;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征7:左上右下白,其它黑,(s,s)=(2,2) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                  % Haar窗口高nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 行方向移动个数Px0 = [0 r/2 r];                           % 矩形坐标初始化Py0 = [0 c/2 c];                           % 矩形坐标初始化for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(repmat(Px,3,1),repmat(Py',1,length(Px)),'r','LineWidth',3);plot(repmat([Px(1) Px(end)]',1,3),repmat(Py,2,1),'r','LineWidth',3); hold offpause(time)endendendend
end
NUM%% Haar特征8:四周白,中间黑,(s,s)=(3,3)s = 3;
t = 3;
R = s:s:floor(num/s)*s;                                 % Haar窗口高
C = t:t:floor(num/t)*t;                                 % Haar窗口宽
NUM = 0;                                                % Haar特征总数'---- Haar特征8:四周白,中间黑,(s,s)=(3,3) ---'
for I = 1:length(R)for J = 1:length(C)r = R(I)*delta;                                  % Haar窗口高c = C(J)*delta;                                  % Haar窗口高nr = num-R(I)+1;                                 % 行方向移动个数nc = num-C(J)+1;                                 % 行方向移动个数Px0 = [0 r/3 r*2/3 r];                           % 矩形坐标初始化Py0 = [0 c/3 c*2/3 c];                           % 矩形坐标初始化for i = 1:nrfor j = 1:ncPx = Px0+(i-1)*delta;                    % 滑动取点Py = Py0+(j-1)*delta;NUM = NUM+1;if showplot([0 board],repmat((0:delta:board)',1,2),'k'); hold on;plot(repmat((0:delta:board)',1,2),[0 board],'k'); axis tight; axis square;title('Haar矩形遍历演示');xlabel('x');ylabel('y');plot(repmat(Px,4,1),repmat(Py',1,length(Px)),'r','LineWidth',3);plot(repmat([Px(1) Px(end)]',1,4),repmat(Py,2,1),'r','LineWidth',3); hold offpause(time)endendendend
end

在这里插入图片描述


http://chatgpt.dhexx.cn/article/RXdZW2LQ.shtml

相关文章

一文概括机器视觉常用算法以及常用开发库

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 本篇就软件部分,对机器视觉的算法处理进行大致概括分析。 一、算法(预处理算法、检测算法) 在采集完图像后,首先会对图像…

[5机器学习]python计算机视觉应用-图片内容识别

上一期中,ofter介绍了计算机视觉的常用神经网络模型,以及如何选择模型,今天我们就趁热打铁拿个实际的模型跑跑,欢迎大家跨入数据科学家们的世界。 一、机器学习的目标 作为数据科学家,我们必须明白投入大量时间精力进…

计算机视觉用于图像识别的难点在哪?

计算机视觉用于图像识别的难点在哪?作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统,但也存在一些难点,本篇来解答一下这个问题。 计算机视觉用于图像…

Java OCR tesseract 图像智能字符识别技术 Java代码实现

接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下java实现的例子。 拿代码扫描上面的图片,然后输出结果。主要思想就是利用Java…

六、计算机视觉相关内容

文章目录 前言一、图像增广1.1 常用的图像增广1.1.1 翻转和裁剪1.1.2 变换颜色1.1.3 结合多种图像增广方法 二、微调2.1 微调的步骤2.2 具体案例 三、 目标检测和边界框3.1 边界框 四、锚框五、多尺度目标检测六、目标检测数据集七、单发多框检测(SSD)八、区域卷积神经网络(R-C…

python计算机视觉学习第七章——图像搜索

目录 一、基于内容的图像检索 二、 视觉单词 三、 图像索引 3.1 建立数据库 3.2 添加图像 ​编辑四、在数据库中搜素图像 4.1 利用索引获取候选图像 4.2 用一幅图像进行查询 4.3 确定对比基准并绘制结果 五、 使用几何特性对结果排序 一、基于内容的图像检索 CBI…

使用计算机视觉和深度学习创建现代OCR管道

作者 | 学海无涯yc 编辑 | 3D视觉开发者社区 文章目录 前言1.研究和原型设计2.字深网3.字检测器4.组合式端到端系统5.生产化6.性能调优7.优雅 导读 此篇文章中讲述使用了计算机视觉和深度学习的进步,如双向长短期记忆(LSTM),连接…

Java OCR tesseract 图像智能字符识别技术

公司有需求啊,所以就得研究哈,最近公司需要读验证码,于是就研究起了图像识别,应该就是传说中的(OCR:光学字符识别OCR),下面把今天的收获整理一个给大家做个分享。 本人程序用的tess…

《深度学习中的字符识别在工业视觉中的实际应用》

最近在公司做了一个构建卷积神经网络来识别字符的项目,编程环境为pycharm2019,使用的是OpenCvPytorch进行项目的实现,因此想总结和归纳一下方法。 本次的字符识别项目可以分为以下几个步骤: 一、图像处理和字符分割 二、创建自…

python计算机视觉-图像检索和识别

目录 一、原理解析 1.1计算机视觉领域的图像分类是什么意思? 1.2图像分类要如何实现? 1.3Bag-of-features算法和过程? 1)提取图像特征 2)训练字典( visual vocabulary ) 3)图片直方图表示 4)训练分类器 1.4TF-IDF? 1.5当前图像分类中会遇到…

使用计算机视觉和深度学习创建现代 OCR 管道

文章目录 研究和原型设计字深网字检测器组合式端到端系统生产化性能调优优雅 在这篇文章中,我们将带您了解我们如何为[【移动文档扫描仪】构建最先进的光学字符识别(OCR)管道的幕后故事。我们使用了计算机视觉和深度学习的进步,如…

最流行的4个机器学习数据集

最流行的4个机器学习数据集 机器学习算法需要作用于数据,而数据的本质则决定了应用的机器学习算法是否合适,而数据的质量也会决定算法表现的好坏程度。所以会研究数据,会分析数据很重要。本文作为学习研究数据系列博文的开篇,列举…

机器学习——数据集预处理(数据查看和空值处理)

目录 前言 数据集查看 前言 目的:本数据集是为了分析炉丝功率和炉膛温度以及样品盒内部温度之间的关系,分析温场的分布等。 来源:本数据集的来源是实验获得的数据。 特点:特征维度高,数据量大。 数据集查看 1.查…

推荐收藏:50个最佳机器学习公共数据集

外国自媒体mlmemoirs根据github、福布斯、CMU官网等信息,整理了一张50个最佳机器学习公共数据集的榜单,为大家分享一下~ 作者:mlmemoirs 郭一璞 编译 外国自媒体mlmemoirs根据github、福布斯、CMU官网等信息,整理了一张50个最佳…

8种适用于不同机器学习问题的常用数据集

要找到一定特定的数据集可以解决各种机器学习问题,是一件很难的事情。越来越多企业或研究机构将自己的数据集公开,已经成为全球的趋势,这也将有助于大家进行更多研究。 近期,亚马逊高级技术顾问 Will Badr 分享了 8 种适用于不同…

【ML】机器学习数据集:sklearn中回归数据集介绍

目录 1. Boston房价预测数据集2. California房价预测数据集3. 糖尿病预测数据集 在机器学习的教程中,我们会看到很多的demo,这些demo都是基于python中自带的数据集。今天我们将介绍三个用于回归预测的数据集。 1. Boston房价预测数据集 该数据集将在sci…

浅谈机器学习之数据集构建

浅谈机器学习之数据集构建 ​ 正如大家现在知道的,深度学习模型(DL)和机器学习模型(ML)是数据驱动型任务,在近乎完美的数据集面前,模型间的细微差异可以忽略。但要获得覆盖目标场景所有特征的样本,不仅要耗费巨大的人力物力&…

机器学习经典开源数据集盘点

在机器学习任务实施前,如何快速寻找到可用数据集,是令每一位研究人员最头痛的事情。本文为大家列举了八大主流数据集来源,不仅包含大量的数据集信息,而且包含了描述、用法以及一些实施案例等。 01 Kaggle数据集 Kaggle数据集地址h…

免费的机器学习数据集网站(6300+数据集)

今天给大家分享一个免费获取机器学习数据集网站: Machine Learning Datasets | Papers With Code 有想法但没有数据集的同学的福音,网站届满很简洁,及本本上提供的了一般可用的各类数据集,我们可以进行各类影像、评论和点云等数…

学习机器学习算法过程中的常用数据集

文章目录 【数据集1】forge:小型模拟分类问题数据集【数据集2】wave:小型模拟回归问题数据集【数据集3】cancer:中型实际分类问题数据集【数据集4】boston:中型实际回归问题数据集 以下数据集为学习机器学习算法时,经常…