canny算法(2)——图像梯度的计算(sobel算子)

图像梯度的提出

对图像进行过高斯平滑滤波后,图像的部分高斯噪声会降低,锐度也会减弱,但是此时图像的边缘分解不太明显,变化的灰度变化不太强烈,不太容易捕捉。因此,为了去定义这种边缘灰度变化的大小,提出图像梯度,用梯度的大小去表示边缘灰度变换的大小。

梯度的数学定义

梯度即是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。即导数(梯度),那么对于图像来说,把图像当作函数 f ( x , y ) f(x,y) f(x,y),用微分去表示图像的变化率。由于图象是二维函数,故求偏导。

soble算子

s x = [ 1 0 − 1 2 0 − 2 1 0 − 1 ] , s y = [ 1 2 1 0 0 0 − 1 − 2 − 1 ] s_{x}=\begin{bmatrix} 1&0&-1\\ 2&0&-2\\ 1&0&-1\\ \end{bmatrix},s_{y}=\begin{bmatrix} 1&2&1\\ 0&0&0\\ -1&-2&-1\\ \end{bmatrix} sx=121000121,sy=101202101

图像梯度的计算

由于图像是离散的,即 f ( x , y ) f(x,y) f(x,y)是一个离散函数,故计算梯度时,变化的最小单位为1。对一幅图像,有 x 方 向 , y 方 向 x方向,y方向 xy,如下图 3 × 3 3\times3 3×3所示:
canny算法(2)——图像梯度的计算(sobel算子)_第1张图片
对于上图,要计算中心像素点1的 x 方 向 , y 方 向 x方向,y方向 xy的梯度幅值和方向,如果应用soble卷积模板,则需要 S x , S y S_{x},S_{y} Sx,Sy 3 × 3 3\times3 3×3领域做卷积。
∂ g ∂ x = − 3 \frac{\partial{g}}{\partial{x}}=-3 xg=3
∂ g ∂ y = 3 \frac{\partial{g}}{\partial{y}}=3 yg=3
则该点梯度的幅值和方向为:
幅 值 : M ( x , y ) = ( ∂ g ∂ x ) 2 + ( ∂ g ∂ y ) 2 = 3 2 幅值:M(x,y)=\sqrt{(\frac{\partial{g}}{\partial{x}})^2+(\frac{\partial{g}}{\partial{y}})^2}=3\sqrt{2} M(x,y)=(xg)2+(yg)2 =32
方 向 : a c t a n [ ∂ g ∂ y ∂ g ∂ x ] = − π 4 方向:actan[\frac{\frac{\partial{g}}{\partial{y}}}{\frac{\partial{g}}{\partial{x}}}]=-\frac{\pi}{4} actan[xgyg]=4π
根据数学中的定义,梯度方向总是与边缘方向正交的,具体如下图所示:
canny算法(2)——图像梯度的计算(sobel算子)_第2张图片

总结

求任何一点的处的梯度(幅值和方向)即用soble卷积算子(可选大小,一般取 3 × 3 3\times3 3×3)与对应像素点做卷积。对于边缘点的梯度,如果不做边缘补充,则把其周围的像素点默认为 0 0 0

代码实现

对于代码,选用的是 m a t l a b matlab matlab

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                计算高斯核                 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
pi=3.1415926;%高斯公式中Π的值
sum1=0;%计算累计权重的值
d=1.5;%高斯核标准差
c=5;%高斯核大小
center=(c/2)+0.5;%模板的中心,这里取整
A=1/(2*pi*d*d);%高斯公式指数前面的系数
for i=1:c
    x2=(i-center)*(i-center);
    for j=1:c
        y2=(j-center)*(j-center);
        B=exp(-(x2+y2)/(2*d*d));
        C(i,j)=A*B;
        sum1=sum1+C(i,j);
    end
end
%整数形式的高斯核,需要进行归一化,即把左上角的值化为1
%下面进行归一化
k=1/C(1,1);
for i=1:c
    for j=1:c
        D(i,j)=C(i,j)*k;%进行归一化后整数形式的高斯核,有小数可以取整
        sum1=sum1+D(i,j);
    end
end

%若需要小数形式的高斯核,则在不需要归一化,而需要进权重分配,高斯核的每个系数要除以所有系数的和。
%下面进行权重分配
for i=1:c
    for j=1:c
        E(i,j)=C(i,j)/sum1;%进行权重分配后小数形式的高斯核
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%截至这里,高斯核以计算完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 高斯滤波器模板的生成最重要的参数就是高斯分布的标准差。
% 标准差代表着数据的离散程度,如果较小,那么生成的模板的中心系数较大,
% 而周围的系数较小,这样对图像的平滑效果就不是很明显;
% 反之,较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%截至这里,高斯核以计算完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%               开始进行高斯滤波                 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I=imread('tupian.png');%读取灰度图片
I=rgb2gray(I);
% subplot(2,3,1)
% imshow(I)%输出原始灰度图片
% title('原始灰度图像')
I=double(I);%转换为浮点型
[row,col]=size(I);%获取图片的长宽
%由于这里作者水平有限,因此,对图像先不做边界填充
for k=1:row
    for m=1:col
        sum2=0;
        %进行卷积,模板与图像对应部分相乘再累加
        for i=1:c
			for j=1:c
                    %下面if判断相当于给图像的边缘填充0
                    if(((k-center+i)>0&&(k-center+i)<= row)&&((m-center+j)>0&&(m-center+j)<=col))				
                          sum2=sum2+ E(i,j)*I(k-center+i,m-center+j);
                    end
             end
        end
        myimg(k,m)=sum2;
    end
end
A=myimg();
% subplot(2,3,2)
% imshow(A)%输出处理后的灰度图片
% title('高斯滤波后的灰度图像')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%截至这里,简单的高斯滤波处理完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%需要注意的是在这里对四个边界的填充均以0处理,
%%可能效果不太好,读者若是想用,可以另作处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%      计算图像梯度,使用soble梯度模板       %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
sx=[1 0 -1;2 0 -2;1 0 -1];
sy=[1 2 1;0 0 0;-1 -2 -1];

gx=conv2(A,sx,'same');%水平方向做卷积
gy=conv2(A,sy,'same');%垂直方向做卷积
M=sqrt((gx.^2)+(gy.^2));%算梯度幅值
subplot(2,3,3)
imshow(M)%输出用soble模板处理后的梯度幅值图片
title('使用soble算子的梯度图像')
a=atan2(gy,gx).*180/pi;%算梯度角度,范围为-180180

到此为止,canny算法的第二步,图像梯度的计算就算告一段落了,希望各位学友批评指正,如有问题,或需要探讨,请留言或联系本人。 Q Q : 2214564003 QQ:2214564003 QQ:2214564003
欢迎关注本人微信公众号:
在这里插入图片描述

你可能感兴趣的:(计算机视觉,matlab图像处理)