基于matlab实现FAST算法进行角点检测【图像处理_01】

快速角点检测

角点检测的方法用于图像分析中的特征提取步骤,它是计算机视觉系统中用于从图像中提取相关信息和特征的一种方法。

1.FAST算法

根据图像处理时的图像输入等步骤,我们引入快速角点检测后的字符识别逻辑步骤将包括滤波器、窗口输入图像等步骤,其逻辑步骤如下:

基于matlab实现FAST算法进行角点检测【图像处理_01】_第1张图片

角点检测应用在运动检测、视频中的图像跟踪、3D 建模、图像配准、对象识别等中。FAST 是一种算法,用于识别图像中的某些点,该点是具有良好定义位置的像素值。图像并且可以被有效地检测。角点检测方法是使用来自加速段的特征测试(FAST)算法来执行的。角点检测可以通过使用许多其他算法来执行,如Harris角点检测、SUSAN 角点检测等,如下图所示的FAST算法。

基于matlab实现FAST算法进行角点检测【图像处理_01】_第2张图片

该算法使用的方法是通过考虑一个圆形区域来检测拐角的存在,以在拐角的潜在中心周围对其进行测试。如果图像的一部分具有比中心和预定义阈值相加的像素高的像素,或者如果该部分具有比中心和预定义阈值之和的像素低的像素,则该角的测试检测角的存在阈值。该算法适用于实时应用,其唯一目的是识别给定输入图像中的目标点,这些点是位置明确且可以有效检测的像素。这些目标点包含有价值的信息,也可以在其他图像中重复使用,视频跟踪,图像匹配等。

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

⑵定义一个阈值,计算p1、p9、p5、p13与中心p的像素差,若它们的绝对值有至少3个超过阈值,则当做候选角点,再进行下一步考察;否则,不可能是角点;

⑶若p是候选点,则计算p1到p16这16个点与中心p的像素差,若它们有至少连续9个超过阈值,则是角点;否则,不可能是角点。

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

上面是FAST-9,当然FAST-10、FAST-11、FAST-12也是一样的,只是步骤3中,超过阈值的个数不一样。FAST算法实现起来简单,尤其是以速度快著称。

2.角点检测matlab实践

为了直观的展示快速角点检测方法,根据上节所提到的FAST算法逻辑步骤,我们设计出仿真程序并利用matlab对图片进行处理。

%FAST角点检测
%角点也就是极值点
clear all;  
close all;  
%图像读取
pic=imread('test.jpg');  
img=pic;  
[M N D]=size(pic);%计算图像像素值  
if D==3 
    pic=rgb2gray(pic);%把rgb图像转为灰度图像  
end  
%  
mask=[0 0 1 1 1 0 0;...  
      0 1 0 0 0 1 0;...  
      1 0 0 0 0 0 1;...  
      1 0 0 0 0 0 1;...  
      1 0 0 0 0 0 1;...  
      0 1 0 0 0 1 0;...  
      0 0 1 1 1 0 0];%制作16个圆周点单位矩阵  
mask=uint8(mask);%把大于255的数强制为255,也就是把灰度值映射到0-255内  
threshold=50;%定义阀值  
figure;imshow(img);%显示灰度图像
title('FAST角点检测');hold on;  
%用tic、toc记录处理时间
tic;  
for i=4:M-3  
    for j=4:N-3%若I1、I9与中心I0的差均小于阈值,则不是候选点  
        %计算p1、p9、p5、p13与中心p的像素差
        delta1=abs(pic(i-3,j)-pic(i,j))>threshold;  
        delta9=abs(pic(i+3,j)-pic(i,j))>threshold;  
        delta5=abs(pic(i,j+3)-pic(i,j))>threshold;  
        delta13=abs(pic(i,j-3)-pic(i,j))>threshold;  
        if sum([delta1 delta9 delta5 delta13])>=3%像素差超过阀值的个数  
            block=pic(i-3:i+3,j-3:j+3);  
            block=block.*mask;%提取圆周16个点  
            pos=find(block);%查找圆周点中的非0点  
            block1=abs(block(pos)-pic(i,j))/threshold;  
            block2=floor(block1);%把block1中的数向负无穷方向取整  
            res=find(block2);  
            if size(res,1)>=12  %筛选
                plot(j,i,'ro');  
            end  
        end  
    end  
end  
toc;  

处理结果:

原始图像:

基于matlab实现FAST算法进行角点检测【图像处理_01】_第3张图片

 处理后的图:

基于matlab实现FAST算法进行角点检测【图像处理_01】_第4张图片

根据FAST算法,对比处理前后的仿真图像,我们可以直观的看到所选择的角点,它们作为图像中重要的特征,对图像图形的理解和分析有很重要的作用。这些角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。 

参考文献:

  1. K. Wang, B. Babenko, S. Belongie, End-to-end scene text recognition, Proceedings of the IEEE International Conference on Computer Vision, 2011.
  2. Amarjot Singh, Ketan Bacchuwar, Akshay Bhasin, A Survey of OCR Applications, Int. J. Mach. Learn. Comput. (2012) 314–318,https://doi.org/ 10.7763/IJMLC.2012.V2.137.
  3. 夏瑜潞. 人工神经网络的发展综述[J]. 电脑知识与技术, 2019(20).

你可能感兴趣的:(图像处理,matlab,算法,图像处理,图像识别)