zoukankan      html  css  js  c++  java
  • (转)Haar-like矩形遍历检测窗口演示Matlab源代码

    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

  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/bianbinbin/p/3142352.html
Copyright © 2011-2022 走看看