图像梯度(水平和垂直梯度)提取边缘信息

边缘检测的基本思想首先是(1)利用边缘增强算子,突出图像中的局部边缘,(2)然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:

i.         用边缘算子提取出反映灰度变化的边缘点集

ii.        在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线

常用的检测算子有微分算子、拉普拉斯高斯算子和canny算子。

在Matlab图像处理工具箱中,提供了edge函数利用以上算子来检测灰度图像的边缘。

2.1微分算子法

   经典的边缘提取方法是考察图像的每个像素的某个邻域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律,用简单的方法检测边缘,称为微分算子法

导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值较高,因此我们将图像的导数算子运算值作为相应的边界强度,所以可以通过对这些导数值设置阈值,提取边界的点集。

一阶导数是最简单的导数算子。已知在点f(x,y)处,梯度grad(F(x,y))的幅度为:



它们分别求出了灰度在x和y方向上的变化率,但是要对每一个像素进行以上的运算,运算量较大,所以在实际应用中常用小区域模板卷积运算来进行近似计算。模板运算的想法是将赋予某一个像素的值作为它本身灰度值和相邻象素灰度值的函数。运用中,对x,y方向各用一个模板。


matlab代码

%% edge

bw=edge(imgray,'sobel');
figure,imshow(bw);
I=double(imgray);
[x y]=gradient(I);   %获取梯度
t=sqrt(x.^2+y.^2);  
G=I;
G(t>10)=0;           %梯度提取边缘
G(t<10)=255;
G=uint8(G);
figure,imshow(G);title('gradient-t');
G(x>2)=0;           %x方向梯度提取边缘
G(x<2)=255;
G=uint8(G);
figure,imshow(G);title('gradient-x');
G(y>2)=0;           %y方向梯度提取边缘
G(y<2)=255;
G=uint8(G);
figure,imshow(G);title('gradient-y');

你可能感兴趣的:(Matlab)