基元检测 Primitive Detection

基元检测

概念:基元检测是指在计算机视觉和模式识别领域中,用于检测和识别图像中的基本形状或特定的局部模式的过程。基元可以是简单的几何形状,如线段、圆、矩形等,也可以是更复杂的图像局部结构,如角点、纹理等。

一、边缘(Edge)检测
边缘是图像中像素灰度值发生剧烈变化而不连续的结果。边缘是赋予单个像素的一种性质,与图像函数在该像素的一个邻域内的梯度特性相关。

边缘幅值:梯度的幅值。
边缘方向:梯度方向旋转-90度。
边缘检测原理
(边缘检测既是常见基元检测的基础,也是基于边界的图像分割的第一步。)
边缘检测算法:Sobel、拉普拉斯算子、坎尼算子算子。

二、角点(Conner)检测
概念:角点检测是计算机视觉领域中的一项关键任务,它旨在检测图像中的角点位置。角点是图像中特殊的像素位置,其周围区域在不同方向上具有较大的梯度变化。角点通常表示物体边缘的交汇点或转折点,具有在不同视角和尺度下都能保持稳定性的特性。

角点检测的主要目标是找到图像中具有以下特征的像素位置
1.灰度梯度变化:角点处的像素周围区域在不同方向上具有明显的灰度梯度变化,这意味着在不同方向上进行灰度变化的边缘都会汇聚在该点。
2.孤立性:角点通常是图像中相对孤立的特征点,与周围区域的像素有明显的灰度差异。

常见的角点检测算法包括以下几种:
1.Harris角点检测算法:通过计算像素点周围邻域的灰度梯度和协方差矩阵来评估角点的响应值。高响应值的像素点被认为是角点。
2.Shi-Tomasi角点检测算法:基于Harris算法的改进版本,使用最小特征值作为角点响应度度量,能够更好地选择角点。
3.FAST角点检测算法:一种快速的角点检测算法,通过在像素周围的圆形邻域上进行高效的像素比较来判断角点。
4.SIFT(尺度不变特征变换)算法:一种基于尺度空间的特征检测和描述算法,能够检测尺度和旋转变化下的角点。
角点检测

三、霍夫变换(Hough Transform)
概念:霍夫变换是一种常用于图像处理和计算机视觉的技术,用于检测图像中的几何形状,特别是直线和圆。

常见的霍夫变换检测应用:

1.直线检测:霍夫变换可以用于检测图像中的直线。它可以找到图像中所有可能的直线,并给出它们的参数表示(通常是极坐标形式)。这对于图像中的边缘检测和直线分割非常有用。

2.圆检测:霍夫变换还可以用于检测图像中的圆。类似于直线检测,它可以找到图像中所有可能的圆,并给出它们的参数表示。这对于圆形物体的检测和跟踪非常有用,例如在计算机视觉中的目标识别和跟踪。

3.曲线检测:除了直线和圆,霍夫变换还可以用于检测其他形状的曲线。例如,如果你知道要检测的曲线的数学方程形式,可以使用霍夫变换来找到图像中符合该方程的曲线。

直线检测

!!!
下面示例用SUSAN算子进行角点检测和利用霍夫变换(Hough Transform)进行直线检测;

展示 matlab代码

1.SUSAN算子角点检测

clear;
clc;
% 读取图像
Image=imread('susan.tif');  
% 转化为灰度图像
%Image=rgb2gray(Image);
% 显示图像
%imshow(Image);
% 获取图像高宽(行烈)
[ImageHeight,ImageWidth]=size(Image);
% 这一步没太大必要
%Image=double(Image);
% 判断灰度相近的阈值
threshold=45;  
% 当前像素和窗体内像素差别在t以下的个数,即相似的个数
usan=[];
% 计算以像素为中心的窗体内包含的
% 包含37个像素的圆窗口,面积为12*pi=37,因此是以sqrt(12)为半径的原
% 没有在外围扩展图像,最终图像会缩小
for i=4:ImageHeight-3         
   for j=4:ImageWidth-3 
        %从原图中截取7*7的区域再在其中挑选圆窗
        tmp=Image(i-3:i+3,j-3:j+3);  
        %c表示灰度值相近的程度,越大越相近
        c=0;
        for p=1:7
           for q=1:7
               %7*7的区域中选取圆窗包含的像素
                if (p-4)^2+(q-4)^2<=12 
                    %usan(k)=usan(k)+exp(-(((img(i,j)-tmp(p,q))/t)^6));
                    %判断灰度是否相近,t是自己设置的
                    if abs(Image(i,j)-tmp(p,q))<threshold  
                        c=c+1;
                    end
                end
           end
        end
        usan=[usan c];
   end
end
%相当于进一步调整阈值,在threshold的基础上进一步减少角点个数
g=2*max(usan)/3;
for i=1:length(usan)
   if usan(i)<g 
       usan(i)=g-usan(i);
   else
       usan(i)=0;
   end
end
% 由于usan是一维的,所以要重新变换为二维,对应图像位置
imgn=reshape(usan,[ImageWidth-6,ImageHeight-6])';
%figure;
%imshow(imgn)
%非极大抑制
[m n]=size(imgn);
re=zeros(m,n);
for i=2:m-1
   for j=2:n-1 
        if imgn(i,j)>max([max(imgn(i-1,j-1:j+1)) imgn(i,j-1) imgn(i,j+1) max(imgn(i+1,j-1:j+1))]);
            re(i,j)=1;
        else
            re(i,j)=0;
        end
   end
end
figure;
imshow(Image)
hold on;
[x,y]=find(re==1);
plot(y,x,'*')

运行结果展示:

灰度图:灰度图
边缘检测:
边缘检测
角点检测:
角点检测

2.霍夫变换(Hough Transform)直线检测

展示 matlab代码

clear;
close all;

img = imread('hough.jpg');
figure(1),
subplot(1,2,1);
imshow(img);  
title('原始图像'); 
img=rgb2gray(img);  % 灰度图像
subplot(1,2,2);
imshow(img);  
title('灰度图像'); 
thresh=[0.01,0.10];  %敏感度阈值
sigma=3;%定义高斯参数  

f = edge(double(img),'canny',thresh,sigma);  %边缘检测
figure(2),
imshow(f);  
title('canny 边缘检测');  
 
% 检测函数;
[H, theta, rho]= hough(f,'Theta', 20:0.1:75);  %0-1
% H->累计数组 , thetaH:对应的θ,实际上H的大小就是Rho×Theta
% Rho:H对应的ρ

peak=houghpeaks(H,5);  %峰值提取
hold on  %保留当前的图和特定的坐标轴属性,以便后续的绘图命令添加到现有的图表。
%得到线段信息
lines=houghlines(f,theta,rho,peak);  

figure(3);
imshow(f,[]);
title('霍夫变换检测结果');
hold on  ;

for k=1:length(lines)  
    xy=[lines(k).point1;lines(k).point2];  
    plot(xy(:,1),xy(:,2),'LineWidth',4,'Color',[1,0,0]);  
end  

运行结果展示:

原图和灰度图
canny边缘检测
霍夫变换检测

总结:

SUSAN (Smallest Univalue Segment Assimilating Nucleus) 算子是一种常用于图像处理中的角点检测算法,而霍夫变换是一种用于直线检测的技术。下面我将介绍它们各自的特点:

SUSAN算子进行角点检测的特点:

  1. 不依赖于图像的梯度信息:SUSAN算子基于像素周围的灰度值统计信息,而不需要计算图像的梯度。这使得它对于噪声的鲁棒性较强。
  2. 对光照变化具有一定的鲁棒性:SUSAN算子通过比较像素周围的邻域内像素与中心像素的灰度差异来确定角点。因此,即使图像存在一定的光照变化,也可以进行有效的角点检测。
  3. 尺度不变性:SUSAN算子可以在不同尺度的图像上进行角点检测。它使用一个可调节的半径参数来控制邻域的大小,从而实现对不同尺度的角点检测。

霍夫变换进行直线检测的特点:

  1. 鲁棒性:霍夫变换对于图像噪声和局部干扰具有一定的鲁棒性。由于霍夫变换是通过在参数空间中进行累加来检测直线,因此它可以忽略图像中的孤立点和干扰线段。
  2. 对于多条直线的检测:霍夫变换可以检测图像中存在的多条直线,而不仅仅是一条直线。它在参数空间中的累加过程可以检测到不同的直线参数组合。
  3. 对于局部形状变化的敏感性:霍夫变换在检测直线时对局部形状变化较为敏感。因此,即使直线在一定程度上被中断或存在间断,霍夫变换也可以检测到相应的直线段。

需要注意的是,SUSAN算子和霍夫变换都是图像处理领域中的经典方法,它们各自有其特点和适用范围。在实际应用中,根据具体的场景和需求,可以选择合适的算法进行角点检测和直线检测。

猜你喜欢

转载自blog.csdn.net/weixin_52374973/article/details/130625933