您的位置:首页 > 其它

图像增强之模板处理——(加权均值、加权中值、拉普拉斯滤波,FFT、DCT变换)

2018-04-06 09:44 771 查看
目的:获取一帧图像,在该图像中添加不同程度的噪声(高斯噪声、椒盐噪声),设计不同尺寸的加权均值滤波、加权中值滤波、锐化滤波(一阶梯度,二阶微分,高提升滤波)进行处理,比较处理前后的效果图,并对对加噪前后的图像进行DFT、DCT变换,选择不同滤波器、不同截止频率对图像进行降噪和边缘提取处理,并分析处理结果。

一、基本原理

1.1加权均值滤波器

加权均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。


可以对其进行改进,主要避开对景物边缘的平滑处理。加权均值滤波方法是,对待处理的当前像素,选择一个模板,该模板为其邻近的若干个像素组成,用模板的均值来替代原像素的值的方法。
    所谓加权平均,使用这一术语是指用不同的系数乘以像素,即一些像素的权重比另一些像素的权重大,因此,在均值计算中为该像素提供更大的重要性。

1.2加权中值滤波器

    中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。

1.3拉普拉斯算子锐化

    由于拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域。因此,锐化处理可选择拉普拉斯算子对原图像进行处理,产生描述灰度突变的图像,再将拉普拉斯图像与原始图像叠加而产生锐化图像。这种简单的锐化方法既可以产生拉普拉斯锐化处理的效果,同时又能保留背景信息,将原始图像叠加到拉普拉斯变换的处理结果中去,可以使图像中的各灰度值得到保留,使灰度突变处的对比度得到增强,最终结果是在保留图像背景的前提下,突现出图像中小的细节信息。

二、结果图对比















         比较中值滤波和均值滤波的去噪性能,分析和实验表明,在更一般的噪声模型下,当噪声污染的概率较小时,中值滤波抑制噪声的能力优于均值滤波,而当噪声污染的概率较大时,均值滤波抑制噪声的能力优于中值滤波。

对比可知,均值滤波和中值滤波均可有效的去噪,并且模糊尺寸越大,去噪效果也越好,同时,图像的边缘等细节模糊也越厉害,因此,选择模糊尺寸至关重要。而横向对比来看,均值滤波在处理高斯噪声时效果优于中值滤波。对比梯度增强与拉斯增强的处理结果,可以看出梯度滤波对高斯噪声效果更好,拉斯滤波对椒盐噪声效果好

三、完整程序

clear all;
clc;
H=imread('C:\Users\Acer\Desktop\章晨曦.jpg');
j=imnoise(H,'gaussian',0.03,0.007);%添加高斯噪声
imshow(H);title('原图');
figure(2);
imshow(j);title('添加高斯噪声');
[M N]=size(H);
H=double(ones(3)/9);%生成3*3单位矩阵初九,和为一
for m=2:M-1
for n=2:N-1
f1=double(j(m-1:m+1,n-1:n+1));
y=H.*f1;
y=reshape(y,1,9);%将其变为1*9的矩阵
y=uint8(sum(y));%将其变为无符号整形,不变的话影响结果
d(m,n)=y;
end
end
figure(3);subplot(121)
imshow(d);title('3*3 均值滤波');
H=double(ones(5)/25);
for m=3:M-2
for n=3:N-2
x2=double(j(m-2:m+2,n-2:n+2));
y=H.*x2;
y=reshape(y,1,25);
y=uint8(sum(y));
e(m,n)=y;
end
end
subplot(122)
imshow(e);title('5*5 均值滤波');
(2)
首先,构造函数maopao
function a = maopao(P)
N = P;
if length(size(P))~=2 | min(size(P))>1,
disp('参数必须为向量.');
else
for i=1:length(P)
for j=2:(length(P)-i+1)
if N(j-1)>N(j)
Q=N(j-1);
N(j-1)=N(j);
N(j)=Q;
end
end
end
t=length(P)-1;
a=N(t);
end
然后,设计程序如下
H=imread('C:\Users\Acer\Desktop\章晨曦.jpg');
j=imnoise(H,'gaussian',0.03,0.007);%添加高斯噪声
imshow(H);title('原图');
figure(2);
imshow(j);title('高斯噪声');
[M N]=size(H);
H=double(ones(3)/9);%生成3*3单位矩阵初九,和为一
for m=2:M-1
for n=2:N-1
f1=double(j(m-1:m+1,n-1:n+1));
y=reshape(f1,1,9);%将其变为1*9的矩阵
y=maopao(y);
y=uint8(y);%将其变为无符号整形,不变的话影响结果
d(m,n)=y;
end
end
figure(3);subplot(121)
imshow(d);title('3*3中值滤波');
subplot(122)
H=double(ones(5)/25);
for m=3:M-2
for n=3:N-2
x2=double(j(m-2:m+2,n-2:n+2));
y=reshape(x2,1,25);%将其变为1*9的矩阵
y=maopao(y);
y=uint8(y);%将其变为无符号整形,不变的话影响结果
e(m,n)=y;
end
end
imshow(e);title('5*5中值滤波');
(3)
f=imread('C:\Users\Acer\Desktop\章晨曦.jpg');
f=rgb2gray(f)
j=imnoise(f,'gaussian',0.02);%添加高斯噪声
k=imnoise(f,'salt & pepper',0.04);
subplot(3,3,1);
imshow(f);
title('原图像');
subplot(3,3,2);
imshow(j);
title('添加高斯噪声');
subplot(3,3,3);
imshow(k);
title('添加椒盐噪声');
j=double(j);
f=double(f);
k=double(k);
[jx,jy]=gradient(j);
[kx,ky]=gradient(k);
[fx,fy]=gradient(f);
J=sqrt(jx.*jx+jy.*jy);
K=sqrt(kx.*kx+ky.*ky);
F=sqrt(fx.*fx+fy.*fy);
t=70;
K2=K;
K3=find(K>=t);
K2(K3)=K(K3);
subplot(3,3,6);
imshow(K2,[]);
title('椒盐噪声梯度滤波')
J2=J;
J3=find(J>=t);
J2(J3)=J(J3);
subplot(3,3,5);
imshow(J2,[]);
title('高斯噪声梯度滤波');
F2=F;
F3=find(F>=t);
F2(F3)=F(F3);
subplot(3,3,4);
imshow(F2,[]);
title('梯度增强');
H=[0 -1 0 -1 5 -1 0 -1 0];
J6=conv2(j,H,'same');
K6=conv2(k,H,'same');
F6=conv2(f,H,'same');
subplot(3,3,8);
imshow(J6);
title('拉普拉斯滤波');
subplot(3,3,9);
imshow(K6)
title('拉普拉斯滤波');
subplot(3,3,7);
imshow(F6)
title('拉普拉斯增强');
(4)
H=imread('C:\Users\Acer\Desktop\章晨曦.jpg');
H=rgb2gray(H)
g=imnoise(H,'gaussian',0.02);%添加高斯噪声
k=imnoise(H,'salt & pepper',0.04);
subplot(1,3,1);
imshow(H);
title('原图像');
subplot(1,3,2);
imshow(g);
title('添加高斯噪声');
subplot(1,3,3);
imshow(k);
title('添加椒盐噪声');
gf=fft2(H);
kf=fft2(H);
gd=dct2(H);
gf=double(gf);
gd=double(gd);
kf=double(kf);
D1=30;
D2=90%开始,设置滤波半径
Fuvf=fftshift(gf);
Fuvd=fftshift(gd);
Fuvk=fftshift(kf);
[M N]=size(Fuvf);
[P Q]=size(Fuvd);
[Z X]=size(Fuvk);
xof=floor(M/2);
yof=floor(N/2);
xod=floor(P/2);
yod=floor(Q/2);
xok=floor(Z/2);
yok=floor(X/2);
for i=1:M;
for j=1:N
D=sqrt((i-xof)^2+(j-yof)^2);
if(D>=D1)
h1(i,j)=0;
else
h1(i,j)=1;
end
end
end
Guvf=h1.*Fuvf;
g1=ifftshift(Guvf);
g1=uint8(ifft2(g1));
figure(2)
subplot(1,3,1)
imshow(g1);
title('fft理想低通滤波器高斯噪声半径30')
for i=1:M;
for j=1:N
D=sqrt((i-xof)^2+(j-yof)^2);
if(D>=D2)
h1(i,j)=0;
else
h1(i,j)=1;
end
end
end
Guvf=h1.*Fuvf;
g2=ifftshift(Guvf);
g2=uint8(ifft2(g2));
subplot(1,3,3)
imshow(g2);
title('fft理想低通滤波器高斯噪声半径90')
figure(3)
for i=1:P;
for j=1:Q
D=sqrt((i-xod)^2+(j
4000
-yod)^2);
if(D>=D1)
h1(i,j)=0;
else
h1(i,j)=1;
end
end
end
Guvd=h1.*Fuvd;
g3=ifftshift(Guvd);
g3=uint8(idct2(g3));
subplot(1,3,1)
imshow(g3);
title('dct理想低通滤波器高斯噪声半径30')
subplot(1,3,3)
imshow(g1);
title('fft理想低通滤波器高斯噪声半径30')
n=2;
for i=1:M
for j=1:N
D=sqrt((i-xof)^2+(j-yof)^2);
h1(i,j)=1/(1+(D/D1)^(2*n));
end
end
Guvf=h1.*Fuvf;
g4=ifftshift(Guvf);
g4=uint8(ifft2(g4));%高斯低通滤波
figure(4);
subplot(1,3,1)
imshow(g1);
title('fft理想低通滤波器高斯噪声半径30');
subplot(1,3,3)
imshow(g4);
title('fft高斯低通滤波器高斯噪声半径30');
for i=1:Z;
for j=1:X
D=sqrt((i-xok)^2+(j-yok)^2);
if(D>=D1)
h1(i,j)=0;
else
h1(i,j)=1;
end
end
end
Guvk=h1.*Fuvk;
g5=ifftshift(Guvk);
g5=uint8(ifft2(g5));
figure(5)
subplot(1,3,1)
imshow(g1);
title('fft理想低通滤波器高斯噪声半径30')
subplot(1,3,3)
imshow(g5);
title('fft理想低通滤波器椒盐噪声半径30')
for i=1:M;
for j=1:N
D=sqrt((i-xof)^2+(j-yof)^2);
if(D>=D1)
h1(i,j)=1;
else
h1(i,j)=0;
end
end
end
Guvf=h1.*Fuvf;
g6=ifftshift(Guvf);
g6=uint8(ifft2(g6));
figure(6)
subplot(1,3,1)
imshow(g1);
title('fft理想低通滤波器高斯噪声半径30')
subplot(1,3,3)
imshow(g6);
title('fft理想高通滤波器高斯噪声半径30')
figure(7);
subplot(2,3,1);imshow(g3);title('dct理想低通滤波器高斯噪声半径30')
subplot(2,3,3);imshow(g4);title('fft高斯低通滤波器高斯噪声半径30');
subplot(2,3,4);imshow(g5);title('fft理想低通滤波器椒盐噪声半径30')
subplot(2,3,6);imshow(g6);title('fft理想高通滤波器高斯噪声半径30')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐