• 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

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/molakejin/p/5498721.html
Copyright © 2020-2023  润新知