zoukankan      html  css  js  c++  java
  • MATLAB FAST特征点检测

    算法思想:如果一个像素与它邻域的像素差别较大(过亮或过暗) , 那它更可能是角点。

    算法步骤:

    1.上图所示,一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、...、p16)。

    2.定义一个阈值。计算p1、p9与中心p的像素差,若它们绝对值都小于阈值,则p点不可能是特征点,直接pass掉;否则,当做候选点,有待进一步考察;

    3.若p是候选点,则计算p1、p9、p5、p13与中心p的像素差,若它们的绝对值有至少3个超过阈值,则当做候选点,再进行下一步考察;否则,直接pass掉;

    4.若p是候选点,则计算p1到p16这16个点与中心p的像素差,若它们有至少9个超过阈值,则是特征点;否则,直接pass掉。

    5.对图像进行非极大值抑制:计算特征点出的FAST得分值(即score值,也即s值),判断以特征点p为中心的一个邻域(如3x3或5x5)内,计算若有多个特征点,则判断每个特征点的s值(16个点与中心差值的绝对值总和),若p是邻域所有特征点中响应值最大的,则保留;否则,抑制。若邻域内只有一个特征点(角点),则保留。

    代码如下:

     1 clear all;
     2 close all;
     3 clc;
     4 
     5 img=imread('lena.jpg');
     6 imshow(img)
     7 
     8 [m n]=size(img);
     9 score=zeros(m,n);
    10 
    11 t=60;   %阈值
    12 for i=4:m-3
    13     for j=4:n-3
    14         p=img(i,j);    
    15         %步骤1,得到以p为中心的16个邻域点
    16         pn=[img(i-3,j) img(i-3,j+1) img(i-2,j+2) img(i-1,j+3) img(i,j+3) img(i+1,j+3) img(i+2,j+2) img(i+3,j+1) ...
    17             img(i+3,j) img(i+3,j-1) img(i+2,j-2) img(i+1,j-3) img(i,j-3) img(i-1,j-3) img(i-2,j-2) img(i-3,j-1)];
    18 
    19         %步骤2
    20         if abs(pn(1)-p)<t && abs(pn(9)-p)<t
    21            continue; 
    22         end
    23         
    24         %步骤3     
    25         p1_5_9_13=[abs(pn(1)-p)>t abs(pn(5)-p)>t abs(pn(9)-p)>t abs(pn(13)-p)>t];
    26         if sum(p1_5_9_13)>=3
    27             ind=find(abs(pn-p)>t);
    28             %步骤4         
    29             if length(ind)>=9
    30                 score(i,j) = sum(abs(pn-p));      
    31             end
    32         end
    33     end
    34 end
    35 
    36 %步骤5,非极大抑制,并且画出特征点
    37 for i=4:m-3
    38     for j=4:n-3
    39         if score(i,j)~=0
    40             if max(max(score(i-2:i+2,j-2:j+2)))==score(i,j)               
    41                 [img(i-3,j), img(i-3,j+1), img(i-2,j+2), img(i-1,j+3), img(i,j+3), img(i+1,j+3), img(i+2,j+2), img(i+3,j+1), ...
    42                  img(i+3,j), img(i+3,j-1), img(i+2,j-2), img(i+1,j-3), img(i,j-3), img(i-1,j-3), img(i-2,j-2), img(i-3,j-1)]= ...
    43                  deal(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
    44             end
    45         end
    46     end
    47 end
    48 figure;
    49 imshow(img);

    结果如下:

    原图:

    检测结果:

  • 相关阅读:
    20199319 2019-2020-2 《网络攻防实践》第七周作业
    《访问控制策略描述和应用》阅读总结
    密码学基础学习-序列密码
    密码学基础学习-1
    《一种普适计算下的访问控制策略》阅读总结
    20199319 2019-2020-2 《网络攻防实践》第五周作业
    《访问控制策略描述语言与策略冲突研究》阅读总结
    20199319 2019-2020-2 《网络攻防实践》第四周作业
    20199319 2019-2020-2 《网络攻防实践》第三周作业
    记录旧手机(米6)安装Linux(Ubuntu16.04)踩过的坑
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13645600.html
Copyright © 2011-2022 走看看