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

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

paper 69:Haar-like矩形遍历检测窗口演示Matlab源代码[转载]的相关文章

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

基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.Adaboost.级联.理解了这三个词对该算法基本就掌握了. 1        算法要点 Haar分类器 = Haar-like特征 + 积分图方法 + AdaBoost +级联: Haar分类器算法的要点例如以下: a)        使用Haar-like特征做检測. b)       使用积分图(IntegralImage)对Haar-like

矩形重叠检测。

// 矩形重叠类型注释 // CORNER_OVERLAP // -------------------- // | | // | | // | **********|********** // | * | * // | * | * // ---------*---------| * // * * // * * // ********************* // // ANCHOR_OVERLAP // ---- // | | // | | // *******|**|******* //

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

今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: 1 /*24_链表创建和链表遍历算法的演示*/ 2 # include <stdio.h> 3 # include <malloc.h> 4 # include <stdlib.h> 5 6 typedef struct Node 7 { 8 int data;//数据域 9 struct Node * pNext;//指针域 10 }NODE, *PNODE;//

C# foreach语句遍历集合类型演示范例的代码

下面资料是关于C# foreach语句遍历集合类型演示范例的内容,希望能对各位朋友有些用处. using System; using System.Collections; public class Tokens: IEnumerable { private string[] elements; Tokens(string source, char[] delimiters) { elements = source.Split(delimiters); } { return new TokenE

paper 111:图像分类物体目标检测 from RCNN to YOLO

参考列表 Selective Search for Object Recognition Selective Search for Object Recognition(菜菜鸟小Q的专栏) Selective Search for Object Recognition(Surge) Selective Search for Object Recognition(原始论文) Efficient Graph-Based Image Segmentation(快速图像分割) Homepage of K

6-9 Haar+adaboost人脸识别

我们重点分析了Haar特征的概念以及如何计算Haar特征,并介绍了Haar+Adaboost分类器它们的组合以及Adaboost分类器如何使用和训练.这节课我们将通过代码来实现一下Haar+Adaboost分类器实现的人脸识别. 计算jpg图片的haar特征,不过这一步opencv已经帮我们做了,所以我们不需要.我们只需要对这个图片进行一个灰度处理,因为所有的haar特征必须要是基于灰度图片来进行计算的.第四步,我们进行检测.所以我们要检测出来当前的haar特征的人脸以及人脸上的眼睛.总共有两个

paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)

1. 早期C. Koch与S. Ullman的研究工作. 他们提出了非常有影响力的生物启发模型. C. Koch and S. Ullman . Shifts in selective visual attention: Towards the underlying neural circuitry. Human Neurobiology, 4(4):219-227, 1985. C. Koch and T. Poggio. Predicting the Visual World: Silenc

使用onbeforeunload事件检测窗口是否刷新或关闭 .

onunload,onbeforeunload 在页面刷新或关闭时调用,区别在于: onbeforeunload 是在页面刷新或关闭前触发,这时浏览器并未请求服务器读取新页面,因此onbeforeunload是可以阻止页面更新或关闭的. onunload 也是在页面刷新或关闭时触发,不过这时浏览器已经向服务器请求读取新页面,因此onunload是无法阻止页面更新或关闭的. 1. onbeforeunload 事件 事件触发时会弹出一个有确定和取消的对话框,确定后才会执行后续事件,否则继续留在本页

车牌识别技术详解六--基于Adaboost+haar训练的车牌检测

一.准备样本: 正样本: 负样本: