【MATLAB】彩色图像处理

 

原文链接
【彩色图像处理(MATLAB)】https://blog.csdn.net/qimingxia/article/details/89527511
【RGB图像三个分量的理解和显示】https://blog.csdn.net/Hello_Chan/article/details/89094790

一、RGB图像

  RGB彩色空间通常以图解的方式显示一个RGB彩色立方体,立方体的顶点是光的原色(红,绿,蓝)和二次色(青,红紫,黄)。

  一幅RGB图像是一个M N 3的彩色像素数组,其中每个彩色色素是一个三值组,这三个值分别对应一个特定空间位置处RGB图像的红,绿,蓝分量

  RGB图像由格式为M×N×3的三维数组组成,其中的“3”可以理解为三幅M×N的二维图像(灰度值图像)。这三幅图像分别代表R、G、B分量,每个分量的像素点取值范围是[0,255]。RGB可以视为三幅灰度图像形成的“堆叠”,当将他们分别送到彩色显示器的红,绿,蓝输入端时,会在屏幕上生成一幅彩色图像。分量图像的数据类决定了他们的取值范围。
  matlab中颜色取值为[0,1],而现实生活中颜色取值为[0,255]
  转换:选择自己想要的颜色,用取色器得到0~255间的RGB值,在matlab中进行归一化[R, G, B]/256即可。
【matlab中颜色值与实际颜色值的转换】https://blog.csdn.net/zijikanwa/article/details/79081511
  color=' #054E9F',每两个十六进制数分别代表R、G、B分量。
  两位十六进制即8位二进制,2^8=256即RGB的取值区间[0,255]
【python中matplotlib的颜色及线条控制】https://www.cnblogs.com/darkknightzh/p/6117528.html
  用来表示这些分量图像像素值的比特数决定了一幅图像的比特深度。图像的颜色数为:(2^b)3,其中b是每幅图像的比特数。

二、Matlab的cat函数和zeros函数

【matlab的cat函数】https://www.ilovematlab.cn/thread-53313-1-1.html
  cat函数:用来联结数组
  用法:C = cat(dim, A, B 按dim来联结A和B两个数组。
      C = cat(dim, A1, A2, A3, ...) 按dim联结所有输入的数组。
      Example: a=cat(3,A,B) 左括号后的3表示构造出的矩阵维数;在新的矩阵中第1、2维就是A和B]这两个矩阵的行数和列数,第3维是A和B]这两个矩阵的矩阵个数,即为2
  cat(2, A, B)相当于[A, B];
  cat(1, A, B)相当于[A; B].
  使用“,”分割列表的语法,cat(dim, C{:})或cat(dim, C.field),这是将包含数据矩阵的cell或结构数组联合为一个数组的方便方式。
  dim=1,合并后形如 [a;b],行添加矩阵(要求a,b的列数相等才能合并);
  dim=2,合并后形如[a,b],列添加矩阵(要求a,b的行数相等才能合并);

  n维的矩阵合并,要求n-1维维数相等才可以。

>> A = [1 2; 3 4];
>> B = [5 6; 7 8];
>> A
A =
1 2
3 4
>> B
B =
5 6
7 8
>> cat(1, A, B) %按列连接(列数相同)
ans =
1 2
3 4
5 6
7 8
>> cat(2, A, B) %按行连接(行数相同)
ans =
1 2 5 6
3 4 7 8
>> cat(3, A, B) %合成效果如下图
ans(:,:,1) =
1 2
3 4
ans(:,:,2) =
5 6
7 8

  zeros函数

  表达式1:zeros(m, n),表示创建一个m×n的零矩阵;
  表达式2:zeros(n),表示创建一个n×n的零矩阵;
  相对于零矩阵,ones函数表示创建一个全1矩阵,用法和上述函数类似。

三、RGB图像的分量显示

1、灰度值显示法
  通过提取R、G、B分量,再分别显示出来,matlab代码如下:

clc;
clean all;
RGB = imread('baby.bmp');
subplot(2,2,1),imshow(RGB(:,:,1)),title('R分量');
subplot(2,2,2),imshow(RGB(:,:,2)),title('G分量');
subplot(2,2,3),imshow(RGB(:,:,3)),title('B分量');
subplot(2,2,4),imshow(RGB),title('RGB');

显示结果:


2、彩色显示法
  只有当RGB的三个通道同时被赋值时才会显示颜色,如R分量显示出红色,matlab代码如下:(需要用到:cat函数,堆叠图层矩阵/向量;zeros函数,创建辅助输出的0矩阵/向量)

clc;
clear all;

RGB = imread('baby.bmp');
zeromatrix = zeros(512, 512); %创建一个512×512的零矩阵
RGB_R = cat(3, RGB (:,:,1), zeromatrix , zeromatrix );
RGB_G = cat(3, zeromatrix , RGB (:,:,2), zeromatrix );
RGB_B = cat(3, zeromatrix , zeromatrix, RGB (:,:,3));

subplot(2,2,1),imshow(RGB_R ),title('R分量');
subplot(2,2,2),imshow(RGB_G),title('G分量');
subplot(2,2,3),imshow(RGB_B),title('B分量');
subplot(2,2,4),imshow(RGB),title('RGB');

显示结果:


cat函数的使用细节:
  rgb_image=cat(dim,A1,A2,…) 沿指定的方向来连接各个数组(矩阵向量)。如果dim=1,那么这些数组水平排列(第一个方向),dim=2,则这些数组竖直排列(第二个方向),dim=3,则在垂直排列(第三个方向)。

posted @ 2022-10-27 14:33  U羊U  阅读(1317)  评论(0编辑  收藏  举报