【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,则在垂直排列(第三个方向)。