from:http://blog.sina.com.cn/s/blog_736aa0540101kzqb.html

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编译。
%
% 联系方式

电子邮件:luzhenbo2@qq.com

个人博客: http://blog.sina.com.cn/luzhenbo2

(转)Haar-like矩形遍历检测窗口演示Matlab源代码的更多相关文章

  1. paper 69:Haar-like矩形遍历检测窗口演示Matlab源代码[转载]

    Haar-like矩形遍历检测窗口演示Matlab源代码 clc; clear; close all; % Haar-like特征矩形计算 board = 24 % 检测窗口宽度 num = 24 % ...

  2. 基于Haar特征Adaboost人脸检测级联分类

    基于Haar特征Adaboost人脸检测级联分类 基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.A ...

  3. WPF Window异形窗口演示

    我们先通过简单的效果展示,切换展示不同图片: 我们先定义图片资源文件,我们可以在window资源中定义,下面的在app.xaml文件来定义: <Application x:Class=" ...

  4. 链表创建和链表遍历算法的演示_C语言

    今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: /*24_链表创建和链表遍历算法的演示*/ # include <stdio.h> ...

  5. OpenCV 矩形轮廓检测

    转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/44151213, 来自:shiter编写程序的艺术 基础介绍 OpenCV里提取目 ...

  6. Silverlight子窗口(ChildWindow)传递参数到父窗口演示

    在企业级项目中,子窗口(ChildWindow)是一个常用控件,其展示方式是以弹出窗口来显示信息. 这里我将演示,子窗口传递参数到父窗口的方法.由于我的开发环境都是英文环境,所以部分中文可能显示不正常 ...

  7. 遍历windows窗口

    原文 1. GetDesktopWindow GetNextWindow HWND hAll = ::GetDesktopWindow(); HWND hCurrent = ::GetNextWind ...

  8. python3+openCV实现图片的人脸人眼检测,原理+参数+源代码

    上学时候用matlab学过一些图像处理的基础知识,当时课程作业是用haar实现人脸检测 but当时是心思根本不在图像处理上,so找了个同学帮忙做的,自己没上心 然鹅天道好轮回,现在捡起来了原来的算法一 ...

  9. OpenCV角点检测goodFeaturesToTrack()源代码分析

    上面一篇博客分析了HARRIS和ShiTomasi角点检测的源代码.而为了提取更准确的角点,OpenCV中提供了goodFeaturesToTrack()这个API函数,来获取更加准确的角点位置.这篇 ...

随机推荐

  1. linux 内存释放命令

    我使用的是CentOS 6.5 ,由于卸载Solr 后发现内存占用挺多的,我想释放一下内存,就查阅了一些资料,分享给大家: 1.free -m  查看内存的使用情况,-m表示单位是兆 2.echo 1 ...

  2. C语言 字符串中数字的运算

    主函数中输入字符串"32486"和"12345",在主函数中输出的函数值为44831. #include <stdio.h> #include &l ...

  3. RabbitMQ 基本概念和使用

    当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本.AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客 ...

  4. Doubango简介-sip

    Welcome Android http://code.google.com/p/imsdroid/ http://code.google.com/p/imsdroid/source/browse/# ...

  5. Spring 与 MyBatis 的整合

    本文讨论 Spring 与 MyBatis 的整合. 在 beans.xml 中我们定义了两个 bean: SqlSessionFactoryBean.SqlSessionTemplate. 1.Sq ...

  6. 杂项:DCloud.io

    ylbtech-杂项:DCloud.io 1.返回顶部 1. DCloud.io,数字天堂(北京)网络技术有限公司. 国内HTML5产业的领军企业,W3C会员,HTML5中国产业联盟发起单位Dclou ...

  7. 1106SQLserver基础--变量、运算符的使用,if...else,while语句

    数据库---变量(对数据库中的数据没有任何影响) 作用:临时存储数据的作用,起一个衔接的作用,为了方便理解存储过程. 例:Declare @hello varchar(20) Set @hello=’ ...

  8. C语言枚举类型enum-(转)-温故而知新

    在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...

  9. liunx环境,摄像头无法识别,解决方案

    今天无语了,linux14.04系统下,使用罗技c270摄像头.发现插上没有反应,系统版本: lenovo-myc@lenovomyc-Lenovo-Product:~/Downloads$ unam ...

  10. 指定jdk编译或运行

    set JAVA_HOME=D:\java\jdk8 set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\tools.jar; set Pat ...