彩色空间转换

目录

前言

人类获取信息很大一部分是依靠视觉,那么彩色空间的则是研究此方面时避不开的话题,常见的彩色空间有RGB彩色空间、NTSC彩色空间、YCbCr彩色空间、HSV彩色空间、CMY(K)彩色空间、HSI彩色空间等,在这里我会一一介绍

RGB彩色空间

RGB(Red, Green, Blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉 发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同 的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。

RGB模型表示的图像由3个分量图像组成,每种原色一幅分量图像。当送入RGB监视器时,这3幅图像在屏幕上混合生成一幅合成的彩色图像。考虑一幅RGB图像,其中每一幅图红绿蓝图像都是一幅8比特图像。在这种情况下,可以说每个RGB彩色像素有24比特的深度。在24比特RGB图像中,颜色总数是。下图为分别为RGB彩色立方体示意图 和 对应的RGB24比特彩色立方体。

                            

这里给出一幅RGB彩色空间图像:

NTSC彩色空间

 NTSC彩色制式用于模拟电视。这种形式的一个主要优点是,灰度信息和彩色数据是分离的,所以以同一信号既可用于彩色电视机,又可用于黑白电视机。在NTSC格式中,图像数据由三个分量组成:亮度(Y)、色调(I)、饱和度(Q)。YIQ分量可以由以下线性变换从RGB图像得到:

                                        \begin{bmatrix} Y\\ I \\Q \end{bmatrix}=\begin{bmatrix} 0.299 &0.587 &0.114 \\ 0.596&-0.274 &-0.322 \\ 0.211&-0.523 &0.312 \end{bmatrix}\begin{bmatrix} R\\ G\\ B \end{bmatrix}

通过这个线性变换,上面那副RGB彩色图像就转化为了:(图一是根据变化公式自己写的,图二是直接调用库函数实现)

YCbCr彩色空间

YCbCr彩色空间广泛应用于数字视频中。在这种格式中,亮度信息用单个分量Y来表示,彩色信息存储为两个色差分量Cb和Cr。分量Cb是蓝色分量和参考值的差,分量Cr是红色分量和参考值的差。从RGB彩色空间变换到YCbCr彩色空间的线性变换为:

\begin{bmatrix} Y\\ Cb\\ Cr \end{bmatrix}=\begin{bmatrix} 16\\ 128\\ 128 \end{bmatrix}+\begin{bmatrix} 0.257 & 0.564&0.098 \\ -0.148&-0.291 &0.439 \\ 0.439&-0.368 &-0.071 \end{bmatrix}\begin{bmatrix} R\\ G\\ B \end{bmatrix}

通过这个线性变换,上面那副RGB彩色图像就转化为了:(图一是根据变化公式自己写的,图二是直接调用库函数实现)

HSV彩色空间

HSV(色调、饱和度、数值)是人们从色环或调色板中挑选颜色时所用的几种彩色系统之一。这种彩色系统与RGB系统相比,更加接近于人们的经验和描述彩色感觉时所用的方式。由RGB彩色空间转化为HSV彩色空间的变换规则为:

通过这个变换规则,上面那副RGB彩色图像就转化为了:(图一是根据变化公式自己写的,图二是直接调用库函数实现)

CMY(K)彩色空间

CMY彩色空间较为简单,假设所有颜色值已被归一化到区间[0,1],变换公式为: 

\begin{bmatrix} C\\ M\\ Y \end{bmatrix}=\begin{bmatrix} 1\\ 1\\ 1 \end{bmatrix}-\begin{bmatrix} R\\ G\\ B \end{bmatrix}

通过这个变换规则,上面那副RGB彩色图像就转化为了:(图一是根据变化公式自己写的,图二是直接调用库函数实现)

HSI彩色空间

HSI(色彩、饱和度、亮度)模型把亮度分量从一幅彩色图像中承载的彩色信息分开,是开发基于彩色描述的图像处理算法的一种理想工具,这种描述自然而直观,与HSV彩色空间类似,但其重点是在按画家的调色板来解释时,呈现有意义的色彩。从RGB彩色空间到HSI彩色空间的变换规则为:

H=\left\{\begin{matrix} \theta & B\leq G\\ 360-\theta & B>G \end{matrix}\right.
\theta =arccos\begin{Bmatrix} \frac{\frac{1}{2}[(R-G)+(R-B)]}{[(R-G)^{2}+(R-B)(G-B)]^{0.5}} \end{Bmatrix}
S=1-\frac{3}{(R+G+B)}[min(R,G,B)]
I=\frac{1}{3}(R+G+B)

 通过该变换规则可见RGB彩色空间图像转化为HSI彩色空间图像:

代码实现(MATLAB):

%%
%RGB彩色空间
img_rgb = imread('F:\picture\beautiful.jpg');
imshow(img_rgb)
title('RGB彩色空间','FontSize',16)
[m, n] = size(rgb2gray(img_rgb));

%%
%NTSC彩色空间:Y亮度、I色调、Q饱和度
%用于模拟电视机
for i = 1:m
    for j = 1:n
        Y_NTSC(i,j) = 0.299*img_rgb(i,j,1) + 0.587*img_rgb(i,j,2) + 0.114*img_rgb(i,j,3);
        I_NTSC(i,j) = 0.569*img_rgb(i,j,1) - 0.274*img_rgb(i,j,2) - 0.322*img_rgb(i,j,3);
        Q_NTSC(i,j) = 0.211*img_rgb(i,j,1) - 0.523*img_rgb(i,j,2) + 0.312*img_rgb(i,j,3);
    end
end
YIQ_NTSC = cat(3,Y_NTSC,I_NTSC,Q_NTSC);
figure
subplot(1,2,1)
imshow(YIQ_NTSC)
title('NTSC彩色间1','FontSize',16)
yiq_image = rgb2ntsc(img_rgb);
subplot(1,2,2)
imshow(yiq_image)
title('NTSC彩色空间2','FontSize',16)

%%
%YCbCr彩色空间:Y亮度、Cb蓝色分量和参考值和差、Cr红色分量和参考值的差
for i = 1:m
    for j = 1:n
        Y_YCbCr(i,j) = 16 + 0.257*img_rgb(i,j,1) + 0.564*img_rgb(i,j,2) + 0.098*img_rgb(i,j,3);
        Cb_YCbCr(i,j) = 128 - 0.148*img_rgb(i,j,1) - 0.291*img_rgb(i,j,2) + 0.439*img_rgb(i,j,3);
        Cr_YCbCr(i,j) = 128 + 0.439*img_rgb(i,j,1) - 0.368*img_rgb(i,j,2) - 0.071*img_rgb(i,j,3);
    end
end
YCbCr = cat(3,Y_YCbCr,Cb_YCbCr,Cr_YCbCr);
figure
subplot(1,2,1)
imshow(YCbCr)
title('YCbCr彩色空间1','FontSize',16)
subplot(1,2,2)
imshow(rgb2ycbcr(img_rgb))
title('YCbCr彩色空间2','FontSize',16)

%%
%HSV彩色空间:H色调、S饱和度、V数值
%最接近与人们描述色彩的感觉
img_rgb = im2double(img_rgb);
V_HSV = zeros(m,n);
S_HSV = zeros(m,n);
H_HSV = zeros(m,n);
for i = 1:m
    for j = 1:n
        V_HSV(i,j) = max([img_rgb(i,j,1),img_rgb(i,j,2),img_rgb(i,j,3)]);
        if V_HSV(i,j) ~= 0
            S_HSV(i,j) = (V_HSV(i,j)-min([img_rgb(i,j,1),img_rgb(i,j,2),img_rgb(i,j,3)]))/V_HSV(i,j);
        else
            S_HSV(i,j) = 0;
        end
        if V_HSV(i,j) == img_rgb(i,j,1)
            H_HSV(i,j) = (60*(img_rgb(i,j,2)-img_rgb(i,j,3)))/(V_HSV(i,j)-min([img_rgb(i,j,1),img_rgb(i,j,2),img_rgb(i,j,3)]));
        elseif V_HSV(i,j) == img_rgb(i,j,2)
            H_HSV(i,j) = 120 + (60*(img_rgb(i,j,3)-img_rgb(i,j,1)))/(V_HSV(i,j)-min([img_rgb(i,j,1),img_rgb(i,j,2),img_rgb(i,j,3)]));
        elseif V_HSV(i,j) == img_rgb(i,j,3)
            H_HSV(i,j) = 240 + (60*(img_rgb(i,j,1)-img_rgb(i,j,2)))/(V_HSV(i,j)-min([img_rgb(i,j,1),img_rgb(i,j,2),img_rgb(i,j,3)]));
        end
        if H_HSV(i,j) < 0
            H_HSV(i,j) = H_HSV(i,j) + 360;
        end
        H_HSV(i,j) = H_HSV(i,j)/360;
    end
end
HSV = cat(3,H_HSV,S_HSV,V_HSV);
figure
subplot(1,2,1)
imshow(HSV)
title('HSV彩色空间1','FontSize',16)
subplot(1,2,2)
imshow(rgb2hsv(img_rgb))
title('HSV彩色空间2','FontSize',16)

%%
%CMY(K)彩色空间
%用于打印机
for i = 1:m
    for j = 1:n
        C_CMY(i,j) = 1 - img_rgb(i,j,1);
        M_CMY(i,j) = 1 - img_rgb(i,j,2);
        Y_CMY(i,j) = 1 - img_rgb(i,j,3);
    end
end
CMY = cat(3,C_CMY,M_CMY,Y_CMY);
figure
subplot(1,2,1)
imshow(CMY)
title('CMY彩色空间1','FontSize',16)
subplot(1,2,2)
imshow(imcomplement(img_rgb))
title('CMY彩色空间2','FontSize',16)

%%
%HSI彩色空间:H色调、S饱和度、I亮度
H_HSI = zeros(m,n);
S_HSI = zeros(m,n);
I_HSI = zeros(m,n);
for i = 1:m
    for j = 1:n
        I_HSI(i,j) = (img_rgb(i,j,1)+img_rgb(i,j,2)+img_rgb(i,j,3))/3;
        S_HSI(i,j) = 1-((3/(img_rgb(i,j,1)+img_rgb(i,j,2)+img_rgb(i,j,3))))*min([img_rgb(i,j,1),img_rgb(i,j,2),img_rgb(i,j,3)]);
        theta = (0.5*((img_rgb(i,j,1)-img_rgb(i,j,2))+(img_rgb(i,j,1)-img_rgb(i,j,3))))/sqrt((img_rgb(i,j,1)-img_rgb(i,j,2))^2+(img_rgb(i,j,1)-img_rgb(i,j,3)*(img_rgb(i,j,2)-img_rgb(i,j,3))));
        if img_rgb(i,j,3) <= img_rgb(i,j,2)
            H_HSI(i,j) = theta;
        elseif img_rgb(i,j,3) > img_rgb(i,j,2)
            H_HSI(i,j) = 360-theta;
        end
    end
end
HSI = cat(3,H_HSI,S_HSI,I_HSI);
figure
imshow(HSI)
title('HSI彩色空间','FontSize',16)

 以上就是几种常见的彩色空间及其转换原理,希望对你有所帮助,感谢观看!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年5月11日
下一篇 2022年5月11日

相关推荐