(1)平滑滤波的模板形状、大小、参数的适用性实验; (2)几种微分算子增强图像边缘的比较性实验; (3)梯度作为边缘提取的一个重要特征,掌握梯度图的计算; (4)构造一个平滑与微分算子的综合图像

作业三:图像增强

  1. 实验要求:
    (1)平滑滤波的模板形状、大小、参数的适用性实验;
    (2)几种微分算子增强图像边缘的比较性实验;
    (3)梯度作为边缘提取的一个重要特征,掌握梯度图的计算;
    (4)构造一个平滑与微分算子的综合图像增强的实例。
    2.实验结果与分析:(代码见附录)
    (1)

第一个小实验只要是针对不同滤波器大小对不同的噪声对图像的影响:
噪声密度过大,当滤波器太小时,不能将噪声完全去掉,导致图片有颗粒感,不够平滑;当滤波器太大时,会把图像过度平滑,使图像变得模糊;噪声密度不大,小滤波器即可将噪声去掉。原理在于中值滤波取的是滤波器的中位数。同理,不同的形状会产生不同的中位数,不同滤波器形状对图片有不同的影响。

(4)

第二个小实验的目的是通过混合空间增强法突出更多的细节来增强图像,实验前需要明确为什么使用梯度增强算子可以达到锐化的目的,是因为边缘就是梯度变化最大的地方 。
图一:原图
图二:使用拉普拉斯算子为 [-1,-1,-1;-1,8,-1;-1,-1,-1],对图像进行锐化滤波。 从结
果可以看出拉普拉斯算子对噪声比较敏感,对边缘不敏感,拉普拉斯算子能对任何走向的界线和线条进行锐化,无方向性。
图三:将图一与图二叠加得到一 幅经过锐化过的图像。从结果可以看出图三有很多的噪声。这说明拉普拉斯算子能很好的增强细节,但也产生更多的噪声。
图四:对原图 Sobel 梯度操作,算子gx 为[-1,-2,-1;0,0,0;1,2,1],算子gy 为 [-1,0,1;-2,0,2;-1,0,1]。从结果可以看出对噪声和小细节的响应要比拉普拉斯弱,此图边缘要比拉普拉斯图像中的边 缘要突出。
图五:在图四的基础上使用大小为 5*5 的均值滤波器得到平滑后的 Sobel梯度图像。从结果可以看出是为了去除图四中的噪声,使图像平滑。
图六:将图三与图五点乘,从结果看出边缘优势和噪声相对减少,用平滑后的梯度图像来掩蔽拉普拉斯图像的目的达到了。
图七:将图六与原图相加就产生一幅相对较好的锐化图像。从结果看出,该图像中大部分细节比原图要清晰。
图八:对图七进行幂率变换处理,扩展灰度范围。从结果看出虽然增加了噪声也模糊了细节,但相对于原图来说,图像质量有大的提升。
(2)

第三个小实验的目的在于几种微分算子增强图像边缘进行比较:
一阶导数用来检测线,二阶导数用来检测点
Sobel算子:Sobel算子是加权平均的,对噪声较多的图像处理效果较好。可见图像中背景中的噪声与细节都被去掉了,这也说明它的不足,不能很好的分辨细节与噪声。
Prewitt算子:噪声较多的图像处理效果较好。同样有些背景细节被去掉了。
Robert算子:边缘定位准,对噪声敏感。适用于边缘明显且噪声较少的图像。从图可见,Robert算子图像处理后边缘不是很平滑。
Laplacian算子:这是二阶微分算子,对噪声比较敏感,很少用该算子检测边缘,图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以通常都是把Laplacian算子和平滑算子结合起来生成一个新的模板。

(3)梯度图计算
在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数,根据定义有:(此处的等号应是约等于)

梯度在(x,y)处变化最大,梯度是一个矢量,则(x,y)处的梯度通过下面这个公式所求:

在一个二阶矩阵中,当变化最大的方向为对角线方向时,得出公式:

从而得出roberts算子:
-1 0 0 1
0 1 -1 0
22模板对于用关于中心点对称的模板来计算边缘方向不是很有用,所以在这引入33模板:

我如下定义水平、垂直和两对角线方向的梯度:

从而得出prewitt算子:
-1 -1 -1 -1 0 1 0 1 1 -1 -1 0
0 0 0 -1 0 1 -1 0 1 -1 0 1
1 1 1 -1 0 1 -1 -1 0 0 1 1

扫描二维码关注公众号,回复: 10413734 查看本文章

Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2:
-1 -2 -1 -1 0 1 0 1 2 -2 -1 0
0 0 0 -2 0 2 -1 0 1 -1 0 1
1 2 1 -1 0 1 -2 -1 0 0 1 2

采用二阶导数求拉普拉斯模板,其定义如下:

从而得出拉普拉斯算子:
0 1 0
1 -4 1
0 1 0

3.附录
(1)close all;
clc;
img = imread(‘E:\数字图像处理\第三次作业\dog.jpg’);?
m= size(img);
if numel(m)>2
gray = rgb2gray(img);
else
gray=img;
end
figure
P1 = imnoise(gray,‘gaussian’,0,0.01);%均值,方差,方差越大噪声最多
subplot(241);imshow(P1);title(‘高斯噪声,使用中值滤波’);
P2 = imnoise(gray,‘salt & pepper’,0.05);
subplot(245);imshow(P2);title(‘椒盐噪声,使用中值滤波’);
g = medfilt2(P1,[3,3]);
subplot(242);imshow(g);title(‘33’);
h = medfilt2(P2,[3,3]);
subplot(246);imshow(h);title('3
3’);
g = medfilt2(P1,[10,10]);
subplot(243);imshow(g);title(‘1010’);
h = medfilt2(P2,[10,10]);
subplot(247);imshow(h);title('10
10’);
g = medfilt2(P1,[50,50]);
subplot(244);imshow(g);title(‘5050’);
h = medfilt2(P2,[50,50]);
subplot(248);imshow(h);title('50
50’);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(4)clear;
clc;
img = imread(‘E:\数字图像处理\第三次作业\Fig0343(a)(skeleton_orig).tif’);
m= size(img);
if numel(m)>2
I = rgb2gray(img);
else
I=img;
end
J = im2double(I);
figure
subplot(241);imshow(J);title(‘图一’);

h =[-1,-1,-1;-1,8,-1;-1,-1,-1]; %拉普拉斯算子
J1 =imfilter(J,h,‘conv’,‘replicate’); %h为滤波模板
subplot(242);imshow(J1);title(‘图二’);

J2=imadd(J,J1); %将原图和图2相加就可以得到一幅经过锐化过的图像。
subplot(243);imshow(J2);title(‘图三’);

hx=[-1,-2,-1;0,0,0;1,2,1]; %sobel垂直梯度模板
hy=[-1,0,1;-2,0,2;-1,0,1]; %sobel水平梯度模板
gradx=abs(filter2(hx,J,‘same’));
grady=abs(filter2(hy,J,‘same’));
J3=gradx+grady; %得到图像的 sobel 梯度
subplot(244);imshow(J3);title(‘图四’);

h1 = fspecial(‘average’,5) ;%5*5 均值滤波器
J4 = imfilter(J3,h1);
subplot(245);imshow(J4);title(‘图五’);

J5=immultiply(J2,J4);%将拉普拉斯图像与平滑后的梯度图像进行点乘。
subplot(246);imshow(J5);title(‘图六’);

J6=imadd(J,J5);
subplot(247);imshow(J6);title(‘图七’);

gamma=0.5;
c=1;
J7=c.*J6.^gamma;
subplot(248);imshow(J7);title(‘图八’);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(3)clear;
clc;
img = imread(‘E:\数字图像处理\第三次作业\timg.jpg’);
m= size(img);
if numel(m)>2
I = rgb2gray(img);
else
I=img;
end
figure
%subplot(221);imshow(I);title(‘原图’);
sobelBW=edge(I,‘sobel’);
subplot(221);imshow(sobelBW);title(‘Sobel’);
prewittBW=edge(I,‘prewitt’);
subplot(222);imshow(prewittBW);title(‘Prewitt’);
robertsBW=edge(I,‘roberts’);
subplot(223);imshow(robertsBW);title(‘Roberts’);
logBW=edge(I,‘log’);
subplot(224);imshow(logBW);title(‘Laplasian’);

发布了6 篇原创文章 · 获赞 0 · 访问量 32

猜你喜欢

转载自blog.csdn.net/qudijiao6061/article/details/105274892
今日推荐