matlab-1

学校数字水印课笔记——matlab使用小记

task1 清除最低RGB位

将图像的第0位位平面清零。

位平面就是把图像RGB表示下的每一个bit分层表示。

image-20220331092824217

完成task1代码。主要是用bitand来去除最后一个bit。注意这里输入结束之后好像没有自动弹窗?要放在脚本中运行才可以,如果是交互式可能一次只能弹出一个图像

1
2
3
4
>> data = imread('e:\\lena.bmp');
>> data1 = bitand(data,254);
>> subplot(2,1,1),imshow(data),title('original');
>> subplot(2,1,2),imshow(data1),title('after');

image-20220331094757382

新建脚本的地方在这里。

image-20220331095515663

task2 清除最高RGB位

和上面的代码类似,现在是处理最高位,将最高位清零。

1
2
3
4
data = imread('e:\\lena.bmp');
data1 = bitand(data,127);
subplot(2,1,1),imshow(data),title('original');
subplot(2,1,2),imshow(data1),title('after')

可以看到差别很大

image-20220331095540793

task3 处理每个图层生成灰度图像

这里需要知道图层是怎么储存的。在matlab中,每读入一个图片,图片的bitmap都会以[R,G,B]的数组形式储存。因此我们需要把每一个像素点切片。代码如下。

1
2
3
4
5
6
7
8
9
data = imread('e:\\lena.bmp');
R = data(:,:,1);
G = data(:,:,2);
B = data(:,:,3);

subplot(2,2,1),imshow(data),title('full');
subplot(2,2,2),imshow(R),title('R layer');
subplot(2,2,3),imshow(G),title('G layer');
subplot(2,2,4),imshow(B),title('B layer');

可以直接观察data和RGB三种数组的区别。可以看到matlab为了节省空间,并不是将每一个像素点用一个结构体(red,green,blue)表示,而是分开存放每一种像素。这种操作能够在我们提取出每种像素点时,大大节约空间。(不然会出现(0,0,255)这种情况,会浪费)

image-20220331102104241

以下是输出结果。

image-20220331101522030

这里有一个疑问,为什么不是输出每种颜色的纯色图像,而是灰度图像呢?

个人觉得是因为储存方式改变了(没有*3的bitmap),让matlab默认处理时当成了灰度图片输出。

同时注意,如果按照1中方法对图片末尾bit清零,实际上是对R,G,B三个数组的每一个的最后一位都清零。也就是方法一等价于我们提取出每一种RGB的图层,清除最低位之后再合并的结果。

image-20220331102808801

直观上来理解,也是原始图像的三维数组每一个数组都经过了这种操作。

合并图像各个图层

下面做实验复现一下上面的想法。用两种方法处理各个图层,后者进行合并。然后用assert判断两者是相等的。

image-20220331110046214

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data = imread('e:\\lena.bmp');
data1 = bitand(data,254);
subplot(2,2,2),imshow(data1),title('直接处理')
R = data(:,:,1);
G = data(:,:,2);
B = data(:,:,3);

subplot(2,2,1),imshow(data),title('原始图像');
R=bitand(R,254);
G=bitand(G,254);
B=bitand(B,254);
data2(:,:,1) = R;
data2(:,:,2) = G;
data2(:,:,3) = B;
subplot(2,2,3),imshow(data2),title('三个维度合并图像');
assert(isequal(data2,data1));
文章目录
  1. 1. task1 清除最低RGB位
  2. 2. task2 清除最高RGB位
  3. 3. task3 处理每个图层生成灰度图像
  4. 4. 合并图像各个图层
|