end
subplot(2,3,4)
imshow(uint8(img2),[0,1]);title('2级图像')
【思考题】 1、数字图像在MATLAB中以数据矩阵方式表达,如何通过MATLAB语句截取图像的一部分矩形区域进行分析处理。 答:由于数字图像在MATLAB中以数据矩阵方式表达,因此可用截取矩阵的方式来实现对图像的截取,如原图像大小为A(256,256),则A(1:100,1:200)则实现了对图像截取(1-100行,1-200列)进行读取。 2、图像的数字化工作包括哪两个方面?
答:图像的数字化工作包括采样和量化两个方面,采样指的是空间域的离散化,量化指的是灰度(亮度)的离散化。
3、图像工程包含哪3个层次?你最感兴趣的是图像处理哪个方面的内容? 答;图像工程包含由低到高图像处理,图像分析,图像理解3个层次。
实验2 数字图像的MATLAB基本操作(2学时)
【实验内容】
一、图像读取,显示,保存
1、利用imread( )函数从内存中读取一幅绘有花朵的tif图像,假设其名为flower.tif,存入一个数组I中;
利用whos 命令提取该读入图像flower.tif的基本信息; 利用imshow()函数来显示这幅图像,并添加颜色条;
利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息; 利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,放在桌面上,并显示出来,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。 程序段及显示结果如下:
(1)I=imread('flower.tif'); Imshow(I)
(2)whos
Name Size Bytes Class I 296x394x3 349872 uint8 (3)imfinfo('flower.tif') ans =
Filename: 'flower.tif'
FileModDate: '09-十月-2013 10:35:38' FileSize: 48384 Format: 'jpg' FormatVersion: '' Width: 394 Height: 296 BitDepth: 24
ColorType: 'truecolor' FormatSignature: '' NumberOfSamples: 3
CodingMethod: 'Huffman' CodingProcess: 'Sequential' Comment: {}
(4)imwrite(I,'flower.jpg','quality',10);
(5)imwrite(I,'flower.bmp','quality',10);
Attributes
2、用函数imread()读入图像forest.tif 和trees.jpg,使用imshow命令在同一图形窗中显示两者;再打开另一个图形窗,利用subimage函数实现在同一个图形窗口中显示该两幅图像,对比前后两者的显示效果,给出解释。 程序如下:
I1=imread(‘forest.tif’); I2=imread(‘trees.jpg’) figure,
subplot(2,1,1),imshow(I1); subplot(2,1,2),imshow(I2); figure,
subplot(2,1,1),subimage(I1); sublot(2,1,2),subimage(I2);
对比前后两者的显示效果,imshow显示的图片有问题,而subimage则显示正常。原因:subimage可以在一个界面上同时显示几幅不同调色板的图像 3、总结imshow命令的使用方式,并给出简单实例语句。(如何显示索引图像,RGB图像,二进制图像,非图像矩阵等) 总结如下: 1、imshow(I)%显示图像最基本命令,imshow(I,[low,high])%按照最大灰度范围显示图像
2、imshow(I,map)%按照调色板map,显示索引图像 3、imshow(I,N)%显示具有N个灰度级的灰度图像 4、imshow(BW)%显示二值图像BW 可参考教材(余成波)3.3节内容 二、图像类型转换
1、编写一个m文件实现如下功能:读入任意一幅RGB图像,选择合适的函数将其变换为灰度图像和二值图像,并在同一个窗口内分成三个子区域来分别显示RGB图像,灰度图像,二值图像。
程序及显示结果如下: RGB=imread('xianhua.jpg'); Y=rgb2gray(RGB); BW=im2bw(RGB,0.4);
subplot(1,3,1),imshow(RGB); subplot(1,3,2),imshow(Y); subplot(1,3,3),imshow(B);
三、图像运算 1、线性点运算
(1)、给出如下程序
rice=imread('rice.png'); I=double(rice); A=0.43; B=60; J=I*A+B;
rice2=uint8(J);
subplot(1,2,1),imshow(rice); subplot(1,2,2),imshow(rice2);
运行该程序,观察显示效果,修改以上线性点运算程序,改变A和B值,分析A的值大于1和小于1时,B的值正负时,对原图像的影响。 参考程序如下: 程序如下:
(1)rice=imread('rice.png'); (2)rice=imread('rice.png'); I=double(rice); J=60;
J=I*0.43+60; subplot(1,2,1),imshow(rice); rice2=uint8(J) ; subplot(1,2,2),imshow(rice2); subplot(1,2,1),imshow(rice);
subplot(1,2,2),imshow(rice2);

