一幅RGB图像是M*N*3的彩色像素数组。RGB图像可以看作是三幅灰度图的叠加。RGB图像的类由分量图像的类决定。
rgb_iamge=cat(3,fr,fg,fb) 顺序不能颠倒。
rgb_iamge=cat(dim,fr,fg,fb)
dim=1三个数组垂直排列。 dim=2 三个数组水平排列。
dim=3在第三个方向上堆叠。
fr=rgb_image(:,:,1); 提取分量图像(r分量)
索引图像有两个分量:
整数类型矩阵X和m*3的doube类彩色映射矩阵map
m是颜色数。 分别指定r g b 三个分量
X中的数值是map的索引。X是double类,1-à第一行,2—>第二行
X是uint8或者uint16 类,0—>第一行,1-à第二行。
这样,矩阵X中的每一个值都可以找到对应的RGB值。
显示索引图象:imshow(X,map)
MATLAB提供的预定义的彩色映射:
autumn bone colorcube cool copper 等等
如果X中的数值数目比m大 一种方法是多个数值对应一行,另一种是使用map(k,:)=[r(k,g(k),b(k))] 进行填充
matlab中还有以预定义的彩色映射矩阵。
索引图像(ind)、灰度图像(gray )、RGB图像(rgb)之间的转换:
ind2gray() 由索引图像创建灰度图像,以此类推。
dither() 采用抖动从RGB图像创建索引图像。
grayslice() 采用阈值处理从灰度图像创建索引图像。
除了RGB彩色空间以外,还有其他的彩色空间,例如NTSC、HSV、CMY、HSI等等,
它们可以使用相关的函数与RGB彩色空间进行转换。
如:
yiq_image=rgb2ntsc(rgb_image)
ycbcr_image=rgb2ycbcr(rgb_image)
hsv_image=rgb2hsv(rgb_image)
HSI彩色空间:
hue色彩(色调) saturation 饱和度 intensity 强度(亮度)
RGB空间中,要求任意彩色点的亮度。做过该点与黑白顶点线端垂直的直线,二者的交点给出亮度([0,1]之间) 距离黑白连线越远的彩色点,饱和度越大,在连线上的彩色点饱和度为0。
RGB空间中的色调由三角形三个顶点的组合决定,如果一黑一白(黑白线上的点对色调无影响),色调由第三个点决定,该三角形上的彩色点具有相同的色调。
这样HIS空间所需的三个要素都可以由RGB得到了。
HIS的重要组成部分是垂直亮度轴到彩色点的向量长度(就是饱和度)和该向量与红轴的夹角(给出色调)
RGB和HSI的转换公式。冈萨雷斯《图像处理》中给出了RGB到HSI和HIS到RGB的M转换函数。
色调和饱和度合称色度。
形成一种特殊颜色所需要的红(X)绿(Y)蓝(Z)数量叫做三色值。
x =
y=
z=
x+y+z=1。
CIEXYZ色度图
X为横坐标,y为纵坐标,显示人类感知颜色范围的图形叫做色度图。
等能量点:xyz相同 相当于白光,饱和度为0。
边界上的值是完全饱和的。一条直线上的颜色可以通过两个端点的加性组合得到。
彩色图像的空间滤波:
可以同灰度图的滤波一样,也可先把RGB或HIS拆成三幅图像滤波再重新组合。
锐化同灰度图相同,g=imfilte(f,w,) result=f-g;
彩色图像处理中的两个重要应用:彩色边缘检测、区域分割
分别计算每幅分量彩色图像的梯度然后将结果合并与直接在RGB向量空间中计算边缘的结果是不同的。
《图像处理》附录中colorgrad()函数可以用来计算彩色梯度。
[VA,A,PPG]=colorgrad(f);
f是一幅RGB图像,T是[0,1]内的一个可选阈值(默认为0);
VG是RGB向量梯度F(x,y) A是以弧度计的角度图像θ(x,y);PPG是通过对各个彩色平面的二维梯度图像求和形成的梯度图像。
函数colorgrad()可以用于检测RGB图像的边缘。
在RGB向量空间中进行图像分割,给定一个平均颜色m(向量)。对图像中每个
RGB图像进行分类,D(z,m)=|| (z-m)||。其中,z,m均为3*1的列向量。(RGB像素)设置阈值T 。返回一个与原图像大小相同的逻辑数组。像素中D(z,m)>T
逻辑数组对应1,否则对应0。然后对两部分进行分割。
附录中自定义函数colorseg()用于实现此功能。
S=colorseg(method,f,T,parameters)
Method
1、‘mahalanobis’ 输入参数为m和C C是协方差矩阵
2、 ‘euclidean‘ 输入参数是m