Image Characteristics Extracton
图像的边缘检测
一阶微分算子一般借助空域微分算子通过卷集完成,但实际上数字图像中求导是利用差分近似微分来进行的。梯度对应一阶导数,梯度算子是一阶导数算子。对一个连续函数f(x,y),它在位置(x,y)梯度可表示为一个矢量:
对于数字图像,导数可以用差分来近似,则梯度可以表示为:
来在实际中常用小区域模板卷积近似计算。对Gx和Gy各用一个模板,所以需要两个模板组合起来构成一个梯度算子。根据模板的大小
Roberts算子:由Roberts提出的算子是一种利用局部差分算子寻找边缘的算子,边缘的锐利程度由图像灰度的梯度决定。梯度是一个向量,∇ f指出灰度变化的最快的方向和数量。因此最简单的边缘检测算子是用图像的垂直和水平差分来
近梯度算子:对每一个像素计算出以上式子的向量,求出它的绝对值,然后与阈值进行比较,利用这种思想就得到了Roberts交叉算子:
Prewitt边缘检测算子使用两个有向算子(水平+垂直),每一个逼近一个偏导数,这是一种类似计算偏微分估计值的方法,x,y两个方向的近似检测算子为:、
得出卷积模板为:
记图像M,阀值T
如在matlab中实现上述判断:
if(T> threshold)
newGrayPic(i,j)=255;
else
newGrayPic(i,j)=0;
End
Sobel算子和Prewitt算子都是加权平均,但是Sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。
Sobel 算子一种将方向差分运算与局部平均相结合的方法。该算子是在以f(x,y)为中心的3x3邻域上计算x和y方向的偏导数,即
得出卷积模板为:
记图像M,阀值T
运用二阶微分算子检测图像边缘
对于一维函数,其二阶导数它的差分函数为,
普拉斯算子:拉普拉斯算子是n维欧式空间的一个二阶微分算子。它定义为两个梯度向量算子的内积
对于1维离散情况,其二阶导数变为二阶差分
1)首先,其一阶差分为
2)因此,二阶差分为
3)因此,1维拉普拉斯运算可以通过1维卷积核[1,2,1]实现对于2维离散情况(图像),拉普拉斯算子是2个维上二阶差分的和(见式3.3),其公式为:
基于canny算子检测图像边缘
边缘检测提取主要分四步:去躁,计算梯度值与方向角,非最大化阈值,滞后阈值化。
例4.1-1
> I=imread('circuit.tif');
>> BW1=edge(I,'prewitt');
>> BW2=edge(I,'canny');
>> subplot(1,2,1),imshow(BW1);
>> subplot(1,2,2),imshow(BW2);
>>
Harris角点的基本原理
对于图像 I(x,y) ,当在点 (x,y) 处平移 (Δx,Δy) 后的自相似性,可以通过自相关函数给出:
其中, W(x,y) 是以点 (x,y) 为中心的窗口, w(u,v) 为加权函数,它既可是常数,也可以是高斯加权函数。
对于图像 I(x,y) ,当在点 (x,y) 处平移 (Δx,Δy) 后的自相似性,可以通过自相关函数给出:
其中, W(x,y) 是以点 (x,y) 为中心的窗口, w(u,v) 为加权函数,它既可是常数,也可以是高斯加权函数。
可以将Harris图像角点检测算法归纳如下,共分以下五步:
1.计算图像
I(x,y)
在
X
和
Y
两个方向的梯度
Ix、Iy
。
Ix=?I?x=I?(?1 0 1),Iy=?I?x=I?(?1 0 1)T
2. 计算图像两个方向梯度的乘积。
3. 使用高斯函数对 I2x、I2y和Ixy 进行高斯加权(取 σ=1 ),生成矩阵 M 的元素 A、B 和 C 。
4.. 计算每个像素的Harris响应值 R ,并对小于某一阈值 t 的 R 置为零。
5. 在
3×3
或
5×5
的邻域内进行非最大值抑制,局部最大值点即为图像中的角点。
4.2-1
I = imread('pout.tif');
I = I(1:150,1:120); |
subplot(1,2,1);
imshow(I);
title('输入图像');
CM = cornermetric(I);
corner_peaks = imregionalmax(CM);
corner_idx = find(corner_peaks = = ture);
[rgb] = 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('图像中的角点');
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维向量,即描述子,用它可以进行匹配等工作。