实验目的
1、掌握读、写图像的基本方法。
2、掌握 MATLAB 语言中图像数据与信息的读取方法。
3、掌握数字图像点运算方法。
4、掌握数字图像的代数运算与几何运算方法。
实验内容
使用 MATLAB 实现对数字图像的读取、显示、存储等操作,编写对数字图像进行点运算、直方图显示以及几何运算的程序,并分析图像的各种运算的作用。
实验步骤
1、熟悉 Matlab 语言中对图像数据读取,显示等基本函数:imread、imwrite、subplot、 figure、imshow、rgb2gray
- 使用 imread 函数读取 lena.jpg 图像文件,观察一下图像数据,了解一下数字图像在 MATLAB 中的处理就是处理一个矩阵。
- 将这个图像用 imshow 函数显示出来,尝试将图像的值减小 50,使用 figure 函数创建一个新的窗口,再将新的图像显示出来,观察图像颜色的变化。
- 使用 rgb2gray 函数将 lena.jpg 转换成灰度图像,记为变量 I_gray,并使用 imwrite 函数将灰度图像保存为‘lena_gray.jpg’
2、实现数字图像的线性运算、幂次变换
- 对灰度图像 I_gray 进行线性变换,分别使用 s=1.2r+1 和 s=0.3r+1 作为变换函数得到 变换后的图像,使用 subplot 以及 imshow 同时显示原图像以及变换后的图像,观察图像 灰度值的变化。
- 对灰度图像 I_gray 进行幂次变换,分别使用 s=r^1.05和 s=r^0.8作为变换函数得到变换后的图像,使用 subplot 以及 imshow 同时显示原图像以及变换后的图像,观察图像灰度值的变化。(注:MATLAB 中不能对 uint8 类型的数据计算非整数次幂,因此在进行幂次变换前需先使用 double 函数将数据类型转换为双精度类型,变换后再使用uint8函数转换为整数类型进行显示)。
3、绘制图像的灰度直方图 使用 imhist 函数绘制 I_gray 图像的灰度直方图,灰度级数目指定为 128,并使用 title 函数将直方图的标题命名为“lena 灰度直方图”。
4、实现数字图像的缩放、旋转、转置变换
- 使用 imresize 函数将 I_gray 图像的空间分辨率缩小为原来的 1/4,即长宽各缩小为 原来的 0.5 倍,并显示缩小后的图像。
- 使用 imrotate 函数将 I_gray 图像沿逆时针方向旋转 30 度,并显示旋转后的图像。
- 将 I_gray 图像进行转置,并显示转置后的图像。(注:对图像进行转置只需将表示图 像的矩阵进行转置操作即可。)
实验报告
按照实验内容完成各步骤,给出每个步骤的 MATLAB 程序语句以及结果截图。
实验步骤1和2
clear all
clc
close all
%1.1 imread实现‘lena.jpg'文件的读取
scr = imread('lena.jpg');
figure(1);
subplot(3,3,1);
imshow(scr);
%1.2将图像的值减少50
scr_brighter = scr-50;
subplot(3,3,2);
imshow(scr_brighter);
%1.3 把图像转换成灰度图
scr_gray = rgb2gray(scr);
subplot(3,3,3);
imshow(scr_gray);
%2.1 对图像进行线性变换
scr_gray_t1 = scr_gray*1.2+1;
subplot(3,3,4);
imshow(scr_gray_t1);
scr_gray_t2 = scr_gray*0.3+1;
subplot(3,3,5);
imshow(scr_gray_t2);
%2.2 对图像进行幂次变化
%变化前要将数据类型用double()变成双精度型
%变化后要变成uint8型,不然无法显示
scr_gray_copy = double(scr_gray);
scr_gray_t3 = uint8(scr_gray_copy.^1.05);
subplot(3,3,6);
imshow(scr_gray_t3);
scr_gray_t4 = uint8(scr_gray_copy.^0.8);
subplot(3,3,7);
imshow(scr_gray_t4);
效果:
实验步骤3
clear all
clc
close all
scr = imread('lena.jpg');
% rgb2gray()将图像转成灰度图
scr_gray = rgb2gray(scr);
imhist(scr_gray,128);title('lena 灰度直方图');
效果:
实验步骤4.1
clear all
clc
close all
scr = imread('lena.jpg');
scr_gray = rgb2gray(scr);
figure,imshow(scr_gray);
scr_gray_resize = imresize(scr_gray,0.5);
figure,imshow(scr_gray_resize);
效果:
实验步骤4.2
clear all
clc
close all
scr = imread('lena.jpg');
scr_gray = rgb2gray(scr);
figure,imshow(scr_gray);
scr_gray_rotation = imrotate(scr_gray,30);
figure,imshow(scr_gray_rotation);
实验步骤4.3
clear all
clc
close all
scr = imread('lena.jpg');
scr_gray = rgb2gray(scr);
figure,imshow(scr_gray);
scr_gray_transposition = scr_gray';
figure,imshow(scr_gray_transposition);
效果: