1、Matlab图像显示方法实验一 Matlab图像显示方法一、实验目的 1.了解 Matlab的基本功能及操作方法 2.练习图像读写和显示函数的使用方法 3.掌握 Matlab支持的五类图像的显示方法二、实验内容 1.图像的读写 A)图像读 RGB = imread(ngc6543a.jpg); B)图像写先从一个.mat文件中载入一幅图像,然后利用图像写函数 imwrite,创建一个.bmp文件,并将图像存入其中。 load clown whos imwrite(X,map,clown.bmp) C)图像文件格式转换 bitmap = imread(clown.bmp,bmp); imwrit
2、e(bitmap,clown.png,png); 2.图像显示 A) 二进制图像的显示 BW1=zeros(20,20); %创建仅包含 0/1的双精度图像 BW1(2:2:18,2:2:18)=1; imshow(BW1,notruesize); whos BW2=uint8(BW1); figure,imshow(BW2,notruesize) BW3=BW2=0; %逻辑标志置为 on figure,imshow(BW3,notruesize) whos BW=imread(circles.tif); imshow(BW); figure,imshow(BW); figure,imsho
3、w(BW,1 0 0;0 0 1); 图1.1-1:BW1图像 图1.1-2:BW2图像图1.1-3:BW图像 图1.1-4:BW取反图 图1.1-5: BW变换像B)灰度图像的显示 I=imread(testpat1.tif); J=filter2(1 2;-1 -2,I); imshow(I) figure,imshow(J,) 图1.2-1:I(testpat1.tif)图像 图1.2-2 : I灰度变换后的J图像C) 索引图像的显示 load clown %装载一幅图像 imwrite(X,map,clown.bmp); %保存为 bmp文件 imshow(X) imshow(X,ma
4、p) 图1.3-1:索引图像D) RGB图像的显示 I=imread(flowers.tif); imshow(I) RGB=imread(ngc6543a.jpg); figure,imshow(RGB) imshow(I(:,:,3) % 显示第 3个颜色分量 图1.4-1:RGB图像 图1.4-2:第三颜色分量图像E) 多帧图像的显示 mri=uint8(zeros(128,128,1,27); % 27帧文件 mri.tif初始化 for frame=1:27 mri(:,:,:,frame),map=imread(mri.tif,frame); % 读入每一帧 end imshow(
5、mri(:,:,:,3),map); % 显示第 3帧 figure,imshow(mri(:,:,:,6),map); % 显示第 6帧 figure,imshow(mri(:,:,:,10),map); % 显示第 10帧 figure,imshow(mri(:,:,:,20),map); % 显示第 20帧 图1.5-1:第 3帧 图1.5-1:第 6帧 图1.5-1:第 10帧 图1.5-1:第 20帧F)显示多幅图像 X1,map1=imread(forest.tif); X2,map2=imread(trees.tif); subplot(1,2,1),imshow(X1,map1
6、) subplot(1,2,2),imshow(X2,map2) subplot(1,2,1),subimage(X1,map1) subplot(1,2,2),subimage(X2,map2) 图1.5-1:多幅图像显示三、思考题: 1.图像显示时,若不带参数notruesize,显示效果如何? 2.如何显示 RGB图像的某一个颜色分量? 3.如何显示多帧图像的所有帧?如何根据多帧图像创建电影片段?实验二 图像运算 一、实验目的 1.熟悉图像点运算和代数运算的实现方法 2.了解图像几何运算的简单应用 3.了解图像的邻域操作二、实验内容 1. 图像点运算A)读入图像rice.tif,通过图像
7、点运算改变对比度。 rice=imread(rice.tif); subplot(131),imshow(rice) I=double(rice); %转换为双精度类型 J=I*0.43+60; rice2=uint8(J); %转换为 uint8 subplot(132),imshow(rice2) J=I*1.5-60; rice3=uint8(J); %转换为 uint8 subplot(133),imshow(rice3) 图2.1-1:通过图像点运算改变对比度前后的图像2.图像的代数运算 A)图像加法运算 I=imread(rice.tif); imshow(I) J=imread(
8、cameraman.tif); figure,imshow(J) K=imadd(I,J); figure,imshow(K) K2=imadd(I,J,uint16); figure,imshow(K2,) RGB=imread(flowers.tif); RGB2=imadd(RGB,50); imshow(RGB) figure,imshow(RGB2) RGB3=imadd(RGB,100); figure,imshow(RGB3) 图2.2-1:图像I 图2.2-2:图像J 图2.2-3:I与J相加图像K图2.2-4:图像RGB 图2.2-5:图像RGB2 图2.2-6:图像RGB3
9、B)图像减法运算 I=imread(rice.tif); imshow(I) background = imopen(I,strel(disk,15); %估计背景图像 figure, imshow(background); I2=imsubtract(I,background); %从原始图像中减去背景图像 figure, imshow(I2) 图2.3-1:图像I 图2.3-2:背景图像 图2.3-3:减去背景后图像C)图像乘法运算 I=imread(moon.tif); J=immultiply(I,1.2); K=immultiply(I,0.5); imshow(I) figure,
10、imshow(J) figure,imshow(K) 图2.4-1:图像I 图2.4-2:图像J 图2.4-3:图像K3.图像的几何运算 A)改变图像的大小读入图像ic.tif,改变图像大小,分别将原图像放大 1.5倍和缩小 0.5倍。 I=imread(ic.tif); J=imresize(I,1.25); K=imresize(I,0.8); imshow(I) figure,imshow(J) figure,imshow(K) Y=imresize(I,100,150); figure,imshow(Y) 图2.5-1:图像I 图2.5-2:图像J 图2.5-3:图像K 图2.5-4:
11、图像YB)旋转一幅图像将上述图像顺时针和逆时针旋转任意角度,观察显示效果。 I=imread(ic.tif); J=imrotate(I,30,bilinear); J1=imrotate(I,30,bilinear,crop); imshow(I) figure,imshow(J) figure,imshow(J1) J2=imrotate(I,-15,bilinear); figure,imshow(J2) 图2.6-1:图像I 图2.6-2:图像J 图2.6-3:图像J1 图2.6-4:图像J2 C)图像剪切通过交互式操作,从一幅图像中剪切一个矩形区域。 I=imread(ic.tif)
12、; imshow(I); I1=imcrop; figure,imshow(I1) I2=imcrop(I,30 60 120 160); figure,imshow(I2) 图2.7-1:图像I 图2.7-2:图像I4. 图像的邻域操作读入图像tire.tif,分别使用函数 nlfilter和 blkproc对图像进行滑动邻域操作和分离邻域操作。 I=imread(tire.tif); f=inline(max(x(:); %构造复合函数 I2=nlfilter(I,3 3,f); %滑动邻域操作 imshow(I) figure,imshow(I2) I=imread(tire.tif);
13、 f=inline(uint8(round(mean2(x)*ones(size(x); %构造复合函数 I2=blkproc(I,8 8,f); %滑动邻域操作 imshow(I) figure,imshow(I2) 图2.8-1:图像I 图2.8-1:图像I2图2.7-1:滑动邻域操作实验三 图像变换与滤波器设计 一、实验目的 1.了解傅立叶变换、离散余弦变换及 Radon变换在图像处理中的应用 2.了解 Matlab线性滤波器的设计方法二、实验内容 1.傅立叶变换 A)绘制一个二值图像矩阵,并将其傅立叶函数可视化。 f=zeros(30,30); f(5:24,13:17)=1; ims
14、how(f,notruesize) F=fft2(f); F2=log(abs(F); figure,imshow(F2,-1 5,notruesize);colormap(jet); F=fft2(f,256,256); %零填充为 256256矩阵 figure,imshow(log(abs(F),-1 5,notruesize);colormap(jet); F2=fftshift(F); %将图像频谱中心由矩阵原点移至矩阵中心 figure,imshow(log(abs(F2),-1 5,notruesize);colormap(jet); 图3.1-1:图像f 图3.1-2:傅里叶变
15、换图像F图3.1-3:零填充图像 图3.1-4:频谱中心移至矩阵中心图像B) 利用傅立叶变换分析两幅图像的相关性,定位图像特征。读入图像 text.tif抽取其中的字母a。 bw=imread(text.tif); a=bw(59:71,81:91); imshow(bw); figure,imshow(a); C=real(ifft2(fft2(bw).*fft2(rot90(a,2),256,256);%求相关性 figure,imshow(C,); thresh=max(C(:); figure,imshow(Cthresh-10) figure,imshow(Cthresh-15) 图
16、3.1-1:原text图像 图3.1-2:字母图像a图3.1-3:图像的相关性对比2.离散余弦变换(DCT) A) 使用 dct2对图像 autumn.tif进行 DCT变换。 RGB=imread(autumn.tif); imshow(RGB) I=rgb2gray(RGB); %转换为灰度图像 figure,imshow(I) J=dct2(I); figure,imshow(log(abs(J),),colormap(jet(64);colorbar; 图3.2-1:图像RGB 图3.2-2:转换为灰度图像图3.2-1:颜色块控制条B) 将上述 DCT变换结果中绝对值小于 10的系数舍
17、弃,使用 idct2重构图像并与原图像比较。 RGB=imread(autumn.tif); I=rgb2gray(RGB); %转换为灰度图像 J=dct2(I); figure,imshow(I) K=idct2(J); figure,imshow(K,0 255) J(abs(J)10)=0; %舍弃系数 K2=idct2(J); figure,imshow(K2,0 255) 图3.3-1:图像I 图3.3-2:图像K 图3.3-3:图像K2C) 利用 DCT变换进行图像压缩。 I=imread(cameraman.tif); I=im2double(I); T=dctmtx(8);
18、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) 图3.4-1:图像I 图3.4-2:压缩后图像3. Radon变换使用 Radon逆变换重建
19、图像。P=phantom(256); %创建 256灰度级大脑图 imshow(P) theta1=0:10:170;R1,xp=radon(P,theta1); %18个投影 theta2=0:5:175; R2,xp=radon(P,theta2); %36个投影 theta3=0:2:178; R3,xp=radon(P,theta3); %90个投影 figure,imagesc(theta3,xp,R3);colormap(hot);colorbar % 使用逆变换重构图像 I1=iradon(R1,10); %用 R1重构图像 I2=iradon(R2,5); %用 R2重构图像
20、I3=iradon(R3,2); %用 R3重构图像 figure,imshow(I1) figure,imshow(I2) figure,imshow(I3) 图3.5-1:256灰度级大脑图 图3.5-2:颜色块控制条图3.5-3:18个投影构图 图3.5-4:36个投影构图 图3.5-5:90个投影构图4. Matlab线形滤波器设计采用频率变换方式,通过一维最优波纹 FIR滤波器创建二维 FIR滤波器(p96)。 b=remez(10,0 0.4 0.6 1,1 1 0 0); %阶次,频率向量 ,对应的理想幅频响应 h=ftrans2(b); H,w=freqz(b,1,64,who
21、le); colormap(jet(64) plot(w/pi-1,fftshift(abs(H); %使 x轴取值 0处对应曲线中心 figure,freqz2(h,32 32) 图3.6-1:一维FIR滤波器 图3.6-2:二维FIR滤波器实验四 形态学操作与空间变换 一、实验目的 1.了解膨胀和腐蚀的 Matlab实现方法 2.掌握图像膨胀、腐蚀、开启、闭合等形态学操作函数的使用方法 3.了解二进制图像的形态学应用 4.了解空间变换函数及图像匹配方法二、实验内容 1.图像膨胀 A)对包含矩形对象的二进制图像进行膨胀操作。 BW=zeros(9,10); BW(4:6,4:7)=1; im
22、show(BW,notruesize) se=strel(square,3); %正方形结构元素 BW2=imdilate(BW,se); figure,imshow(BW2,notruesize) 图4.1-1:BW 图4.1-2:BW2B)改变上述结构元素类型(如:line, diamond, disk等),重新进行膨胀操作。 图4.2-1:line类型 图4.2-2:disk类型 图4.2-3:diamond类型C)对图像text.tif进行上述操作,观察不同结构元素膨胀的效果。 BW3=imread(text.tif); imshow(BW3) se2=strel(line,11,90
23、); %线型结构元素 BW4=imdilate(BW3,se2); figure,imshow(BW4) 图4.3-1:line类型 图4.3-2:disk类型 图4.3-3:diamond类型 图4.3-4:square类型2.图像腐蚀 A)对图像circbw.tif进行腐蚀操作。 BW1=imread(circbw.tif); se=strel(arbitrary,eye(5); BW2=imerode(BW1,se); imshow(BW1) figure,imshow(BW2) 图4.4-1:BW1 图4.4-2:BW2B) 对图像text.tif进行腐蚀操作。 BW=imread(t
24、ext.tif); se=strel(line,11,90); BW2=imerode(BW3,se); imshow(BW) figure,imshow(BW2) 图4.5-1:BW 图4.5-2:BW23.膨胀与腐蚀的综合使用 A) 从原始图像circbw.tif中删除电流线 ,仅保留芯片对象。方法一:先腐蚀(imerode),再膨胀(imdilate); BW1=imread(circbw.tif); imshow(BW1) se=strel(rectangle,40 30); %选择适当大小的矩形结构元素 BW2=imerode(BW1,se); %先腐蚀,删除较细的直线 figure
25、,imshow(BW2) BW3=imdilate(BW2,se); %再膨胀,恢复矩形的大小 figure,imshow(BW3)图4.6-1:BW1 图4.6-2:BW2 图4.6-3:BW3方法二:使用形态开启函数(imopen)。 BW1=imread(circbw.tif); imshow(BW1) se=strel(rectangle,40 30); BW2=imopen(BW1,se); %开启操作 figure,imshow(BW2) 图4.7-1:BW1 图4.7-2:大小40 30B) 改变结构元素的大小,重新进行开启操作,观察处理结果。 se=strel(rectangl
26、e,20 10); se=strel(rectangle,50 40); 图4.8-1:大小20 10 图4.8-2:大小50 40C) 置结构元素大小为4 3,同时观察形态开启(imopen)与闭合(imclose)的效果,总结形态开启与闭合在图像处理中的作用。 I=imread(circbw.tif); imshow(I) se=strel(rectangle,4 3); I1=imopen(I,se); %开启操作 I2=imclose(I,se); %闭合操作 figure,imshow(I1) figure,imshow(I2) 图4.9-1:I 图4.9-1:I1 图4.9-1:I
27、24. 高帽与低帽变换 A) 读入图像pearlite.tif,分别显示其高帽变换与低帽变换结果,并与原图像较。(设 se=strel(disk,5);)。 I=imread(pearlite.tif); subplot(221),imshow(I) se=strel(disk,5); J=imtophat(I,se); subplot(222),imshow(J) K=imbothat(I,se); subplot(223),imshow(K) L=imsubtract(imadd(J,I),K); subplot(224),imshow(L) 图4.10-1:高帽与低帽变换5.图像极值的处
28、理方法 A)对于下图所示的图像矩阵 A,利用函数 imregionalmax寻找其局部极大值 A=10 10 10 10 10 10 10 10 10 10; 10 13 13 13 10 10 11 10 11 10; 10 13 13 13 10 10 10 11 10 10; 10 13 13 13 10 10 11 10 11 10; 10 10 10 10 10 10 10 10 10 10; 10 11 10 10 10 18 18 18 10 10; 10 10 10 11 10 18 18 18 10 10; 10 10 11 10 10 18 18 18 10 10; 10
29、11 10 11 10 10 10 10 10 10; 10 10 10 10 10 10 11 10 10 10; B=imregionalmax(A) 结果如下:B) 利用函数 imextendedmax寻找像素值大于其邻域像素值 2个单位的局部极值。C=imextendedmax(A,2) 结果如下:6. 创建一幅图像 ,求其距离矩阵。 bw=zeros(5,5); bw(2,2)=1;bw(4,4)=1; D=bwdist(bw) center1=-10; center2=-center1; dist=sqrt(2*(2*center1)2); radius=dist/2*1.4; lims=floor(cen
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1