数字图像处理-实验一 (验证性)Matlab中图像简单操作函数的应用

一、实验目的

1.了解 Matlab图像处理工具箱函数中的基本功能及操作方法;

2.掌握Matlab中图像读写和显示函数的使用方法;

3.掌握如何利用MATLAB函数获取图像大小、颜色、高度、宽度等信息。

4.掌握 Matlab 支持的图像的显示方法(灰度、索引、二值、彩色等);

5.熟悉常用的图像文件格式的相互转换。

二、实验要求

1.实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。

2.实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。

3.实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码,实验小结,回答问题。

三、实验内容与步骤

1.图像读写

(1)利用imread()函数分别读入图像trees.tif和ngc6543a.jpg,存入两个数组中,用“whos”命令获取图像的基本信息。

代码:

clear
[I1 map]= imread('trees.tif');   %I1为258x350矩阵 类型为uint8,索引图像
I2 = imread('ngc6543a.jpg');   %I2为650x600x3矩阵 类型为uint8,真彩色图像
whos I1 I2   
%whos 按字母顺序列出当前活动工作区中的所有变量的名称、大小和类型。
%whos ___ var1 ... varN 只列出指定的变量。此语法与先前语法中的任何参数结合使用。

运行结果:

(2)利用imwrite()函数将图像trees.tif压缩,将其保存为一幅压缩了像素的jpg文件, 图像名为为trees1.jpg;

代码:

clear

[I map] = imread('trees.tif');   % %I为258x350矩阵类型为uint8,1738KB

imwrite(I,map,'trees1.jpg');   % trees1.jpg保存于当前工作路径下,26KB

运行结果:

生成trees1.jpg

(3)命令窗口利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息。

代码:

imfinfo('trees1.jpg')

运行结果:

2.图像的显示和格式转换

(4)在4个不同的图像窗口中显示任意5幅不同图像类型(二值、索引、灰度、真彩色)的图像。

代码:

clear
figure(1);
BW=imread('blobs.png');  %二值图象
imshow(BW);
figure(2);
[X map]=imread('trees.tif');  %索引图像
imshow(X,map);
figure(3);
RGB=imread('onion.png');  %真彩色图象
imshow(RGB);
figure(4);
I=imread('cameraman.jpg');  %灰度图象
imshow(I);

运行结果:

 (5)分别用imread和load命令读入两幅不同的图像,并排显示在同一图像窗口。

代码:

clear
load trees.mat
subplot(1,2,1);
subimage(X,map);
title('trees.mat')
[X2 map2]=imread('forest.tif');
subplot(1,2,2);
subimage(X2,map2);
title('forest.tif')

运行结果:

(6)利用imshow()函数来显示图像trees.tif,要求先转化为rgb图像,分别显示每个通道,然后合并再显示)

代码:

%% RGB图像通道分离
clear
[X,cmap] = imread('trees.tif');
RGB = ind2rgb(X,cmap);
R = RGB(:,:,1);
G = RGB(:,:,2);
B = RGB(:,:,3);
subplot(2,2,1),imshow(R)
subplot(2,2,2),imshow(G)
subplot(2,2,3),imshow(B)
subplot(2,2,4),imshow(RGB)

%% RGB图像各通道合并
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;
imshow(I)

运行结果:

(7)用rgb2gray()将彩色图像trees.tif转化为灰度图像,并且用imshow显示出来观察图像的特征。

代码:

% 方法1 先将trees.tif转换成RGB图像,再使用rgb2gray()转化为灰度图像
[X,cmap] = imread('trees.tif');
RGB = ind2rgb(X,cmap);
gray = rgb2gray(RGB);
imshow(gray)

%方法2 读取具有 RGB 颜色图的索引图像,然后将颜色图转换为灰度。
[X,cmap] = imread('trees.tif');
newcmap = rgb2gray(cmap);
imshow(X,newcmap)

运行结果:

(8)用im2bw()将一幅灰度图像camema.jpg转化为二值图像,并且用imshow显示出来观察图像的特征。

代码:

%% 方法1
I = imread('cameraman.jpg');
level = graythresh(I)    % 计算亮度阈值
BW1 = im2bw(I,level);
subplot(1,2,1),imshow(I)
subplot(1,2,2),imshow(BW1)

%%level =
    0.3451

运行结果:

(9)用rgb2ind()将彩色图像onion.png转化为索引图像,用imshow显示出来,并读取出两种图像的数据,观察图像的特征。

代码:

clear
RGB = imread('onion.png');
[ind,map] = rgb2ind(RGB,256);
imshow(RGB)
figure,imshow(ind,map)

运行结果:

(10)显示多帧图像。首先用随机矩阵生成一个27帧图像,再读入并显示多帧图像,单独显示第6、10、20帧图像。

代码:

clear
mri=uint8(zeros(128,128,1,27)); % 27 帧文件 mri.tif 初始化
for frame=1:27
    [mri(:,:,:,frame),map]=imread('mri.tif',frame); % 读入每一帧
end
imshow(mri(:,:,:,3),map); % 显示第 3 帧
figure,imshow(mri(:,:,:,6),map); % 显示第 6 帧
figure,imshow(mri(:,:,:,10),map); % 显示第 10 帧
figure,imshow(mri(:,:,:,20),map); % 显示第 20 帧

运行结果:

(11)制作并显示一个动态图。

代码:

clear
load mri.mat
figure(1)
montage(D,map)
mov = immovie(D,map);
movie(mov)

运行结果:

四、思考题

1.简述 Matlab 软件的特点。

答:(1)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

(2)具有完备的图形处理功能,实现计算结果和编程的可视化;

(3)友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

(4)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

2. Matlab软件可以支持哪些图像文件格式?

答:JPEG、BMP 、PCX、TIFF 、PNG 、GIF 、HDF 、ICO 、CUR 、XWD、RAS 、PBM 、PGM 、PPM等

3.说明函数imread() 的用途格式以及各种格式所得到图像的性质。

答:函数imread()是一个常用的图像处理函数,用于从文件中读取图像数据。它的主要用途是将图像文件加载到内存中进行后续的处理和分析。
imread()函数可以读取多种图像格式的文件,常见的格式包括:
(1)JPEG(.jpg、.jpeg):这是一种常见的压缩格式,适用于存储照片和彩色图像。读取JPEG格式图像时,imread()函数会返回3通道的彩色图像。
(2)PNG(.png):这是一种无损压缩格式,适用于存储透明图像和图标等。读取PNG格式图像时,imread()函数会返回3或4通道的彩色图像,其中第四个通道表示透明度。
(3)BMP(.bmp):这是一种无压缩的位图格式,适用于存储简单的图像。读取BMP格式图像时,imread()函数会返回1通道的灰度图像或者3通道的彩色图像。
(4)GIF(.gif):这是一种支持动画的格式,但imread()函数只能读取其中的一帧静态图像。读取GIF格式图像时,imread()函数会返回3通道的彩色图像。
(5)TIFF(.tif、.tiff):这是一种高质量的图像格式,适用于存储印刷品和医学图像等。读取TIFF格式图像时,imread()函数会根据具体情况返回1或3通道的灰度或彩色图像。
通过imread()函数读取图像后,可以进一步使用其他函数对图像进行处理,例如调整大小、旋转、裁剪、滤波等。具体处理方法和性质取决于所使用的图像处理库和算法。

4.为什么用I = imread(‘lena.bmp’) 命令得到的图像I 不可以进行算术运算?

答:因为图像I产生的矩阵的数据类型是无符号位8位,直接计算会溢出,而matlab默认计算针对的是double类型的数据。

5.如何显示 RGB 图像的某一个颜色分量?

答:imshow(I(:,:,x))其中I代表读出的图片,x有1,2,3分别指R,G,B三通道。

6.如何显示多帧图像的所有帧?如何根据多帧图像创建电影片段?

答:(1)用imshow(mri(:,:,:,frame),map)即可显示多帧图像的所有帧。

(2)用mov=immovie(mri,map);implay(mov)即可根据多帧图像创建电影片段。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值