【实验一 MATLAB图像简单操作函数的应用】

一、实验目的

  1. 了解 MATLAB图像处理工具箱函数中的基本功能及操作方法。
  2. 掌握MATLAB中图像读写和显示函数的使用方法。
  3. 掌握如何利用MATLAB函数获取图像大小、颜色、高度、宽度等信息。
  4. 熟悉常用的图像类型的相互转换。

二、实验要求

  1. 实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。
  2. 实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。
  3. 实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码和实验结果,实验小结,回答问题。

三、实验内容(每一个内容编写一个*.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.注意事项

实验中需要用到的图片要先准备好放到项目中去

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值