Matlab中图像数据结构的理解

什么是二值图像?什么是灰度图像?

需要学习一下,分辨其区别。并且要知道怎么转换。怎么从一般图片得到。图片存储的原理,在计算机中的存储格式,要了解。

图片数据类型

可以看到图片的读取到软件中之后是存放在一个数据类型为uint8的三维矩阵中

第三维大小是3,我觉得是对应RGB三通道。所以第一维和第二维是图像的二维空间分布点,对应385×512个像素点,每个点有R、G、B三色通道的对应饱和值。

感觉很快就可以理解二值图像的意思了!!

可以看到灰度图在软件中就是一个数据类型为uint8的二维矩阵,每个点就对应一个值,范围从0~255。表示白度。0是纯黑色,255是纯白色。

逻辑运算得到的自然就是逻辑矩阵,二值图就对应逻辑矩阵。

那么二值图的逻辑运算就更好理解了!

真彩色图像 RGB 转成灰度图

1
I = rgb2gray(RGB);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
figure
I = rgb2gray(imread('peppers.png'));
subplot(2,3,1); imshow(I); title('原图');
I1 = imadjust(I);
subplot(2,3,2); imshow(I1); title('自动调整对比度');
subplot(2,3,3);
I2 = imadjust( I,[0.2 0.8],[0 1]);
imshow(I2); title('取灰度中心区提高对比度')
subplot(2,3,4);
I3 = imadjust(I,[0 1],[0 0.6]);
imshow(I3);title('降低对比度至暗色');
subplot(2,3,5);
I4 = imadjust(I,[],[],0.6);
imshow(I4); title('伽马调亮运算');
subplot(2,3,6);
I5 = imadjust(I,[],[],1.4);
imshow(I5); title('伽马调暗运算');

J1 = I - I1;
J2 = I - I2;
J3 = I - I3;
J4 = I - I4;
J5 = I - I5;

从实验结果可以看出来

调高对比度,通常是整体调暗,暗的暗更多,亮的暗一点。整体数值都减小,暗部减少的更多。

降低对比度,反其道而行之。整体调亮,整体数值都增大,暗部增大的更多(整体调暗,整体数值都减小,亮部减少的更多。)

调亮则 伽马小于1,调暗则伽马大于1。伽马与灰度值之间没发现明确关系。看了下I4I的数值,没有找到0.6的比例关系。

图像的解析其实也体现了微积分的思想。将一张图片(整体)分割成若干个像素点(单元),若干个像素点有序排布(整合)构成图片。

调整每个像素点的色彩值(RGB或者灰度值)对图片进行处理。

只有一个值,处理图片的能力有限。比如只能处理灰度图片。

对于真彩色图的处理

局部视角:对于每个像素点,将所有颜色分割成三原色,三原色的强度值对应RGB三通道的值,通过分别调整三通道的值,再整合可以得到任意颜色。 任意改变像素点的色彩

整体视角:应用到一张图片中。通过对原图进行分析,通过一个映射关系,有规律地调整图片的所有点的像素颜色。处理后的图经过反映射又能回到原图。(理论上。实际可能有精度损失) 任意改变图片的色彩

可以看到,图片的处理和解析的过程,与微分再积分的过程非常相似。将大问题切割成小问题,解决小问题,整合构成大问题的解决方案。

有了这样的微积分思想之后,照片的信息在计算机中的存储也就可以理解了。

计算机数据与图片信息的对应关系:

真彩色图:

  • 空间布局,二维矩阵,对应像素点的相对空间位置
  • 第三维大小是3,对应图片色彩强度RGB三通道
  • 三层空间位置上的值,对应像素点的R/G/B强度值