数字图像实验(配姚敏版教材)
例4.1 代及果如下:码码码码码码码
I=imread('pout.tif');imshow(I);
I=double(I);
[M,N]=size(I);
for i=1:M
for j=1:N
if I(i,j)<=30
I(i,j)=I(i,j);
elseif I(i,j)<=150
I(i,j)=(200-30)/(150-30)*(I(i,j)-30)+30;
else
I(i,j)=(255-200)/(220-150)*(I(i,j)-150)+220;
end
end
end
figure(2);imshow(uint8(I));
码码码果:
例4.2 代及果如下:码码码码码码码
I=imread('lena.bmp')figure;imshow(I);I=double(I);
I2=41*log(1+I);
I2=uint8(I2);
figure;imshow(I2);
例4.3 代及果如下:码码码码码码码
I=imread('007.bmp');figure;imshow(I);I=double(I)
[M,N]=size(I);for i=1:M
for j=1:N
if I(i,j)<=50
I(i,j)=40;
elseif I(i,j)<=180
I(i,j)=220;
else
I(i,j)=40;
end
end
end
I=uint8(I);
figure;imshow(I);例4.4 代及果如下:码码码码码码码
I=imread('cameraman.tif');
imshow(I);
I=double(I);
[M,N]=size(I);for k=1:8
J=zeros(M,N);
for i=1:M
for j=1:N
temp=I(i,j);
s1=0;s2=0;
range=[k:-1:1];
for d=range
s1=2^(8-d)+s1;s2=2^(8-d+1);
if temp>=s1&temp=d0
h1=1;
h2=1+0.5;
else
h1=0;
h2=0.5;
end
g1(i,j)=h1*g(i,j);
g2(i,j)=h2*g(i,j);
end
end
g1=ifftshift(g1);
g1=uint8(real(ifft2(g1)));
subplot(221);imshow(g1);title('理想高通波果码码码码')
g2=ifftshift(g2);
g2=uint8(real(ifft2(g2)));subplot(222);imshow(g2);
title('理想高通加波果强码码码')
n=2;
d0=20;
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2);
if d==0
h1=0;
h2=0.5;
else
h1=1/(1+(d0/d)^(2*n));
h2=1/(1+(d0/d)^(2*n))+0.5;
end
gg1(i,j)=h1*g(i,j);
gg2(i,j)=h2*g(i,j);
end
end
gg1=ifftshift(gg1);
gg1=uint8(real(ifft2(gg1)));subplot(223);imshow(gg1);
title('巴特沃斯高通波果码码码码')
gg2=ifftshift(gg2);
gg2=uint8(real(ifft2(gg2)));subplot(224);imshow(gg2);
title('巴特沃斯高通加波果强码码码')
例4.16 代及果如下:码码码码码码码
=imread('eight.tif'); subplot(121);imshow(J);
J=double(J);
f=fft2(J); g=fftshift(f);
[M,N]=size(f);
d0=10;
r1=0.5;
rh=2;
c=4;
n1=floor(M/2);
n2=floor(N/2);
for i=i:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2);
h=(rh-r1)*(1-exp(-c*(d.^2/d0.^2)))+r1;
g(i,j)=h*g(i,j);
end
end
g=ifftshift(g);
g=uint8(real(ifft2(g)));
subplot(122);imshow(g);例5.1 代及果如下:码码码码码码码
C=imread('eight.tif');
subplot(1,2,1);
imshow(C);
LEN=30;
THETA=45;
PSF=fspecial('motion',LEN,THETA);MF=imfilter(C,PSF,'circular','conv');
subplot(1,2,2),
imshow(MF);
imwrite(MF,'canoe-MF.tif');例5.2 代及果如下:码码码码码码码
[MF,map]=imread('pout.tif');figure(1);
imshow(MF);
LEN=30;
THETA=45;
INITPSF=fspecial('motion',LEN,THETA);[J,P]=deconvblind(MF,INITPSF,30);figure(2);imshow(J);
figure(3);imshow(P,[],'notruesize');例5.3 代及果如下:码码码码码码码
F=checkerboard(8);
figure(1);
imshow(F,[]);
PSF=fspecial('motion',7,45);MF=imfilter(F,PSF,'circular');noise=imnoise(zeros(size(F)),'gaussian',0,0.001);
MFN=MF+noise;
figure(2);
imshow(MFN,[]);
NSR=sum(noise(:).^2)/sum(MFN(:).^2);figure(3);
imshow(deconvwnr(MFN,PSF),[]);figure(4);
imshow(deconvwnr(MFN,PSF,NSR),[]);例5.7 代及果如下:码码码码码码码
f=imread('pout.tif');
figure(1);imshow(f);
title('原始像码码');
g=imnoise(f,'salt & pepper',0.2);
figure(2);imshow(g);
title('椒噪声染像码码码码码码码');
g1=double(g)/255;
j1=medfilt2(g1,'symmetric');
figure(3);imshow(j1);
title('中波像码码码码码');
j2=ordfilt2(g1,median(1:3*3),ones(3,3),'symmetric');figure(4);imshow(j2);
title('中点波像码码码码');
j3=ordfilt2(g1,1,ones(3,3));
figure(5);imshow(j3);
title('最小波像码码码码码');
j4=ordfilt2(g1,9,ones(3,3));
figure(6);imshow(j4);
title('最大波像码码码码码');
例5.8代及果如下:码码码码码码码
f=checkerboard(24); figure(1):imshow(f);
s=0.7;
theta=pi/6;
T=[s*cos(theta) s*sin(theta) 0
-s*sin(theta) s*cos(theta) 0
0 0 1];
tform=maketform('affine',T);
g1=imtransform(f,tform,'nearest'); figure(2):imshow(g1);
g2=imtransform(f,tform); figure(3):imshow(g2);
g3=imtransform(f,tform,'FillValue',0.5); figure(4):imshow(g3);
例6.1代及果如下:码码码码码码码
iR=zeros(128,128);iR(1:64,1:64)=1;iG=zeros(128,128);iG(65:128,1:64)=1;iB=zeros(128,128);iB(1:64,65:128)=1;I=cat(3,iR,iG,iB);imshow(I);
例6.2代及果如下:码码码码码码码
rgb_I=imread('apple.bmp');
cmy_I=imcomplement(rgb_I);
imshow(rgb_I);
figure
imshow(cmy_I);
clc
例6.3代及果如下:码码码码码码码
rgb=imread('三原色.bmp');
subplot(221);
imshow(rgb);
rgb=im2double(rgb);r=rgb(:,:,1);
g=rgb(:,:,2);
b=rgb(:,:,3);
I=(r+g+b)/3;
tmp1=min(min(r,g),b);tmp2=r+g+b;
tmp2(tmp2==0)=eps;S=1-3.*tmp1./tmp2;tmp1=0.5*((r-g)+(r-b));
tmp2=sqrt((r-g).^2+(r-b).*(g-b));
theta=acos(tmp1./(tmp2+eps));
H=theta;
H(b>g)=2*pi-H(b>g);H=H/(2*pi);
H(S==0)=0;
hsi=cat(3,H,S,I);subplot(222);
imshow(H);
subplot(223);
imshow(S);
subplot(224);
imshow(I);
clc
例6.4代及果如下:码码码码码码码
rgb=imread('yellowRose.jpg');imshow(rgb);
R=rgb(:,:,1);
G=rgb(:,:,2);
B=rgb(:,:,3);
subplot(232);
figure,imshow(R);
figure,imshow(G);
figure,imshow(B);
m=fspecial('average');
R_filtered=imfilter(R,m);G_filtered=imfilter(G,m);B_filtered=imfilter(B,m);rgb_filtered=cat(3,R_filtered,G_filtered,B_filtered);
figure,imshow(rgb_filtered);
例6.5代及果如下:码码码码码码码
I=imread('yellowRose.jpg ');imshow(I);
lapMatrix=[1 1 1;1 -8 1;1 1 1];I_tmp=imfilter(I,lapMatrix,'replicate');
I_sharped=imsubtract(I,I_tmp);imshow(I_sharped);
例6.6代及果如下:码码码码码码码
I=imread('yellowRose.jpg');subplot(221);
imshow(I);title('RGB原像码码');
m=fspecial('motion',20,45);I2=imfilter(I,m,'circular');noise=imnoise(zeros(size(I)),'gaussian',0,0.005);
subplot(222);
imshow(noise);title('noise');I3=double(I2)+noise;
I3=uint8(I3);
subplot(223);
imshow(I3);title('运模糊并加入噪声像码码码码码码码码码码');
I3_recovered=deconvwnr(I3,m);subplot(224);
imshow(I3_recovered);title('码码码码码码码码波原后像');
clc
例6.7代及果如下:码码码码码码码
I=imread('h.jpg');
subplot(121);imshow(I);
s0pt=fspecial('sobel');
Rx=imfilter(double(I(:,:,1)),s0pt,'replicate');Ry=imfilter(double(I(:,:,1)),s0pt','replicate');Gx=imfilter(double(I(:,:,2)),s0pt,'replicate');Gy=imfilter(double(I(:,:,2)),s0pt','replicate');Bx=imfilter(double(I(:,:,3)),s0pt,'replicate');By=imfilter(double(I(:,:,3)),s0pt','replicate');
gxx=Rx.^2+Gx.^2+Bx.^2;
gyy=Ry.^2+Gy.^2+By.^2;
gxy=Rx.*Ry+Gx.*Gy+Bx.*By;
theta=0.5*(atan(2*gxy./(gxx-gyy+eps)));G1=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta)+2*gxy.*sin(2*theta));
theta=theta+pi/2;
G2=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta)+2*gxy.*sin(2*theta));
G1=G1.^0.5
G2=G2.^0.5;
gradiant=mat2gray(max(G1,G2));
subplot(122);
imshow(gradiant);
例6.8代及果如下:码码码码码码码
I=imread('cameraman.tif');imshow(I);
G2C=grayslice(I,8);
figure
imshow(G2C,hot(8));
例6.9代及果如下:码码码码码码码
I=imread('cameraman.tif');imshow(I);
I=double(I);
[M,N]=size(I);
L=256;
for i=1:M
for j=1:N
if I(i,j)=1 & yr(i)T);
Tnew=(mean(f(r1))+mean(f(r2)))/2;
done=abs(Tnew-T)<1;
T=Tnew;
i=i+1;
end
f(r1)=0;
f(r2)=1;
subplot(1,2,2);imshow(f);
title('迭代二化像码码码码码码码');例9.8代及果如下:码码码码码码码
f=imread('cameraman.tif');
subplot(1,2,1);imshow(f);
title('原始像码码');
T=graythresh(f);g=im2bw(f,T);subplot(1,2,2);imshow(g);
title('Otsu方法二化像码码码码');
例9.9代及果如下:码码码码码码码
f=imread('cameraman.tif');subplot(2,2,1);
imshow(f);
title('(a)原始像码码');
subplot(2,2,2);
f=double(f);
hv=fspecial('prewitt');hh=hv.';
gv=abs(imfilter(f,hv,'replicate'));
gh=abs(imfilter(f,hh,'replicate'));
g=sqrt(gv.^2+gh.^2);
subplot(2,2,2);
L=watershed(g);
wr=L==0;
imshow(wr);
title('(b)分水码');
f(wr)=255;
subplot(2,2,3);
imshow(uint8(f));
title('(c)分割果码码');
rm=imregionalmin(g);subplot(2,2,4);
imshow(rm);
title('(d)局部极小');码
例9.10代及果如下:码码码码码码码
f=imread('cameraman.tif');subplot(2,3,1);
imshow(f);
title('(a)原始像码码')
f=double(f);
hv=fspecial('prewitt');hh=hv.';
gv=abs(imfilter(f,hv,'replicate'));
gh=abs(imfilter(f,hh,'replicate'));
g=sqrt(gv.^2+gh.^2);subplot(2,3,2);
df=bwdist(f);
imshow(uint8(df*8));title('(b)原像的距离码码码码码码码')
L=watershed(df);em=L==0;
subplot(2,3,3);
imshow(em);
title('(c)码码码码外部束')
im=imextendedmax(f,20);subplot(2,3,4);
imshow(im);
title('(d)码码码码内部束')
g2=imimposemin(g,im|em);subplot(2,3,5);
imshow(g2);
title('(e)由内外束重构梯度码码码码码码码码码码码')L2=watershed(g2);wr2=L2==0;
subplot(2,3,6);
f(wr2)=255;
imshow(uint8(f));title('(f)分割及果码码')
例9.11代及果如下:码码码码码码码
f=imread('cameraman.tif');
subplot(2,2,1);
imshow(f);
seedx=[30,76,86];seedy=[110,81,110];hold on
plot(seedx,seedy,'gs','linewidth',1);
title('原始像及子点位置码码码码码码码码');
f=double(f);
markerim=f==f(seedy(1),seedx(1));
for i=2:length(seedx)
markerim=markerim|(f==f(seedy(i),seedx(i)));
end
thresh=[12,6,12];maskim=zeros(size(f));for i=1:length(seedx)g=abs(f-f(seedy(i),seedx(i)))<=thresh(i);
maskim=maskim|g;
end
[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);
g=mat2gray(g);
subplot(2,2,2);
imshow(g);
imshow(g);
title('三个子点区域生果码码码码码码码码码');
例9.13代及果如下:码码码码码码码
f=imread('a.jpg');subplot(2,2,1)
imshow(f);
title('原始像码码');
b=imread('b.jpg');subplot(2,2,2)
imshow(b);
title('背景像码码');
df=im2double(f);
db=im2double(b);
c=df-db;
d=im2uint8(b);
c=df-db;
d=im2uint8(c);
subplot(2,2,3)
imshow(d);
title('差像码码码);
T=50;
T=T/255;
i=find(abs(c)