图像上机实验.docx | 您所在的位置:网站首页 › graycoprops函数 › 图像上机实验.docx |
图像上机实验.docx 图像上机实验 实验一图像处理的基本操作 一,实验目的 1.熟悉有关数字图像处理的MATLAB基本操作和编写; 2.掌握数字图像的基本读写、显示与保存; 3.能够利用MATLAB工具箱完成图像处理的基本运算; 二,实验内容 1. (1)读取图像并显示真彩色图像house.tiff; (2)读取图像并显示索引色图像canoe.tif,并转换为灰度图像; (3)读取图像并显示灰度图像rice.png,并转换为二进制图像; (4)检测内存中的图像和保存图像; 2.查看不同分辨率下图像lena.tiff的显示结果; 3.对彩色图像Peppers.png观看GRB通道各单通道图像; 4.实现马赫带效应并画出灰度直方图。 三,代码 I=imread('house.tiff'); figure (1) imshow(I) [A,map]=imread('canoe.tif'); figure (2) subplot(121) imshow(A,map) D=ind2gray(A,map); subplot(122) imshow(D) G=imread('rice.png'); figure(3) subplot(121) imshow(G) th=graythresh(G);H=im2bw(G,th); subplot(122) imshow(H) whos;imwrite B=imread('lena.tiff'); figure(4), subplot(121) imshow(B) C=imresize(B,0.2) subplot(122) imshow(C)
D=imread('Peppers.png'); r=D,r(: : [23])=0; g=D,g(: : [13])=0; b=D,b(: : [12])=0; figure(5), subplot(1,3,1),imshow(r); subplot(1,3,2),imshow(g); subplot(1,3,3),imshow(b); a=zeros(256,256); fori=1: 32: 256 a(: i: i+32)=i; end figure(6); subplot(121) imshow(uint8(a)); subplot(122) imhist(uint8(a)); 四,实验结果 五,结果分析 从运行结果可以看出,实验还是比较成功的。 但是在做索引色那个图像的时候,如果索引色和灰度图像放在同一个figure里,索引色图像显示的也是灰色,因此我只能把索引色图像和灰度图像分开放到两个figure里。 在查看不同分辨率下图像lena.tiff的显示结果时,必须要对两个图像进行放大查看才能看出不同。 实验二图像变换1 一,实验目的 1.熟悉有关MATLAB工具箱中提供的图像变换函数; 2.掌握傅立叶变换和小波变换等常用的正交变换函数; 二,实验内容 1.对图像lena.png进行傅立叶变换和离散余弦变换,并分别求出其逆变换后重构图像的均方误差; 2.实现图像lena.png的两层小波分解,观察分解系数并重构,求重构图像误差值; 3.观察图像IM1.BMP经小波分解系数的方向性,实现三层小波分解,分别把HL,LH,HH子带置零和重构,观察重构图像跟原始图像的差异。 三,代码 %1.对图像lena.png进行傅立叶变换和离散余弦变换, %并分别求出其逆变换后重构图像的均方误差; clear; clc; I=imread('lena.png'); %傅里叶变换 figure (1); I1=fft2(I); I1=fftshift(I1); If=ifftshift(I1); If=uint8(real(ifft2(If))); subplot(231); imshow(I); subplot(232); imshow(log(abs(I1)),[]); subplot(233); imshow(If); [m,n]=size(I);%计算均方误差 fori=1: m forj=1: n temp(i,j)=(If(i,j)-I(i,j))^2; end end wucha1=sum(sum(temp)) %离散余弦变换 I2=dct2(I); I3=fftshift(I2); Id=idct2(I2); Id=uint8(real(Id)); subplot(234); imshow(I); subplot(235); imshow(log(abs(I3)),[]); subplot(236); imshow(Id); [m,n]=size(I);%计算均方误差 fori=1: m forj=1: n temp(i,j)=(If(i,j)-I(i,j))^2; end end wucha2=sum(sum(temp)) %% %2.实现图像lena.png的两层小波分解,观察分解系数并重构,求重构图像误差值; X=imread('lena.png'); [c,s]=wavedec2(X,2,'bior3.7'); a1=wrcoef2('a',c,s,'bior3.7',1); h1=wrcoef2('h',c,s,'bior3.7',1); v1=wrcoef2('v',c,s,'bior3.7',1); d1=wrcoef2('d',c,s,'bior3.7',1); c1=[a1,h1;v1,d1]; c1=uint8(c1); Xr=waverec2(c,s,'bior3.7'); figure (2); subplot(131); imshow(X); subplot(132); imshow(c1); subplot(133); imshow(uint8(Xr)); [m,n]=size(X);%计算均方误差 fori=1: m forj=1: n temp(i,j)=(Xr(i,j)-I(i,j))^2; end end wucha3=sum(sum(temp)) %% %3.观察图像IM1.BMP经小波分解系数的方向性,实现三层小波分解, %分别把HL,LH,HH子带置零和重构,观察重构图像跟原始图像的差异。 P=imread('C: \shiyan2\IM1.BMP'); [c,s]=wavedec2(P,3,'bior3.7'); a1=wrcoef2('a',c,s,'bior3.7',1); h1=wrcoef2('h',c,s,'bior3.7',1); v1=wrcoef2('v',c,s,'bior3.7',1); d1=wrcoef2('d',c,s,'bior3.7',1); c1=[a1,h1;v1,d1]; c1=uint8(c1); figure(3); subplot(131); imshow(P); subplot(132); imshow(c1); subplot(133); imshow(uint8(a1)); 四,实验结果 五,实验结果 从运行结果可以看出,实验还是比较成功的。 上图分别是1.对图像lena.png进行傅立叶变换和离散余弦变换,并分别求出其逆变换后重构图像的均方误差;2.实现图像lena.png的两层小波分解,观察分解系数并重构,求重构图像误差值;3.观察图像IM1.BMP经小波分解系数的方向性,实现三层小波分解,分别把HL,LH,HH子带置零和重构,观察重构图像跟原始图像的差异。 最后求得误差均为零,我认为这可能是重构方法均是使用matlab自带函数的原因,使得重构图像与原图几乎一样。 实验三图像变换2 一,实验目的 1.熟悉有关图像增强的直方图方法; 2.掌握傅立叶变换和离散余弦变换等常用的正交变换函数; 二,实验内容 1.实现对图像IM2.BMP进行直方图均衡化,从而达到增强图像的目的,观察图像直方图的前后变化; 2.实现对图像IM3.BMP加入某种噪声(如椒盐噪声等),运用低通滤波和中值滤波分别进行图像平滑; 3.实现对图像IM4.BMP的同态增强: 对照明分量和反射分量进行同态滤波。 三,代码 clear; clc; %实现对图像IM2.BMP进行直方图均衡化,从而达到增强图像的目的, %观察图像直方图的前后变化 i=imread('IM2.BMP'); j=histeq(i); figure (1); subplot(221); imshow(i); title('原始图像'); subplot(222); imshow(j); title('均衡化图像'); subplot(223); imhist(i,64); title('原始直方图'); subplot(224); imhist(j,64); title('均衡化直方图'); %实现对图像IM3.BMP加入某种噪声(如椒盐噪声等), %运用低通滤波和中值滤波分别进行图像平滑 k=imread('IM3.BMP'); l=imnoise(k,'salt&pepper',0.02); figure (2); subplot(221); imshow(k); title('原始图像'); subplot(222); imshow(l); title('噪声图像'); p=medfilt2(l); subplot(223); imshow(p); title('中值滤波图像'); f=double(l); g=fftshift(fft2(f)); [N1,N2]=size(g); n=2;%butterworth滤波器的参数n=2 d0=50;%d0为截止频率(与原点的距离) n1=fix(N1/2); n2=fix(N2/2); fori=1: N1 forj=2: N2 d=sqrt((i-n1)^2+(j-n2)^2); h=1/(1+0.414*(d/d0)^2*n); result(i,j)=h*g(i,j); end end result=ifftshift(result); x2=ifft2(result); x3=uint8(real(x2)); subplot(224); imshow(x3); title('butterworth低通滤波图像'); %实现对图像IM4.BMP的同态增强: 对照明分量和反射分量进行同态滤波 %图像的动态范围压缩,图像的对比度增强,类似于高通滤波 clear; figure; I=imread('IM4.BMP'); I1=log(double(I)+1); I2=fft2(I1); n=3; d0=5; rh=0.1; rl=0.05; [row,col]=size(I2); fori=1: row forj=1: col d1(i,j)=sqrt(i^2+j^2); h(i,j)=rl+(rh/(1+(d0/d1(i,j)^(2*n)))); end end I3=I2.*h; I4=ifft2(I3); I5=exp(I4)-1; subplot(121); imshow(I); title('原始图像'); subplot(122); imshow(I5); title('同态滤波');
四,实验结果 五,结果分析 从运行结果可以看出,实验还是比较成功的。 但在加入椒盐噪声后进行高斯低通滤波的实验中,高斯低通滤波并不能完美的把噪声滤掉,图像中依然存在噪声,虽然变得不明显了。 我想可能是算子取得不好,导致了高斯低通滤波的失败。
实验四图像处理 一、实验目的 1.掌握图像分割中的四叉树区域分割与合并法; 2.掌握图像分割中的阈值分割法; 3.了解图像纹理分析和特征提取方法; 4.了解图像目标识别方法及其应用; 二、实验内容 1.使用四叉树(quadtree)的方法,找出图像IM5.BMP中物体的轮廓; 2.选择一个合适的初始阈值,将图像IM5.BMP分为两个区域; 3.选作题目: 选择合适的位置算子,计算出图像的共生矩阵,然后计算熵和能量来 描述纹理特征; 4.选作实验五特征提取 一、实验目的 1.了解图像纹理分析和特征提取方法; 二、实验内容 1.选择合适的位置算子,计算出图像的共生矩阵,然后计算熵和能量来描述纹理特征; 题目: 汽车牌照定位与字符识别。 三,代码 %使用四叉树(quadtree)的方法,找出图像IM5.BMP中物体的轮廓 h=imread('L8_2.BMP'); s=qtdecomp(h,0.2); figure (1); subplot(221); imshow(full(s)); title('参数为0.2'); s=qtdecomp(h,0.4); subplot(222); imshow(full(s)); title('参数为0.4'); s=qtdecomp(h,0.6); subplot(223); imshow(full(s)); title('参数为0.6'); s=qtdecomp(h,0.8); subplot(224); imshow(full(s)); title('参数为0.8'); %% %选择一个合适的初始阈值,将图像IM5.BMP分为两个区域 h=imread('L8_2.BMP'); h1=im2bw(h,40/255); h2=im2bw(h,100/255); h3=im2bw(h,150/255); h4=im2bw(h,180/255); figure (2); subplot(221); imshow(h); title('原图像'); subplot(222); imshow(h2); title('t=100'); subplot(223); imshow(h3); title('t=150'); subplot(224); imshow(h4); title('t=180'); 四,实验结果 五,结果分析 通过上图可以看出,实验还是比较成功的,在进行使用四叉树进行轮廓分析和阈值分割图像时,我分别使用了不同的参数来进行实验,得到的效果是完全不同的。 实验五特征提取 一、实验目的 1.了解图像纹理分析和特征提取方法; 二、实验内容 1.选择合适的位置算子,计算出图像的共生矩阵,然后计算熵和能量来描述纹理特征; 三,代码 clc; clear; [I,M]=imread('L8_2.BMP'); %imhist(I); imshow(I,M); glcm=graycomatrix(I,'Offset',[060],'NumLevels',8); energy=graycoprops(glcm,'energy'); entropy=0; [row,col]=size(glcm); fori=1: row forj=1: col entropy=entropy+glcm(i,j)*log10(glcm(i,j)); end end %display(glcm); display(energy); display(entropy); 四,实验结果 五,结果分析 给定不不同的向量和灰度压缩成不同个数会得到不同不同的值,原因是没有对图像进行归一化,导致有多值。 |
CopyRight 2018-2019 实验室设备网 版权所有 |