?? 圖象增強.txt
字號:
%應用變化曲線增強對比度
X1=imread('pout.tif');
figure,imshow(X1);
f0=0;g0=0;
f1=70;g1=30;
f2=180;g2=230;
f3=255;g3=255;
figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3]);%繪制變化曲線
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')
r1=(g1-g0)/(f1-f0);
b1=g0-r1*f0;
r2=(g2-g1)/(f2-f1);
b2=g1-r2*f1;
r3=(g2-g1)/(f2-f1);
b3=g2-r3*f2;
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
f=X2(i,j);
g(i,j)=0;
if(f>=0)&(f<=f1)
g(i,j)=r1*f+b1;
elseif(f>=f1)&(f<=f2)
g(i,j)=r2*f+b2;
elseif(f>=f2)&(f<=f3)
g(i,j)=r3*f+b3;
end
end
end
figure,imshow(mat2gray(g))
%增強對比度(imadjust)
X1=imread('pout.tif');
figure,imshow(X1);
J=imadjust(X1,[0.25 0.6],[],1.2322);
figure,imshow(J)
%在imadjust函數中,第一個方括號中為原圖象中要改變的圖象灰度范圍,第二個方括號中
%為變換后的灰度范圍。而最后一個數據gamma小于1時圖象變亮,大于1時圖象變暗
%圖象求反
X1=imread('pout.tif');
figure,imshow(X1)
f1=200;
g1=256;
figure,plot([0,f1],[g1,0])
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')
k=g1/f1;
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
f=X2(i,j);
g(i,j)=0;
if(f>=0)&(f<f1)
g(i,j)=g1-k*f;
else
g(i,j)=0;
end
end
end
figure,imshow(mat2gray(g))
%對數變換函數進行動態范圍壓縮
X1=imread('circuit.tif');
figure,imshow(X1);
c=255/log(256);
x=0:1:255;
y=c*log(1+x);
figure,plot(x,y)
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
g(i,j)=c*log(X2(i,j)+1);
end
end
figure,imshow(mat2gray(g))
%圖象切分(將某個范圍的灰度值提高,其余的降低)
X1=imread('pout.tif');
figure,imshow(X1)
s1=100;s2=200;g1=20;g2=200;
figure,plot([0,s1,s1,s2,s2,255],[g1,g1,g2,g2,g1,g1])
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')
[m,n]=size(X1);
X2=double(X1);
for i=1:m
for j=1:n
f=X2(i,j);
g(i,j)=0;
if(f>=s1)&(f<=s2)
g(i,j)=g2;
else
g(i,j)=g1;
end
end
end
figure,imshow(mat2gray(g))
%直方圖均衡化
I=imread('tire.tif');
J=histeq(I);
imshow(I);
figure,imshow(J);
figure,imhist(I,64);
figure,imhist(J,64)
%直方圖規定化
I=imread('tire.tif');
hgram=0:255;
J=histeq(I,hgram);
imshow(I);
figure,imshow(J);
figure,imhist(I,64);
figure,imhist(J,64)
%離散余弦變換圖象與原圖象的差別
I=imread('cameraman.tif');
I=double(I)/255;
T=dctmtx(8);
B=blkproc(I,[8 8],'P1*x*P2',T,T');
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask);
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
imshow(I),figure,imshow(I2)
M=I2-I;
figure,imshow(mat2gray(M))
%圖象的相加運算(程序有一定的問題)
I=imread('eight.tif');
figure,imshow(I);
[m,n]=size(I);
N=3;%設定噪聲圖象的個數
for i=1:N
X=imnoise(I,'gaussian');
figure,imshow(X);
Y=double(X);
J=J+Y/N;
end
figure,imshow(mat2gray(J))
%空域濾波增強
%均值過濾器
I=imread('eight.tif');
J=imnoise(I,'salt & pepper',0.02);%注意&前后要有空格
imshow(I)
figure,imshow(J);
K1=filter2(fspecial('average',3),J)/255;
K1=filter2(fspecial('average',5),J)/255;
K1=filter2(fspecial('average',7),J)/255;
figure,imshow(K1);
figure,imshow(K2);
figure,imshow(K3);
%維納濾波器
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'gaussian',0,0.005);
imshow(J)
K1=wiener2(J,[5,5]);
figure,imshow(K1)
%中值濾波器(medfilt)
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J)
K1=medfilt2(J,[3,3]);
figure,imshow(K1)
%中值濾波器(ordfilt)
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J)
K1=ordfilt2(J,5,ones(3,3));
figure,imshow(K1)
%使用稀疏分布的模板實現中值濾波
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J)
domain=[0 0 1 0 0;
0 0 1 0 0;
1 1 1 1 1;
0 0 1 0 0;
0 0 1 0 0];
K1=ordfilt2(J,5,domain);
figure,imshow(K1)
%線性銳化濾波器
I=imread('eight.tif');
h=fspecial('laplacian');
I2=filter2(h,I);
imshow(I);
figure,imshow(I2)
%對比度增強濾波器
I=imread('eight.tif');
imshow(I)
h=fspecial('unsharp',0.5);%參數控制濾波器形狀,范圍為[0 1],默認值為0.2
I2=filter2(h,I)/255;
figure,imshow(I2)
%幾種邊緣增強算子的效果進行比較
I1=imread('eight.tif');
figure,imshow(I1)
h1=fspecial('sobel');
I2=filter2(h1,I1);
figure,imshow(I2)
I3=conv2(I1,h1);
figure,imshow(I3)
h2=fspecial('prewitt');
I4=filter2(h2,I1);
figure,imshow(I4)
h3=fspecial('log');
I5=filter2(h3,I1);
figure,imshow(I5)
%低通濾波
I1=imread('eight.tif');
figure,imshow(I1)
I2=imnoise(I1,'salt & pepper');
figure,imshow(I2)
f=double(I2);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));%計算Butterworth低通轉換函數
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)
%Butterworth高通濾波器
I1=imread('eight.tif');
figure,imshow(I1)
f=double(I1);
g=fft2(f);
g=fftshift(g);%轉換數據矩陣
[N1,N2]=size(g);
n=2;
d0=5;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2);
if d==0
h=0;
else
h=1/(1+(d0/d)^(2*n));
end
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -