矩阵基本运算与图像基本操作习题

练习1

练习内容

分别将彩色图像RGB的某个通道置黑,观察结果,并在一个窗口显示各结果

代码呈现

1
2
3
4
5
6
7
8
9
10
I = imread('/Users/roarboil/Desktop/1.jpg');
RB = I;
RB(:,:,1) = 0;
GB = I;
GB(:,:,2) = 0;
BB = I;
BB(:,:,3) = 0;
subplot(1,3,1);imshow(RB);
subplot(1,3,2);imshow(GB);
subplot(1,3,3);imshow(BB);

代码解析

首先是用imread进行读入,这个在之前用了很多了比较熟悉。之后要注意的一个点是matlab中在进行切片索引时用的是小括号而不是中括号。对于一个RGB图像来说,他是三维的,前两维是图像的长和宽,第三维是图像的三个通道RGB,也就是一共有三页。于是我们这边分别就是利用切片索引来对三页的值进行更改。最后的输出也是比较熟悉的了,不再赘述

呈现效果

练习2

练习内容

将一幅灰度图像的每个像素分别乘2和0.5,观察结果

代码呈现

1
2
3
4
5
6
I = imread('/Users/roarboil/Desktop/1.jpg');
gra = rgb2gray(I);
g1 = gra*0.5;
g2 = gra*2;
subplot(1,2,1);imshow(g1);
subplot(1,2,2);imshow(g2);

代码解析

这个代码的主要要点就是要记住rgb2gray这个函数,并且知道矩阵直接乘一个数就是指对其里面所有数都乘这个数

呈现效果

我们可以看出乘0.5的明显变暗,乘2的明显变亮

练习3

练习内容

将一幅图像的高和宽缩放到原来的0.5倍,再变为二值图像,最后将二值图像顺时针旋转45度并显示为原来图像大小,在一个窗口显示各步结果图像

代码呈现

1
2
3
4
5
6
7
8
I = imread('/Users/roarboil/Desktop/1.jpg');
g1 = imresize(I,0.5);
g2 = im2bw(g1,0.4);
g3 = imrotate(g2,-45);
g3 = imresize(g3,2);
subplot(1,3,1);imshow(g1);
subplot(1,3,2);imshow(g2);
subplot(1,3,3);imshow(g3);

代码解析

这边主要是对几个函数的记忆。imresize函数是对图像的尺寸进行一个调整,im2bw是将图像转换为二值图像的一个方法。imrotate是对图像进行一个旋转,注意默认是逆时针。

呈现效果

练习4

练习内容

生成一幅200*200的彩色图像,要求左上角(四分之一)是黄色,右下角是品红,其他是黑色

代码呈现

1
2
3
4
5
I = zeros(200,200,3);
I(1:100,1:100,1:2) = 255;
I(101:200,101:200,1) = 207;
I(101:200,101:200,3) = 112;
imshow(I);

代码解析

这里是和练习一一样对矩阵操作的一些考察,我们这里用zeros来生成一个全0矩阵,然后利用切片工具来进行色彩的修改。

呈现效果

练习5

练习内容

对彩色图像onion.png分别进行水平和垂直镜像,并在一个窗口显示原图、水平镜像和垂直镜像的图

代码呈现

1
2
3
4
5
6
I = imread('onion.png');
le = I(end:-1:1,:,:);
up = I(:,end:-1:1,:);
subplot(1,3,1);imshow(I);
subplot(1,3,2);imshow(le);
subplot(1,3,3);imshow(up);

代码解析

这边的实现要求对矩阵的操作有一个比较高的需求,水平翻转就是在纵坐标上倒一倒,垂直翻转是在横坐标上。同时我们这里在切片的时候不要忘了第三维

呈现效果

Author: YihangBao
Link: https://roarboil.github.io/2020/04/22/imabasic/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.