您的位置:首页 > 其它

图像的边缘检测+角点特征检测+surf特征提取

2017-04-01 13:44 274 查看
一,什么是·图像的边缘检测

图像的边缘是指其周围像素灰度急剧变化的那些像素的集合,它是图像最基本的特征,而图像的边缘检测即先检测图像的边缘点,再按照某种策略将边缘点连接成轮廓,从而构成分割区域

canny算子:canny算子也是一阶微分算子,但它对一阶微分算子进行了扩展,主要是在原一阶微分算子的基础上,增加了非最大值抑制和双阈值两项改进

Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

好的检测- 算法能够尽可能多地标识
4000
出图像中的实际边缘。

好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。

最小响应- 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。

为了满足这些要求 Canny 使用了变分法,这是一种寻找满足特定功能的函数的方法。最优检测使用四个指数函数项的和表示,但是它非常近似于高斯函数的一阶导数。

Prewitt算子:是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

对数字图像f(x,y),Prewitt算子的定义如下:

G(i)=|[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]|

G(j)=|[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]|

则 P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)

二,什么是角点特征检测

角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。

角点在三维场景重建、运动估计、目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。

目前的角点检测算法可归纳为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。对灰度图像、二值图像、边缘轮廓曲线的角点检测算法进行综述,分析了相关的算法,并对各种检测算法给出了评价。

Harris角点的基本原理:

   人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

三,surf特征提取的概念

在SURF算法中,特征点的判据为某像素亮度的Hessian矩阵的行列式(Dxx*Dyy-Dxy*Dxy)为一个极值。由于Hessian矩阵的计算需要用到偏导数的计算,这一般通过像素点亮度值与高斯核的某一方向偏导数卷积而成;在SURF算法里,为提高算法运行速度,在精度影响很小的情况下,用近似的盒状滤波器(0,1,1组成的box filter)代替高斯核。因为滤波器仅有0,-1,1,因此卷积的计算可以用积分图像(Integral image)来优化(O(1)的时间复杂度),大大提高了效率。每个点需计算Dxx,Dyy,Dxy三个值,故需要三个滤波器;用它们滤波后,得到一幅图像的响应图(Response
image,其中每个像素的值为原图像素的Dxx*Dyy-Dxy*Dxy)。对图像用不同尺寸的滤波器进行滤波,得到同一图像在不同尺度的一系列响应图,构成一个金字塔(该金字塔无需像SIFT中的高斯一样进行降采样,即金字塔每组中的每层图像分辨率相同)。

特征点的检测与SIFT一致,即若某点的Dxx*Dyy-Dxy*Dxy大于其邻域的26个点(与SIFT一致)的Dxx*Dyy-Dxy*Dxy,则该点为特征点。特征点的亚像素精确定位与SIFT一致。

其次,描述子的建立

为保证特征点描述子的旋转不变性,需对每个特征点计算主方向。计算主方向的过程如下:

统计以特征点为中心,正比于特征点尺度的某个数位半径,张角为60°的扇形区域内所有像素点的 sumX=(y方向小波变换响应)*(高斯函数),sumY=(x方向小波变换响应)*(高斯函数), 计算合成向量角度θ=arctan(sumY/sumX),模长sqrt(sumy*sumy+sumx*sumx)。

将扇形沿逆时针旋转(一般取步长为0.1个弧度),以同样方法计算合成向量。

求出各方向扇形的合成向量模长最大值,其对应的角度即特征点主方向。

描述子的建立过程如下:

选定以特征点为中心的一块正方形区域,将其旋转与主方向对齐。

将正方形分为4x4的16个子区域,对每个区域进行Haar 小波变换(同样用积分图像加速),得到4个系数。

由上述两步,生成4x4x4=64维向量,即描述子,用它可以进行匹配等工作。

二,例题

4.1-1对所输入的图像进行边缘检测

I=imread('circuit.tif');

读入图像

BW1=edge(I,'prewitt');

采用prewitt算子进行边缘检测

 BW2=edge(I,'canny');

采用canny算子进行边缘检测

subplot(1,2,1),imshow(BW1);

subplot(1,2,2),imshow(BW2);



4.2-1对输入的图像进行角点检测

I=imread('pout.tif');

I=I(1:150,1:120);

subplot(1,2,1);

imshow(I);

title('输入图像');

确定待测的图像区域并显示

CM=cornermetric(I);

对图像进行Harris角点提取

corner_peaks=imregionalmax(CM);

corner_idx=find(corner_peaks==true);

[r g b]=deal(I);

r(corner_idx)=255;

g(corner_idx)=255;

b(corner_idx)=0;

RGB=cat(3,r,g,b);

subplot(1,3,3);

imshow(RGB);

title('图像中的点');

查找矩阵中最大的点并显示



4.3-1检测灰度图像surf特征

I=imread('cameraman.tif');

读入图像

points=detectSURFFeatures(I);

对输入的图像检测surf特征

imshow(I);hold on;

plot(points.selectStrongest(10));

显示最强的十个surf特征点

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: