Prewitt算子计算图像梯度
Prewitt算子是一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成,这两个方向模板一个检测水平边缘,一个检测垂直边缘。同时,为了在锐化边缘的同时减少噪声的影响,Prewitt算子从Robert算子的模板出发,由2x2扩大到3x3来计算差分,本质上是利用卷积运算的模板,最终效果是求灰度图像各点的梯度,对应模板如下图所示。
-1 |
0 |
1 |
-1 |
0 |
1 |
-1 |
0 |
1 |
-1 |
-1 |
-1 |
0 |
0 |
0 |
1 |
1 |
1 |
两个模板分别计算gx和gy,并且为简化梯度的计算,通常会取gx和gy模的最大值代表梯度或者用gx与gy模的和代替梯度值。
当图像的梯度算出后,就可根据不同的需求生成不同的增强图像,经常使用的有五种增强图像的方法。
- Prewitt算子计算图像梯度源代码:
img=imread('均衡.jpg');
img=rgb2gray(img);
figure(1);imshow(img);
figure(2);imhist(img);
[m n]=size(img);
G1=img;
G2=G1;G3=G1;G4=G1;G5=G1;
for i=2:m-1
for j=2:n-1
gx=img(i-1,j+1)+img(i,j+1)+img(i+1,j+1)-...
img(i-1,j-1)-img(i,j-1)-img(i+1,j-1);
gy=img(i+1,j-1)+img(i+1,j)+img(i+1,j+1)-...
img(i-1,j-1)-img(i-1,j)-img(i-1,j+1);
G1(i,j)=abs(gx)+abs(gy);
if G1(i,j)>=30
G2(i,j)=G1(i,j);
else
G2(i,j)=img(i,j);
end
if G1(i,j)>=100
G3(i,j)=255;
else
G3(i,j)=img(i,j);
end
if G1(i,j)>=50
G4(i,j)=G1(i,j);
else
G4(i,j)=0;
end
if G1(i,j)>=60
G5(i,j)=255;
else
G5(i,j)=0;
end
end
end
figure(3);imshow(G1);
figure(4);imshow(G2);
figure(5);imshow(G3);
figure(6);imshow(G4);
figure(7);imshow(G5);
2.实验结果图
图1 原灰度图及其直方图
图2 Prewitt算子第一种增强图 图3 Prewitt算子第二种增强图
图4 Prewitt算子第三种增强图 图5 Prewitt算子第四种增强图
图6 Prewitt算子第五种增强图
3.实验总结分析
由实验结果可得,利用Prewitt算子求出图像的梯度后有五种增强图像的方法:
第一种增强图像是使该点的灰度等于该点梯度,但是这种方法的增强图像仅显示灰度变化比较陡的边缘轮廓,而灰度变化比较平缓或均匀的区域则呈黑色。
第二种增强图像是当图像梯度大于某阈值时用该点梯度代替该点灰度值,其他区域用原灰度值代表,只要阈值取得比较恰当就可以得到明显的边缘轮廓,又不会破坏原来灰度变化比较平缓的背景。
第三种增强图像是当图像梯度大于某阈值时用某个特定灰度级代替,其他区域用原灰度值表示,增强图像的明显边缘会用一个固定的灰度级表现。
第四种增强图像是当图像梯度大于某阈值时用该点梯度代表该点灰度值,其他区域用某个特定灰度级代替,该增强图像的背景用特定灰度级变现,便于研究边缘灰度的变化。
第五种增强图像是当图像梯度大于某阈值时用某个特定灰度级代替,其他区域用另一个灰度级代替,形成一幅二值图像,便于研究边缘所在的位置。
除去第一种增强图像外,对于其他四种增强图像,若想得到比较清晰的边缘轮廓就需要选择恰当的阈值,若是阈值选择不好,边缘的效果也会相应差一点,因此需要不断尝试选择比较适合的阈值。