数字图像处理实验一二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一数字图像的基本处理
预习要求:
1、熟悉MATLAB的使用环境;
2、熟悉数字图像的矩阵表示形式;
3、掌握二维离散傅里叶变换。
一、实验目的
掌握MATLAB中数字图像的存储、读取和显示
掌握MATLAB中的基本数据、图像类型,以及类型之间的相互转换
掌握二维离散傅里叶变换的常用函数
二、实验原理
1、MATLAB中数字图像的存储、读取和显示
读取图像通过imread来执行,语法为:
f=imread(‘filename’);
其中,filename参数表示输入的文件名,包括路径和文件名,函数返回值f是一个图像数组。MATLAB支持的图像类型有TIFF、JPEG、GIF、BMP、PNG和XWD等。
保存图像使用函数imwrite来执行,语法有以下几种:
imwrite(f, ’filename’); %默认方式,文件格式由后缀名来指定
imwrite(f, ’filename’, ’tif’); %由第三个参数指定保存文件的格式
imwrite(f, ‘filename.jpg’ , ‘quality’, q); %保存JPEG文件,指定JPEG的压缩质量显示图像使用imshow来执行,基本语法为:
imshow(f, G); %f是图像数组,G是该图像显示的灰度级数,默认灰度级数256
imshow(f, [low high]); %所有大于high的显示为白色,小于low的显示为黑色
imshow(f, [ ]); %low设置为f的最小值,high设置为f的最大值当用imshow显示另一幅图像g时,MATLAB会在屏幕上用新图替换旧图像,为保持第一幅图像同事显示第二幅图像,可以使用figure函数:figure, imshow( g )
2、MATLAB中的数据类型级相互转换
MATLAB中常用的数据类型有:double, uint8, uint16, uint32, int8, int16, int32, single, char, logical等。支持的图像类型有亮度图像、二值图像、索引图像和RGB图像。
表1 常用的图像格式
格式名称描述可识别的扩展符
TIFF 加标识的图像文件格式.tif, .tiff
JPEG 联合图像专家组.jpg, .jpeg
GIF 图形交换格式.gif
BMP Windows位图.bmp
PNG 可移植的网络图形.png
常用的图像类型转换函数:
g=im2uint8(f); %图像转换到uint8类型
g=im2gray(f, [ fmin, fmax ]); %图像转换到double类型,值在[0,1]区间,规定fmin,fmax 是为了在转换时将f中小于fmin的值在g中转换为0,大于fmax的值转换为1。图像的
信息可以通过whos f 显示。
3、二维离散傅里叶变换
MATLAB中,傅里叶变换采用快速傅里叶变换函数来实现,基本语法:
F=fft2( f );
其中,f是输入图像,F是傅里叶变换结果,默认f与F的尺寸相同。
傅里叶的逆变换函数为
ifft2( F );
图像处理中,逆变换一般只取实部,f=real( ifft2( F ) );
傅里叶频谱可以用以下函数来计算:
S=abs(F);
由于傅里叶变换的周期性问题,在频域内的一个周期内只能观察到紧邻的4个1/4周期的频谱,不能观察到一个完整的周期。为了方便显示,可将傅里叶变换后的原点移动到频谱中心,相应的函数为:FC=fftshift( F ); 逆操作为:F=ifftshift( FC );
对数变换函数常用来扩展低灰度范围,压缩高灰度范围,这样可以使低灰度值的图像细节更清楚。对数变换函数采用:g( x, y )=log(f( x, y)+1);
三、实验内容
1、练习图像的存储与显示,以及图像的压缩存储(参考程序1);
2、补填程序2的空白处,完成程序的编译,输出结果。
四、实验方法及程序
程序1:
%***保存图像***
f=imread('D:/Matlab/work/kid.jpg');
imshow(f);
%***以质量参数为25%保存图像***
imwrite(f,'kid.jpg','quality',25);
g25=imread('kid.jpg');
figure,imshow(g25,[ ]);
%***显示压缩文件的相关信息***
imfinfo kid.jpg
%***由imfinfo产生的信息附加到形式为K域的结构变量中***
K=imfinfo('kid.jpg');
image_bytes=K.Width*K.Height*K.BitDepth/8;%压缩前图像文件的大小
compresser_bytes=K.FileSize; %压缩后图像问价的大小
compress_ratio=image_bytes/compressed_bytes %压缩率
程序2:对一亮块图像进行傅里叶变换,中心化其频谱,并进行对数变换。
%产生亮块图像f(m,n)
clear all
close all;
col=128;
f=zeros(col);
for i=29:98,
for j=57:70
f(i,j)=255;
end
end
figure(1);
subplot(1,3,1);
imagesc(f,[0 255]);
axis image;
colormap(gray);
xlabel('(a)原图像');
%对原图像进行傅里叶变换
F1=?????;%对f 图像进行傅里叶变换,并使原点移到频谱中心figure(1);
subplot(1,3,2);
imshow(abs(F1),[]);
xlabel('(b)图像的傅里叶谱');
%对F1进行对数变换
F2=?????;
figure(1);
subplot(1,3,3);
imshow(F2,[]);
xlabel('(c)傅里叶谱的对数变换');
五、实验结果与分析
程序的运行及测试结果(粘贴截图);
实验总结及心得。