数字图像处理均衡化规定化平滑滤波增强变换代码.docx
《数字图像处理均衡化规定化平滑滤波增强变换代码.docx》由会员分享,可在线阅读,更多相关《数字图像处理均衡化规定化平滑滤波增强变换代码.docx(21页珍藏版)》请在冰豆网上搜索。
数字图像处理均衡化规定化平滑滤波增强变换代码
functionAAAAAAAAAAAAAAAAA()
%functionFileRead()
%图像读取代码
a=input('请输入编号1')
clear,clc
closeall
A=imread('a1.bmp');
A1=A;
B=imread('图片7.jpg');
B1=rgb2gray(B);
%end
%functionjunheng()
%直方图均衡化
b=input('请输入编号2')
clearclc
closeall
[filename,pathname]=uigetfile({'*.bmp';'*.jpg';'*.gif'},'选择图片');
photo=imread([pathnamefilename]);
[X,Y,Z]=size(photo);
P_photo=zeros(256,Z);
fork=1:
Z
fori=0:
255
P_photo(i+1,k)=length(find(photo(:
:
k)==i))/(X*Y);
end
end
figure
holdon
subplot(2,2,1),bar(P_photo),title('原来图像的直方图');%原来图像的直方图
Pp_photo=zeros(256,Z);
fork=1:
Z
fori=0:
255
Pp_photo(i+1,k)=sum(P_photo(1:
i+1,k));
end
end
Sk=round(Pp_photo*255);
fork=1:
Z
fori=0:
255
Ps_photo(i+1,k)=sum(P_photo(find(Sk(:
k)==i),k));
end
end
subplot(2,2,2),bar(Ps_photo),title('均衡化后的直方图');%均衡化后的直方图
fork=1:
Z
PS=photo(:
:
k);
fori=0:
255
PS(find(photo(:
:
k)==i))=Sk(i+1,k);
end
Photo(:
:
k)=PS;
end
subplot(2,2,3),imshow(photo),title('原图像')%显示原图
subplot(2,2,4),imshow(Photo),title('均衡化后图像')%均衡化后图像
%end
%functionguiding()
%直方图规定化
c=input('请输入编号3')
clearall,clc;
photo1=imread('a2.bmp');photo2=imread('cell.bmp');
[X1,Y1,Z1]=size(photo1);[X2,Y2,Z2]=size(photo2);
ifZ1==Z2
Pr_photo1=zeros(256,Z1);Pr_photo2=zeros(256,Z2);
fork=1:
Z1
fori=0:
255
Pr_photo1(i+1,k)=length(find(photo1(:
:
k)==i))/(X1*Y1);
Pr_photo2(i+1,k)=length(find(photo2(:
:
k)==i))/(X2*Y2);
end
end
Pz_photo1=zeros(256,Z1);Pz_photo2=zeros(256,Z1);
fork=1:
Z1
fori=0:
255
Pz_photo1(i+1,k)=sum(Pr_photo1(1:
i+1,k));
Pz_photo2(i+1,k)=sum(Pr_photo2(1:
i+1,k));
end
end
Sk2=round(Pz_photo2*255);
fork=1:
Z1
fori=0:
255
Ps_photo2(i+1,k)=sum(Pr_photo2(find(Sk2(:
k)==i),k));
end
end
P_photo2=zeros(256,Z1);p_photo2=zeros(256,Z1);
fork=1:
Z1
Temp=Sk2(:
k);
fori=0:
255
ifPs_photo2(i+1,k)~=0
P_photo2(i+1,k)=sum(Ps_photo2(1:
i+1,k));
[data,point]=min(abs(P_photo2(i+1,k)*ones(256,1)-Pz_photo1(:
k)));
Sk2(find(Temp==i),k)=point-1;
p_photo2(point,k)=Ps_photo2(i+1,k);
end
end
end
fork=1:
Z1
Temp=photo2(:
:
k);
fori=0:
255
Temp(find(photo2(:
:
k)==i))=Sk2(i+1,k);
end
PHOTO2(:
:
k)=Temp;
end
subplot(4,2,1),imshow(photo1),title('原图1')
subplot(4,2,2),imshow(photo2),title('原图2')
subplot(4,2,3),imshow(PHOTO2),title('图2后')
subplot(4,2,4),bar(Pr_photo1),title('原图1')
subplot(4,2,5),bar(Pr_photo2),title('原图2')
subplot(4,2,6),bar(Ps_photo2),title('原图2均衡化')
subplot(4,2,7),bar(p_photo2),title('原图2规定化')
else
errordlg('选取的图片格式不一样!
!
!
','FileError');
end
%end
%functionImage_Smooth()
%图像平滑代码
%%%%%%%%%%%%%%%%图像空间平滑%%%%%%%%%%%%%
d=input('请输入编号4')
closeall;
clear,clc;
A=imread('a1.bmp');
subplot(3,2,1);
imshow(A);
title('原图像')
A1=double(A);
s=size(A1);
iflength(s)==2
fori=2:
length(A1)-1
forj=2:
length(A1)-1
C(i,j)=(A1(i-1,j-1)+A1(i-1,j)+A1(i-1,j+1)+A1(i,j-1)+A1(i,j+1)+A1(i+1,j-1)+A1(i+1,j)+A1(i+1,j+1))/9;
A1(i,j)=C(i,j);
end
end
subplot(3,2,2)
imshow(A1,[]);
title('局部平滑后的图像')
%中值滤波
A4=A;
fori=2:
length(A4)-1
forj=2:
length(A4)-1
a4=sort([A4(i-1,j-1),A4(i-1,j),A4(i-1,j+1),A4(i,j-1),A4(i,j),A4(i,j+1),A4(i+1,j-1),A4(i+1,j),A4(i+1,j+1)]);
A4(i,j)=a4(5);
end
end
subplot(3,2,3)
imshow(A4);
title('中值滤波后的图像')
%%%%%%%%%%%%%%%梯度倒数加权平滑法%%%%%%%%%%%%%%%%%
A2=A;
fori=2%:
length(A2)-1
forj=2%:
length(A2)-1%当f(i,j)=G(i,j)时,梯度为2
f=[A2(i-1,j-1),A2(i-1,j),A2(i-1,j+1),
A2(i,j-1),A2(i,j),A2(i,j+1),
A2(i+1,j-1),A2(i+1,j),A2(i+1,j+1)];
g1=2.*sum(1./abs(A2(i-1,j-1)-A2(i,j))+1./abs(A2(i-1,j)-A2(i,j))+1/2+1./abs(A2(i-1,j+1)-A2(i,j))+...
1./abs(A2(i,j-1)-A2(i,j))+1./abs(A2(i,j+1)-A2(i,j))+1./abs(A2(i+1,j-1)-A2(i,j))+...
1./abs(A2(i+1,j)-A2(i,j))+1./abs(A2(i+1,j+1)-A2(i,j)));
w=1./(2.*g1).*[1./abs(A2(i-1,j-1)-A2(i,j)),1./abs(A2(i-1,j)-A2(i,j)),1./abs(A2(i-1,j+1)-A2(i,j));
1./abs(A2(i,j-1)-A2(i,j)),1./2,1./abs(A2(i,j+1)-A2(i,j));
1./abs(A2(i+1,j-1)-A2(i,j)),1./abs(A2(i+1,j)-A2(i,j)),1./abs(A2(i+1,j+1)-A2(i,j))];
g2=sum(f.*w);
G=sum(g2);
A2(i,j)=G;
end
end
A2=uint8(A2);
subplot(3,2,4)
imshow(A2);
title('梯度倒数加权后的图像')
%%%%%%%%%%%%%%%最大值滤波%%%%%%%%%%%%%
A3=A;
n=2,c=2;
mask=ones(n,n);
A3=double(A3);
A3_max=A3;%I1_min=I1;
fori=1:
length(A3)-1
forj=1:
length(A3)-1
a=A3(i:
i+1,j:
j+1);
a=a.*mask;
A_max(i,j)=max(max(a));
end
end
subplot(3,2,5)
imshow(A_max,[])
title('最大值滤波后的图像')
%%%%%%%%%%%%%最小值滤波%%%%%%%%%%%%
A5=A;
n=2,c=2;
mask=ones(n,n);
A5=double(A5);
A5_min=A5;
fori=1:
length(A5)-1
forj=1:
length(A5)-1
a5=A5(i:
i+1,j:
j+1);
a5=a5.*mask;
A5_min(i,j)=min(min(a5));
end
end
subplot(3,2,6)
imshow(A5_min,[])
title('最小值滤波后的图像')
elseiflength(s)==3
[m,n,p]=size(A);
fork=1:
p
fori=2:
m-1
forj=2:
n-1
C(i,j,k)=(A1(i-1,j-1,k)+A1(i-1,j,k)+A1(i-1,j+1,k)+A1(i,j-1,k)+A1(i,j+1,k)+A1(i+1,j-1,k)+A1(i+1,j,k)+A1(i+1,j+1,k))/9;
A1(i,j,k)=C(i,j,k);
end
end
end
subplot(3,2,2)
imshow(uint8(A1));
title('局部平滑后的图像')
%%%%%%%中值滤波%%%%%%%%
A4=A1;
fork=1:
p
fori=2:
m-1
forj=2:
m-1
a4=sort([A4(i-1,j-1,k),A4(i-1,j,k),A4(i-1,j+1,k),A4(i,j-1,k),A4(i,j,k),A4(i,j+1,k),A4(i+1,j-1,k),A4(i+1,j,k),A4(i+1,j+1,k)]);
A4(i,j,k)=a4(5);
end
end
end
subplot(3,2,3)
imshow(uint8(A4));
title('中值滤波后的图像')
%%%%%%%%%%%梯度倒数加权平滑法%%%%%%%%%%%%
A2=A;
fork=1:
p
fori=2%:
length(A2)-1
forj=2%:
length(A2)-1%当f(i,j)=G(i,j)时,梯度为2
f=[A2(i-1,j-1,k),A2(i-1,j,k),A2(i-1,j+1,k),
A2(i,j-1,k),A2(i,j,k),A2(i,j+1,k),
A2(i+1,j-1,k),A2(i+1,j,k),A2(i+1,j+1,k)];
g1=2.*sum(1./abs(A2(i-1,j-1,k)-A2(i,j,k))+1./abs(A2(i-1,j,k)-A2(i,j,k))+1/2+1./abs(A2(i-1,j+1,k)-A2(i,j,k))+...
1./abs(A2(i,j-1,k)-A2(i,j,k))+1./abs(A2(i,j+1,k)-A2(i,j,k))+1./abs(A2(i+1,j-1,k)-A2(i,j,k))+...
1./abs(A2(i+1,j,k)-A2(i,j,k))+1./abs(A2(i+1,j+1,k)-A2(i,j,k)));
w=1./(2.*g1).*[1./abs(A2(i-1,j-1,k)-A2(i,j,k)),1./abs(A2(i-1,j,k)-A2(i,j,k)),1./abs(A2(i-1,j+1,k)-A2(i,j,k));
1./abs(A2(i,j-1,k)-A2(i,j,k)),1./2,1./abs(A2(i,j+1,k)-A2(i,j,k));
1./abs(A2(i+1,j-1,k)-A2(i,j,k)),1./abs(A2(i+1,j,k)-A2(i,j,k)),1./abs(A2(i+1,j+1,k)-A2(i,j,k))];
g2=sum(f.*w);
G=sum(g2);
A2(i,j,k)=G;
end
end
end
A2=uint8(A2);
subplot(3,2,4)
imshow(uint8(A2));
title('梯度倒数加权后的图像')
%%%%%%最大值滤波%%%%%%%
A3=A;
n=2,c=2;
mask=ones(n,c);
A3=double(A3);
fork=1:
p
fori=1:
length(A3)-1
forj=1:
length(A3)-1
a=A3(i:
i+1,j:
j+1,k);
a=a.*mask;
A_max(i,j,k)=max(max(a));
end
end
end
subplot(3,2,5)
imshow(uint8(A_max))
title('最大值滤波后的图像')
%%%%%%%%最小值滤波%%%%%%%%
A5=A;
n=2,c=2;
mask=ones(n,n);
A5=double(A5);
A5_min=A5;
fork=1:
p
fori=1:
length(A5)-1
forj=1:
length(A5)-1
a5=A5(i:
i+1,j:
j+1,k);
a5=a5.*mask;
A5_min(i,j,k)=min(min(a5));
end
end
end
subplot(3,2,6)
imshow(uint8(A5_min))
title('最小值滤波后的图像')
end
%end
%functionImageShape()
%各种算子
%图像空间域锐化
e=input('请输入编号6')
closeall
clearclc
photo=imread('a2.bmp');
[X,Y,Z]=size(photo);
figure
imshow(photo),title('原图像');
fori=1:
X-1
forj=1:
Y-1
fx(i,j)=photo(i,j+1)-photo(i,j);
fy(i,j)=photo(i+1,j)-photo(i,j);
end
end
grad_T=abs(fx)+abs(fy);%梯度算子
figure
subplot(2,3,1),imshow(grad_T),title('梯度算子图像');
fori=1:
X-1
forj=1:
Y-1
fx(i,j)=abs(photo(i+1,j+1)-photo(i,j));
fy(i,j)=abs(photo(i+1,j)-photo(i,j+1));
end
end
grad_R=abs(fx)+abs(fy);%Roberts算子
subplot(2,3,2),imshow(grad_R),title('Roberts算子图像');
fori=2:
X-1
forj=2:
Y-1
fx(i,j)=photo(i-1,j+1)-photo(i-1,j-1)+photo(i,j+1)-photo(i,j-1)+photo(i+1,j+1)-photo(i+1,j-1);
fy(i,j)=photo(i+1,j-1)-photo(i-1,j-1)+photo(i+1,j)-photo(i-1,j)+photo(i+1,j+1)-photo(i-1,j+1);
end
end
grad_P=abs(fx)+abs(fy);%Prewitt算子
subplot(2,3,3),imshow(grad_P),title('Prewitt算子图像');
fori=2:
X-1
forj=2:
Y-1
fx(i,j)=photo(i-1,j+1)-photo(i-1,j-1)+2*(photo(i,j+1)-photo(i,j-1))+photo(i+1,j+1)-photo(i+1,j-1);
fy(i,j)=photo(i+1,j-1)-photo(i-1,j-1)+2*(photo(i+1,j)-photo(i-1,j))+photo(i+1,j+1)-photo(i-1,j+1);
end
end
grad_S=abs(fx)+abs(fy);%Sobel算子
subplot(2,3,4),imshow(grad_S),title('Sobel算子图像');
fori=2:
X-1
forj=2:
Y-1
dxy_L(i,j)=photo(i+1,j)+photo(i-1,j)+photo(i,j+1)+photo(i,j-1)-4*photo(i,j);
end
end
grad_L=photo(1:
X-1,1:
Y-1)-dxy_L;%Laplacian增强算子
subplot(2,3,5),imshow(grad_L),title('Laplacian增强算子图像');
fori=3:
X-2
forj=3:
Y-2
dxy_G(i,j)=-2*photo(i-2,j-2)-4*photo(i-2,j-1)-4*photo(i-2,j)-4*photo(i-2,j+1)-2*photo(i-2,j+2)...
-4*photo(i-1,j-2)+0*photo(i-1,j-1)+8*photo(i-1,j)+0*photo(i-1,j+1)-4*photo(i-1,j+2)...
-4*photo(i,j-2)+8*photo(i,j-1)+24*photo(i,j)+9*photo(i,j+1)-4*photo(i,j+2)...
-4*photo(i+1,j-2)+0*photo(i+1,j-1)+8*photo(i+1,j)+0*photo(i+1,j+1)-4*photo(i+1,j+2)...
-2*photo(i+2,j-2)-4*photo(i+2,j-1)-4*photo(i+2,j)-4*photo(i+2,j+1)-2*photo(i+2,j+2);
end
end
grad_G=photo(1:
X-2,1:
Y-2)-dxy_G;%LOG算子图像
subplot(2,3,6),imshow(grad_G),title('LOG算子图像');
%end
%functionImageStrength()
%图像增强
f=input('请输入编号7')
while1
Canshu={'请输入一个合适的阈值T(0-255):
','请输入指定的灰度级Lg(0-255):
','请输入指定的灰度级Lb(0-255):
'};
Dlg_title='输入参数:
';
Num_lines=1;
Def={'128','0','255'};
Answer=inputdlg(Canshu,Dlg_title,Num_lines,Def);
fori=1:
3
answer(i)=str2num(cell2mat(Answer(i)));
end
if0<=min(answer)&max(answer)<=255
break;
else
errordlg('输入参数错误,请重新输入!
!
!
','InputError');
loadtrain
sound(y,Fs);
end
end
grad=grad_L;
T=answer
(1);Lg=answer
(2);Lb=answer(3);
fxy=photo(1:
X-1,1:
Y-1);
gradxy=grad;
Fg1=gradxy;
gradxy(find(gradFg2=gradxy;
gradxy(find(grad>=T))=Lg;
Fg3=gradxy;
gradxy=grad;
gradxy(find(gradFg4=gradxy;
gradxy(find(grad>=T))=Lg;
Fg5=gradxy;
figure
subplot(2,3,1),imshow(photo),title('原图');
subplot(2,3,2),imshow(Fg1),title('情况一');
subplot(2,3,3),imshow(Fg2),title('情况二');
subplot(2,3,4),imshow(Fg3),title('情况三');
subplot(2,3,5),imshow(Fg4),title('情况四');
subplot(2,3,6),imshow(Fg5),title('情况五');
%end
%fun