14、RGB和YCbCr颜色模型

1. RGB颜色模型


RGB颜色模型就是用红(R)、绿(G)、蓝(B)三种颜色的混合,从而实现各种颜色的表示。混合得到的颜色如下图所示:
在这里插入图片描述
可以看出用不同的颜色进行混合,可以得到其他的色彩。三种颜色同时存在时得到的是白色,一种色彩都没的时候得到的是黑色。

在matlab中为了实现这种颜色,我们用三张二维图像来表示每一个颜色,即三张图分别表示R、G、B。将三张图重合到一块,便可以得到一张彩色的图像,通过在每张图上相同位置的像素点给定不同大小的值,从而混合得到不同的颜色。

下图表示了一张 RGB 图像的信息。

工作区的值 557×1027×3 表示这是一张宽×长为 557×1027 的图片,后面的 3 表示有三个维度,就是图片由下图右侧的三张分别代表 R、G、B颜色分量的图片组成,三张分量图片长宽相同,这三张图片重叠,构成了该RGB彩色图像。unit8 表示每张分量的每个像素点的值都是由 8 位表示,即取值为 0-255 。每一张分量图片都是 8 位的灰度图。
在这里插入图片描述

在图像分割中我们用括号可以切割出指定区域的图像,对于三维图像,我们可以从三个维度进行切割,从而得到彩色的图像。下图展示了将一张图的R、G、B分量图片分别切割出来并显示。可以看出每张分量图片都是一维的灰度图。这篇文章讲述了括号切割图像的用法
在这里插入图片描述
代码:

clear,clc,close all;
image=imread('color.jpg');
imshow(image);
image_r=image(:,:,1);
image_g=image(:,:,2);
image_b=image(:,:,3);
figure;
subplot(1,3,1),imshow(image_r),title('R分量');
subplot(1,3,2),imshow(image_g),title('G分量');
subplot(1,3,3),imshow(image_b),title('B分量');

下面将演示用matlab的矩阵创建一张如下所示的RGB图像:
在这里插入图片描述

  1. 首先建立一个大小为300×300的每个位置的值都是0的矩阵,这里用到函数

    m = zeros(width, height);
    

    创建width×height的矩阵,元素的值全部为0

  2. 然后用括号表达式选择上面的前100行,赋值为 255,用这张图表示红色分量的图

  3. 再建立第二张300×300的图像,将中间100行的元素置为255,用这张图表示绿色分量的图

  4. 再建立第三张300×300的图像,将下面100行的元素置为255,用这张图表示绿色分量的图

  5. 将这三张图用cat函数重叠到一块就形成了一张彩色RGB图

    前面的这篇文章介绍了cat的用法

    cat 函数的第一个参数为 3 时表示将后面的若干张图片按顺序从前向后重叠到一块。

    该例代码和效果为:

    在这里插入图片描述
    代码:

    clear,clc,close all;
    r=zeros(300,300);
    r(1:100,:)=255;
    g=zeros(300,300);
    g(101:200,:)=255;
    b=zeros(300,300);
    b(201:300,:)=255;
    rgb_image=cat(3,r,g,b);
    imshow(rgb_image);
    

我们曾经使用过函数 rgb2gray 将彩色图像转换为灰度图,该函数就是用将不同权重的R、G、B分量的图片每个像素点的值相加得到的,转换的公式为:0.2989 * R + 0.5870 * G + 0.1140 * B 。

2. YCbCr颜色模型


YCbCr颜色模型,Y表示亮度分量(展示亮度信息),Cb表示蓝色分量差,Cr表示红色分量差,一张YCbCr彩色图也是由这三张分量图表示,对任意的RGB图像,可以使用函数

ycbcr_image = rgb2ycbcr(rgb_image);

将RGB图片转化为YCbCr图片。

下图展示了将RGB图像转为YCbCr图片并显示新图像,然后将YCbCr图片的每个分量都分离出来,分别展示。
在这里插入图片描述
可以看到直接用 imshow 展示YCbCr图片会改变原图的颜色,因为 imshow 只支持RGB颜色模型和索引图像,所以会出现偏离原色。下面的三张图展示了YCbCr图片的三个分量图片,从工作区可以看到,每个分量也是一张 8 位的灰度图。由于人的肤色分布在 140<Cr<160 的范围内,因此在后面会应用该颜色模型提取肤色。

该例代码为:

clear,clc,close all;
f=imread('color.jpg');
imshow(f);
fy=rgb2ycbcr(f);
figure,imshow(fy),title('YCbCr图像');
fy_y=fy(:,:,1);
fy_cb=fy(:,:,2);
fy_cr=fy(:,:,3);
figure;
subplot(1,3,1),imshow(fy_y),title('亮度信息Y');
subplot(1,3,2),imshow(fy_cb),title('蓝色分量差Cb');
subplot(1,3,3),imshow(fy_cr),title('红色分量差Cr');

3. 图片资源

在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值