您好,欢迎访问三七文档
数字图像处理实验报告1-图像变换学生姓名:学号:实验时间:地点:指导教师:实验名称:图像变换试验目的:(1)基于MATLAB的实验验证。通过在MATLAB环境中相关函数的调用,验证图像变换和图像频域处理效果,增强感性认识。(2)基于C语言的基本图像处理。通过编写C++程序,进一步理解算法的实现过程,为在实际应用软件中的应用打下基础。实验内容:(1)MATLAB函数的直接调用通过在MATLAB环境中相关函数的调用,验证傅立叶变换、DCT变换和小波变换的结果,并通过反变换恢复原图像。①对’flower.tif’图片进行傅立叶变换,绘制原始图像和变换后的频谱图。②对’flower.tif’图片进行DCT变换,绘制原始图像和变换后的频谱图。③对’flower.tif’图片进行一层小波变换和反变换,绘制原始图像和重建后的图像,以及小波分解后的4个子图注意:可以采用colormap(‘gray’)来设置灰色图像的绘制。(2)提升小波变换实验验证图像的提升小波变换。编写小波变换程序,实现图像的变换和反变换。完成:图像的读取;提升小波变换、逆变换原图像和重建图像的显示、比较。(3)编写VC++程序,读取flower.yuv的图像帧,将图彩色图像变为灰度图像,然后对图像像素做线性变换g(i)=af(i)+b。i为任意像素序号,a,b为实数。将a,b取不同值,显示变换前、后的画面。例如a=-1,b=255;a=0.5,b=128等。实验记录与结果分析:(1)①第一步:对于第一个实验先产生一个tif格式的灰度图像,在这里采用微软window系统中的图像并进行灰度图像化来产生。(程序详见附录1.1)结果如下:灰度图像是原图像的一个截取,防止像素太大处理速度变慢。(毕竟这是一次试验)原图:灰度图:②第二步:对’flower.tif’图片进行傅立叶变换,绘制原始图像和变换后的频谱图。然后再将傅里叶变换后的频谱搬移,最后将三张图像画在一张图像中。(程序代码详见附录1.2)③第三步:对’flower.tif’图片进行DCT变换,绘制原始图像和变换后的频谱图。并将两张图像画在一幅图当中。(程序详见附录1.3)由此可见高频分量全都集中在频谱的左上角,低频分量都集中在频谱图的右下角,这样便于图像的压缩。④第四步:对’flower.tif’图片进行一层小波变换和反变换,绘制原始图像和重建后的图像,以及小波分解后的4个子图,并画出图像。(程序详细代码见附录1.4)原图像:小波逆变换后的图像:对小波变换后的图像进行量化变化编码后的各频率分量如下(左)图:将量化编码后的图像显示在一张图上有上(右)图由此可见图像被较好地压缩。(2)提升小波变换实验验证图像的提升小波变换。实现图像的变换和反变换。通过分裂、预测、更新三个步骤实现小波的正变换与反变换。(程序详见附录2)正变换:反变换:(3)编写VC++程序,读取flower.yuv的图像帧,将图彩色图像变为灰度图像,然后对图像像素做线性变换g(i)=255-f(i)。(试验程序详见附录3)处理前的图像:处理后的图像:由此可见对图像进行了反色的线性变换。实验总结本次实验可谓是收货颇多,我不仅学会了用matlab简单的处理数字图像,还会用c语言创建exe软件了并且能自己做一些简单的图像处理并把它做成想要的软件,如果再加以学习,就可以成功的编出像Photoshop一样的软件,在这高速发展的社会能掌握这样的技能还是非常不错的。附录(源程序等)程序1.1:I=imread('E:\电力\数字图像处理\实验\实验一\flower.jpg');%从相应文件夹读出要使用的图片%T=rgb2gray(I);%将该图片变换成灰度值图像%imshow(T)%显示该图像并保存%程序1.2:I=imread('E:\电力\数字图像处理\实验\实验一\flower.tif');%从相应文件夹读出要使用的图片%F1=fft2(I);%进行二维快速傅里叶变换F2=fftshift(F1);%将中心频谱搬移至图像中间%======画图在一种图形中显示出来=====%subplot(131)imshow(I);subplot(132)imshow(log(abs(F1)/3000+1));subplot(133)imshow(log(abs(F2)/3000+1));程序1.3:J=imread('E:\电力\数字图像处理\实验\实验一\flower.tif');I=rgb2gray(J);%从相应文件夹读出要使用的图片%DC=dct2(I);%进行DCT变换%====画图显示====%subplot(121)imshow(I);subplot(122)imshow(log(abs(DC)/25+1));程序1.4:%从相应文件夹读出要使用的图片%i=imread('E:\电力\数字图像处理\实验\实验一\flower.tif');I=rgb2gray(i);%进行小波分解[cA1,cH1,cV1,cD1]=dwt2(I,'bior3.7');%对小波分解的各个图像进行重构A1=upcoef2('a',cA1,'bior3.7',1);H1=upcoef2('h',cH1,'bior3.7',1);V1=upcoef2('v',cV1,'bior3.7',1);D1=upcoef2('d',cD1,'bior3.7',1);%对重构的图像进行量化编码figure;imshow(I);nbcol=size(I,1);cod_I=wcodemat(I,nbcol);cod_cA1=wcodemat(cA1,nbcol);cod_cH1=wcodemat(cH1,nbcol);cod_cV1=wcodemat(cV1,nbcol);cod_cD1=wcodemat(cD1,nbcol);%对于重构图像画出其图形figure;subplot(221);imshow(cod_cA1/120);title('近似图像(平滑图像)');subplot(222);imshow(cod_cH1/120);title('水平细节图像');subplot(223);imshow(cod_cV1/120);title('垂直细节图像');subplot(224);imshow(cod_cD1/120);title('对角线细节图像');%进行小波逆变换,与原图进行比较J=idwt2(A1,H1,V1,D1,'bior3.7');J1=imresize(J,0.451);%显示器图像figure;imshow(J1/120);dec2d=[cod_cA1,cod_cH1;cod_cV1,cod_cD1];dec2d_1=imresize(dec2d,2);figure;imshow(dec2d_1/120);程序2%图像的提升小波变换。编写小波变换程序,实现图像的变换和反变换。x=imread('flower.tif');g=x;[hp,lp]=size(x);%获取图像矩阵行列尺寸hc=hp/2;%因为取奇偶变量,所以图像行尺寸变为原来一半lc=lp/2;%因为取奇偶变量,所以图像列尺寸变为原来一半%以下将图像分为奇偶列,进行行变换%将完整的图像矩阵列分为奇数位和偶数位子集forn=1:lcy1=n*2-1;%y1为图像的奇数子集所在图像矩阵的位置Y1(:,n)=x(:,y1);%将图像奇数子集赋值给Y1Y2(:,n)=x(:,y1+1);%将图像偶数数子集赋值给Y2end%显示图像的奇偶子集%调用imshow函数而不是image函数,因为imshow函数会自动进行图像校正,方便查看figure(1);subplot(2,2,1);imshow(x,[]);title('原始图像')subplot(2,2,3);imshow(Y1,[]);title('原始图像图像的列奇数分量');subplot(2,2,4);imshow(Y2,[]);title('原始图像图像的列偶数分量');%进行提升小波变换forn=1:lc;Y3(:,n)=Y2(:,n)-Y1(:,n);%将图像的奇偶分量的预测残差放入矩阵Y3内endforn=1:lcK=Y3(:,n)/2-mod(Y3(:,n)/2,1);%对Y3(:,n)/2取整Y4(:,n)=Y1(:,n)+K;end%显示提升小波变换结果figure(2);subplot(1,2,1);imshow(Y4,[]);title('原始图像图像的列提升小波变换后图像')subplot(1,2,2);imshow(Y3,[]);title('原始图像图像的列奇偶分量的预测残差');%奇偶列,进行行变换结束%以下将上一步变换好的图像分为奇偶行,进行列变换x=Y4;%上一步变换好的图像赋值给x%将以变换图像的矩阵行分为奇数位和偶数位子集forn=1:hcx1=n*2-1;%y1为以变换图像的奇数子集所在图像矩阵的位置X1(n,:)=x(x1,:);%将以变换图像奇数子集赋值给Y1X2(n,:)=x(x1+1,:);%将以变换图像偶数数子集赋值给Y2end%显示以变换图像的奇偶子集figure(3);subplot(1,2,1);imshow(X1,[]);title('以变换图像的奇数分量');subplot(1,2,2);imshow(X2,[]);%将图像转换为灰度图像title('以变换图像的偶数分量');%对以变换图像进行提升小波变换forn=1:hc;X3(n,:)=X2(n,:)-X1(n,:);%将以变换图像的奇偶分量的预测残差放入矩阵Y3内endforn=1:hcK1=X3(n,:)/2-mod(X3(n,:)/2,1);%对Y3(:,n)/2取整,获取图像的更新算子X4(n,:)=X1(n,:)+K1;end%显示对以变换图像提升小波变换结果%调用imshow函数而不是image函数,因为imshow函数会自动进行图像校正,方便查看figure(4);subplot(1,2,1);imshow(X4,[]);title('对以变换图像提升小波变换后的图像')subplot(1,2,2);imshow(X3,[]);title('以变换图像的奇偶分量的预测残差');%奇偶行,进行列变换结束%完整的提升小波变换结束imwrite(X4,'lena_1.tif');%将变换后的的图像存入文件,供反变换使用%列逆变换x=imread('lena_1.tif');y=x;[hp,lp]=size(x);hc=hp/2;lc=lp/2;forn=1:hpyhe(n,:)=y(n,:)-K1;endforn=1:hpyho(n,:)=yhe(n,:)+X3(n,:);endforn=1:hp;yhe1(2*n+1,:)=yhe(n,:);yho1(2*n,:)=yho(n,:);endforn=1:512y(n,:)=yhe1(n,:)+yho1(n,:);endforn=1:lp;yle(:,n)=y(:,n)-K;endforn=1:lp;ylo(:,n)=yle(:,n)+Y3(:,n);endforn=1:lp;yle1(:,2*n+1)=yle(:,n);ylo1(:,2*n)=ylo(:,n);endforn=1:512y_end(:,n)=yle1(:,n)+ylo1(:,n);end%y=uint8(y);figure(8)subplot(1,2,1);imshow(g,[]);title('原图');subplot(1,2,2);imshow(y_end,[]);title('逆变换后图');程序3://xfsdDlg.cpp:implementationfile//#includestdafx.h#includexfsd.h#includexfsdDlg.h#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;
本文标题:图像变换实验
链接地址:https://www.777doc.com/doc-2558446 .html