Haar-like矩形遍历检测窗口演示Matlab源代码
clc; clear; close all; % Haar-like特征矩形计算 board = 24 % 检测窗口宽度 num = 24 % 检测窗口分划数 show = 1; % 1为作图 time = 0.001; % 作图间隔 %% if mod(board,num)~=0 error(‘检测窗口宽度必须是分划数的整数倍‘) else delta = 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end 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:nr for j = 1:nc Px = Px0+(i-1)*delta; % 滑动取点 Py = Py0+(j-1)*delta; NUM = NUM+1; if show plot([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 off pause(time) end end end end end NUM % 毕业院校:海军工程大学,水声工程专业,博士 % 精通方向:数字信号(图像、视频)处理,人工智能与模式识别,群体智能优化,非线性与混沌,支持向量机,Matlab与VC++混编 % 现任岗位:沈阳聚德视频技术有限公司,图像处理及模式识别研发工程师 % 工作职责:车牌识别,视频目标跟踪等算法开发,C/C++实现,DSP植入 % 兴趣爱好:金融时序的程式化交易 % % 主要成果: % [1] 实现车牌识别C/C实现,DSP植入,识别率:汉字不低于99%,数字字母不低于99.5%,整牌不低于97% % [2] 精通数字信号(图像、视频)“特征提取”与“模式识别”的研究与开发,开展了“支持向量机”应用研究,原创文章有《四种支持向量机工具箱使用要点》,独立开发了“支持向量机Matlab工具箱Version1.0”。结题项目有:语音信号处理与识别,遥感图像的特征提取与分类,人脸识别,主被动声纳信号处理与识别等 % [3] 精通“群体智能优化”,原创工具箱有“群体智能算法”Matlab工具箱 Version2.0”,误差精度优于现有公开发表文献,工程中解决了各种高维复杂问题的优化计算 % [4] 精通“时间序列混沌建模和预测”,基于Matlab和VC 混编平台,独立开发了混沌分析和预测软件包“混沌时间序列分析与预测工具箱 Version2.9”。结题项目有:金融数据波动性分析与程式化交易,银行反洗钱异常检测系统,混沌背景弱信号检测,海洋混响背景弱目标检测等 % [5] 精通Matlab与VC 混合编程:(a)以VC 为界面,核心算法采用Matlab函数,原创文章有《如何将Matlab7.0函数转换成VC 6.0动态链接库》;(b)以Matlab为界面,耗时算法在VC 环境中采用Mexfunction编译。 % % 联系方式
转载来源:http://blog.sina.com.cn/s/blog_736aa0540101kzqb.html
个人博客: http://blog.sina.com.cn/luzhenbo2
时间: 2024-10-19 05:58:13