一、实验目的
- 了解 MATLAB图像处理工具箱函数中的基本功能及操作方法。
- 掌握MATLAB中图像读写和显示函数的使用方法。
- 掌握如何利用MATLAB函数获取图像大小、颜色、高度、宽度等信息。
- 熟悉常用的图像类型的相互转换。
二、实验要求
- 实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。
- 实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。
- 实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码和实验结果,实验小结,回答问题。
三、实验内容(每一个内容编写一个*.m文件)
1.利用imread()函数分别读入图像trees.tif和ngc6543a.jpg,存入两个数组中,用“whos”命令获取图像的基本信息。
% 读入图像 trees.tif
trees_img = imread('trees.tif');
% 使用 whos 命令获取图像的基本信息
whos trees_img
% 读入图像 ngc6543a.jpg
ngc_img = imread('ngc6543a.jpg');
% 使用 whos 命令获取图像的基本信息
whos ngc_img
2.利用imwrite()函数将图像trees.tif压缩,将其保存为一幅压缩了像素的jpg文件, 图像名为为trees1.jpg;
% 读入图像 trees.tif
trees_img = imread('trees.tif');
% 压缩图像并保存为 jpg 文件
imwrite(trees_img, 'trees1.jpg', 'jpg', 'Quality', 50);
3.命令窗口利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息。
% 使用 imfinfo 函数获取图像文件的详细信息
info_trees1 = imfinfo('trees1.jpg');
% 显示获取到的详细信息
disp(info_trees1);
4.在4个不同的图像窗口中显示任意4幅不同图像类型(二值、索引、灰度、真彩色)的图像。
% 读入四幅不同类型的图像
binary_img = imread('blobs.png');
index_img = imread('trees.tif');
gray_img = imread('ngc6543a.jpg');
rgb_img = imread('onion.png');
% 显示四幅图像
subplot(2,2,1);
imshow(binary_img);
title('Binary Image');
subplot(2,2,2);
imshow(index_img);
title('Indexed Image');
subplot(2,2,3);
imshow(gray_img);
title('Grayscale Image');
subplot(2,2,4);
imshow(rgb_img);
title('Truecolor Image');
5.分别用imread和load命令读入两幅不同的图像,并排显示在同一图像窗口。
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图像,分别显示每个通道,然后合并再显示)
% 读入 trees.tif 图像
trees = imread('trees.tif');
% 将灰度图像转化为 RGB 彩色图像
trees_rgb = cat(3, trees, trees, trees);
% 显示红色通道
subplot(2,2,1);
imshow(trees_rgb(:,:,1));
title('Red Channel');
% 显示绿色通道
subplot(2,2,2);
imshow(trees_rgb(:,:,2));
title('Green Channel');
% 显示蓝色通道
subplot(2,2,3);
imshow(trees_rgb(:,:,3));
title('Blue Channel');
% 合并三个通道并显示
subplot(2,2,4);
imshow(trees_rgb);
title('Combined Image');
7.用rgb2gray()将一幅索引图像trees.tif转化为灰度图像,并且用imshow显示出来观察图像的特征。
% 读入索引图像 trees.tif
trees_indexed = imread('trees.tif');
% 将索引图像转化为灰度图像
trees_gray = im2gray(trees_indexed);
% 显示灰度图像
imshow(trees_gray);
title('Grayscale Image');
8.用im2bw()将一幅灰度图像camema.jpg转化为二值图像,并且用imshow显示出来观察图像的特征。
% 读入灰度图像 camema.jpg
camema_gray = imread('cameraman.jpg');
% 将灰度图像转化为二值图像
threshold = 0.5; % 设定阈值
camema_bw = im2bw(camema_gray, threshold);
% 显示二值图像
imshow(camema_bw);
title('Binary Image');
9.用rgb2ind()将真彩色图像onion.png转化为索引图像,用imshow显示出来,并读取出两种图像的数据,观察图像的特征。
% 读入真彩色图像 onion.png
onion_rgb = imread('onion.png');
% 将真彩色图像转化为索引图像
[onion_indexed, map] = rgb2ind(onion_rgb, 256);
% 显示索引图像
imshow(onion_indexed, map);
title('Indexed Image');
% 读取两种图像的数据并观察图像特征
whos onion_rgb onion_indexed map
10.读入并在同一窗口显示27帧索引图像阵列“mri.mat”,并在单独窗口显示第6、10、20帧图像。
% 读入 mri.mat 文件
load mri;
% 在同一窗口显示27帧索引图像阵列
figure;
montage(D, map);
title('All 27 Frames');
% 单独窗口显示第6、10、20帧图像
figure;
subplot(1,3,1);
imshow(D(:,:,:,6), map);
title('Frame 6');
subplot(1,3,2);
imshow(D(:,:,:,10), map);
title('Frame 10');
subplot(1,3,3);
imshow(D(:,:,:,20), map);
title('Frame 20');
11.制作并显示一个动态图。
% 创建一组随机矩阵
n = 100;
A = rand(n, n);
% 创建一个 figure
h = figure;
% 每个帧的绘制和保存
for k = 1:50
% 绘制当前帧
imagesc(A);
colorbar;
title(sprintf('Frame %d', k));
% 保存当前帧
M(k) = getframe(h);
% 在下一次迭代之前更新矩阵 A
A = A + randn(n, n);
end
% 播放动画
movie(M, 5);
四、问题与讨论
1.简述 MATLAB 软件的特点。
MATLAB 是一种高级技术计算语言和交互式环境,特点包括:强大的矩阵操作能力、内置大量工程和科学计算函数、可视化能力强大、支持面向对象编程、可扩展性强等。
2.MATLAB软件可以支持哪些图像文件格式?
MATLAB 软件可以支持常见的图像文件格式,包括 BMP、JPEG、PNG、TIFF、GIF 等,以及一些专有格式。
3.说明函数imread() 的用途格式以及各种格式所得到图像的性质。
函数 imread() 用于读取图像文件,格式为:
I = imread(filename)
其中 filename 是文件名,I 是输出的图像数组。不同格式的图像文件可能会导致不同的性质,比如灰度图像、RGB 彩色图像等。
4.为什么用I = imread(‘lena.bmp’) 命令得到的图像I 不可以进行算术运算?
使用 imread(‘lena.bmp’) 读取的图像 I 是一个 uint8 类型的数组,这意味着它存储的是 8 位的整数,而不是双精度浮点数。在 MATLAB 中,uint8 类型的数组不支持一般的矩阵算术运算,需要先将其转换为 double 类型才能进行算术运算。
5.如何显示 RGB 图像的某一个颜色分量?
要显示 RGB 图像的某一个颜色分量,可以通过以下方式实现:
显示红色分量:imshow(I(:,:,1))
显示绿色分量:imshow(I(:,:,2))
显示蓝色分量:imshow(I(:,:,3))
6.如何显示多帧图像的所有帧?如何根据多帧图像创建电影片段?
要显示多帧图像的所有帧,可以使用 imshow() 函数逐一显示每一帧;要根据多帧图像创建电影片段,可以使用 VideoWriter() 创建视频对象,然后逐帧写入。具体操作可以参考 MATLAB 文档中关于视频处理的部分。
五、实验材料
1.实验软件
MATLAB R2020b,其他版本都可以
2.注意事项
实验中需要用到的图片要先准备好放到项目中去