数字图像处理
实验一 MATLAB数字图像处理初步
一、显示图像
1.利用imread( )函数读取一幅图像,假设其名为lily.tif,存入一个数组中; 2.利用whos 命令提取该读入图像flower.tif的基本信息; 3.利用imshow()函数来显示这幅图像; 实验结果如下图:
源代码: >>I=imread('lily.tif') >> whos I >> imshow(I)
二、压缩图像
4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;
5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。
6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。 7.用imread()读入图像Sunset.jpg和Winter.jpg; 8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;
9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。 其中9的实验结果如下图:
源代码:
4~6(接上面两个) >>I=imread('lily.tif') >> imfinfo 'lily.tif';
>> imwrite(I,'lily.jpg','quality',20); >> imwrite(I,'lily.bmp'); 7~9 >>I=imread('Sunset.jpg'); >>J=imread('Winter.jpg') >>imfinfo 'Sunset.jpg'
>> imfinfo 'Winter.jpg'
>>figure(1),imshow('Sunset.jpg') >>figure(2),imshow('Winter.jpg')
三、二值化图像
10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。 实验结果如下图:
源代码:
>> I=imread('lily.tif') >>gg=im2bw(I,0.4); F>>igure, imshow(gg)
原始图像:
四、思考题
(1) 简述MatLab软件的特点。
答:①高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来; ②具有完备的图形处理功能,实现计算结果和编程的可视化;
③友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握; ④功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
(2) MatLab软件可以支持哪些图像文件格式?
JPEG、JPEG、PCX、TIFF、PNG、GIF、HDF、XWD等等。 (3) 说明函数imread 的用途格式以及各种格式所得到图像的性质。
imread函数用于读入各种图像文件,其一般的用法为
[X,MAP]=imread(‘filename’,‘fmt’)
其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。
(4) 为什么用I = imread(‘lena.bmp’) 命令得到的图像I 不可以进行算术运算?
Matlab系统默认的算术运算时针对双精度类型(double)的数据,而上述命令产生的矩阵的数据类型是无符号8位,直接 进行运算会溢出。
实验二 图像的代数运算
一.图像的加法运算
在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。imadd函数的调用格式如下:
Z = imadd(X,Y)
其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。 实验结果如下图:
源代码:
I = imread(‘Sunset.jpg’); J = imread(‘Bluehills.jpg’); K = imadd(I,J);
imshow(K);(两幅图尺寸大小一致) 原始图像:
给图像的每一个像素加上一个常数可以使图像的亮度增加。效果如下:
源代码
>>RGB = imread(‘cameraman.tif’); >>RGB2 = imadd(RGB,50); >>subplot(1,2,1);imshow(RGB); >>subplot(1,2,2);imshow(RGB2);
二、图像的减法运算
在MATLAB中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。imsubtract函数的调用格式如下:
Z = imsubtract(X,Y); 其中,Z是X-Y操作的结果。 实验结果如下图:
源代码
>>rice = imread('cameraman.tif')
>>background = imopen(rice, strel('disk',15)) >>rice2 = imsubtract(rice, background) >>subplot(1,2,1);imshow(rice); >>subplot(1,2,2);imshow(rice2);
三、图像的乘法运算
在MATLAB中,使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。immulitply函数的调用格式如下:
Z = immulitply(X,Y) 其中,Z=X*Y。 实验结果如下图: