%% 空域图像平滑 邻域平均处理 不同窗口的效果
clear all
close all
if 1==2 %不同窗口的邻域平均处理
I0=imread('lena_gray_256.tif');
[m,n]=size(I0);
I=imnoise(I0,'gaussian',0,0.01);
ws=3; % 窗口大小
w=double(ones(ws)./(ws*ws));
I3=uint8(filter2(w,I));
ws=5; % 窗口大小
w=double(ones(ws)./(ws*ws));
I5=uint8(filter2(w,I));
ws=7; % 窗口大小
w=double(ones(ws)./(ws*ws));
I7=uint8(filter2(w,I));
subplot('Position',[0,0.5,0.5,0.5]);imshow(I);
subplot('Position',[0.5,0.5,0.5,0.5]);imshow(I3);
subplot('Position',[0,0,0.5,0.5]);imshow(I5);
subplot('Position',[0.5,0,0.5,0.5]);imshow(I7);
end %不同窗口的邻域平均处理
%% 生成高斯加权模板 进行平滑滤波
if 1==2 %高斯加权模板平滑滤波
I0=imread('lena_gray_256.tif');
[m,n]=size(I0);
I=imnoise(I0,'gaussian',0,0.01);
ws=3; % 窗口大小
xigm=2; % 高斯方差 反差为1
ws2=(ws-1)/2;
for x=-ws2:ws2
for y=-ws2:ws2
w(x+ws2+1,y+ws2+1)=(exp(-(double(x*x)+double(y*y))/(xigm*xigm)))/(xigm*pi);
end
end
w=w./sum(w(:)); %归一化
Ig3=uint8(filter2(w,I));
ws=5; % 窗口大小
xigm=2; % 高斯方差 反差为1
ws2=(ws-1)/2;
for x=-ws2:ws2
for y=-ws2:ws2
w(x+ws2+1,y+ws2+1)=(exp(-(double(x*x)+double(y*y))/(xigm*xigm)))/(xigm*pi);
end
end
w=w./sum(w(:)); %归一化
Ig5=uint8(filter2(w,I));
ws=7; % 窗口大小
xigm=2; % 高斯方差 反差为1
ws2=(ws-1)/2;
for x=-ws2:ws2
for y=-ws2:ws2
w(x+ws2+1,y+ws2+1)=(exp(-(double(x*x)+double(y*y))/(xigm*xigm)))/(xigm*pi);
end
end
w=w./sum(w(:)); %归一化
Ig7=uint8(filter2(w,I));
subplot('Position',[0,0.5,0.5,0.5]);imshow(I);
subplot('Position',[0.5,0.5,0.5,0.5]);imshow(Ig3);
subplot('Position',[0,0,0.5,0.5]);imshow(Ig5);
subplot('Position',[0.5,0,0.5,0.5]);imshow(Ig7);
end %高斯加权模板平滑滤波
%% 中值滤波
if 1==2 %中值滤波
I0=imread('lena_gray_256.tif');
[m,n]=size(I0);
I=imnoise(I0,'gaussian',0,0.01);
J=imnoise(I0,'salt & pepper',0.02);
ws=3; % 窗口大小
w=double(ones(ws)./(ws*ws));
Iav=uint8(filter2(w,I));
Jav=uint8(filter2(w,I));
Imed=medfilt2(I);
Jmed=medfilt2(J);
subplot('Position',[0,0.5,0.3,0.5]);imshow(I);
subplot('Position',[0.33,0.5,0.3,0.5]);imshow(Iav);
subplot('Position',[0.66,0.5,0.3,0.5]);imshow(Imed);
subplot('Position',[0,0,0.3,0.5]);imshow(J);
subplot('Position',[0.33,0,0.3,0.5]);imshow(Jav);
subplot('Position',[0.66,0,0.3,0.5]);imshow(Jmed);
end %中值滤波
%% 图像锐化 拉普拉斯算子
if 1==4 %拉普拉斯算子
I=imread('mold.tif');
L4=[0 -1 0;-1 4 -1;0 -1 0];
L8=[-1 -1 -1;-1 8 -1;-1 -1 -1];
IL4=uint8(filter2(L4,I));
IL8=uint8(filter2(L8,I));
subplot('Position',[0,0,0.3,1]);imshow(I);
subplot('Position',[0.33,0,0.3,1]);imshow(IL4);
subplot('Position',[0.66,0,0.3,1]);imshow(IL8);
I0=imnoise(I,'gaussian',0,0.005); %叠加噪声
IL4=uint8(filter2(L4,I0));
IL8=uint8(filter2(L8,I0));
figure;
subplot('Position',[0,0,0.3,1]);imshow(I0);
subplot('Position',[0.33,0,0.3,1]);imshow(IL4);
subplot('Position',[0.66,0,0.3,1]);imshow(IL8);
end %拉普拉斯算子
%% sobel 锐化滤波
if 1==1 %sobel
I=imread('mold.tif');
Sx=[-1 0 1;-2 0 2;-1 0 1]; %sobel算子
Sy=[-1 -2 -1;0 0 0;1 2 1];
Px=[-1 0 1;-1 0 1;-1 0 1]; %prewitt算子
Py=[-1 -1 -1;0 0 0;1 1 1];
Is=abs(filter2(Sx,I))+abs(filter2(Sy,I));
Ip=abs(filter2(Px,I))+abs(filter2(Py,I));
subplot('Position',[0,0,0.3,1]);imshow(I);
subplot('Position',[0.33,0,0.3,1]);imshow(Is,[]);
subplot('Position',[0.66,0,0.3,1]);imshow(Ip,[]);
I0=imnoise(I,'gaussian',0,0.005); %叠加噪声
Is=abs(filter2(Sx,I0))+abs(filter2(Sy,I0));
Ip=abs(filter2(Px,I0))+abs(filter2(Py,I0));
figure;
subplot('Position',[0,0,0.3,1]);imshow(I0);
subplot('Position',[0.33,0,0.3,1]);imshow(Is,[]);
subplot('Position',[0.66,0,0.3,1]);imshow(Ip,[]);
end %sobel