Image Characteristics Extracton(MATLAB)

来源:互联网 发布:网络销售总结 编辑:程序博客网 时间:2024/05/16 11:24

                                          Image Characteristics Extracton

  图像的边缘检测

     概念:图像的边缘检测是指其周围像素急剧变化的那些像素的集合,它是图像基本的特征。边缘位于目标、背景、和区域之间,所以,它是图像分割最好的依据。边缘检测的基本思想是先检测图像中的边缘点,再按某种策略将边缘点连接成轮廓,从而构成分割区域。由于边缘检测是所要提取目标和背景的分界线,提取出边缘才能将目标和背景分分割开。边缘一般分为两种一种是阶跃状边缘,边缘两边像素的灰度值明显不同;另一种为屋顶状边缘,边缘处于灰度值从小到大变化的折点出。
  一阶边缘算子。它利用图像边缘的阶跃性,图像的梯度在边缘取得极大值的特征进行边缘检测,即图像梯度在边缘取得极大值的特性进行边缘检测。梯度是一个矢量,它具有方向和模。

  一阶微分算子一般借助空域微分算子通过卷集完成,但实际上数字图像中求导是利用差分近似微分来进行的。梯度对应一阶导数,梯度算子是一阶导数算子。对一个连续函数f(x,y),它在位置(x,y)梯度可表示为一个矢量:

对于数字图像,导数可以用差分来近似,则梯度可以表示为:

在实际中常用小区域模板卷积近似计算。对GxGy各用一个模板,所以需要两个模板组合起来构成一个梯度算子。根据模板的大小

 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)后的自相似性,可以通过自相关函数给出:

c(x,y;Δx,Δy)=(u,v)W(x,y)w(u,v)(I(u,v)I(u+Δx,v+Δy))2

其中,W(x,y)是以点(x,y)为中心的窗口,w(u,v)为加权函数,它既可是常数,也可以是高斯加权函数。

对于图像I(x,y),当在点(x,y)处平移(Δx,Δy)后的自相似性,可以通过自相关函数给出:

c(x,y;Δx,Δy)=(u,v)W(x,y)w(u,v)(I(u,v)I(u+Δx,v+Δy))2

其中,W(x,y)是以点(x,y)为中心的窗口,w(u,v)为加权函数,它既可是常数,也可以是高斯加权函数。

可以将Harris图像角点检测算法归纳如下,共分以下五步:

1.计算图像I(x,y)XY两个方向的梯度IxIy

Ix=?I?x=I?(?1 0 1)Iy=?I?x=I?(?1 0 1)T

2. 计算图像两个方向梯度的乘积。

3. 使用高斯函数对I2xI2yIxy进行高斯加权(取σ=1),生成矩阵M的元素ABC

4.. 计算每个像素的Harris响应值R,并对小于某一阈值tR置为零。

5. 在3×35×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一致。
其次,描述子的建立
  • 为保证特征点描述子的旋转不变性,需对每个特征点计算主方向。计算主方向的过程如下:
    1. 统计以特征点为中心,正比于特征点尺度的某个数位半径,张角为60°的扇形区域内所有像素点的 sumX=(y方向小波变换响应)*(高斯函数),sumY=(x方向小波变换响应)*(高斯函数), 计算合成向量角度θ=arctan(sumY/sumX),模长sqrt(sumy*sumy+sumx*sumx)。
    2. 将扇形沿逆时针旋转(一般取步长为0.1个弧度),以同样方法计算合成向量。
    3. 求出各方向扇形的合成向量模长最大值,其对应的角度即特征点主方向。
  • 描述子的建立过程如下:
    1. 选定以特征点为中心的一块正方形区域,将其旋转与主方向对齐。
    2. 将正方形分为4x4的16个子区域,对每个区域进行Haar 小波变换(同样用积分图像加速),得到4个系数。
    3. 由上述两步,生成4x4x4=64维向量,即描述子,用它可以进行匹配等工作。




 


0 0