1、问题起因
        在学习工作中有时候因为色彩空间的不同,对图像处理的结果也会有所不同,因此需要对图像的色彩空间进行转换。对于火焰识别来说,色度对火焰的识别结果产生极大的影响,因此需要将RGB空间的色彩模式转换为YCbCr。

2、RGB和YCbCr色彩模式的不同
(1) RGB简介
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

R:红色通道(Red)

G:绿色通道(Green)

B:蓝色通道(Blue)

(2)YCbCr简介
       YCbCr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。

Y:明亮度,也就是灰阶值。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。(Luminance或Luma,不要问我Luminance 为什么会简写为Y,我也不懂)

Cb:反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。ChrominanceBlue

Cr:反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。ChrominanceRed

3、相互转换
(1)RGB转换为YCbCr
Y = 0.257*R+0.564*G+0.098*B+16
Cb = -0.148*R-0.291*G+0.439*B+128
Cr = 0.439*R-0.368*G-0.071*B+128
或者

转化为

(2)YCbCr转换为RGB
R = 1.164*(Y-16)+1.596*(Cr-128)
G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)
B = 1.164*(Y-16)+2.017*(Cb-128)

Python

#方法一:利用skimage中的转换函数
from skimage import io as skio
from skimage import color as skcoima = skio.imread('abc.bmp')
ima_ycbcr = skimage.color.rgb2ycbcr(ima)#方法二:利用公式计算
import matplotlib.image as mpimg
import numpy as npima = mpimg.imread('abc.bmp')
ima_r = im_l[:, :, 0]
ima_g = im_l[:, :, 1]
ima_b = im_l[:, :, 2]
################################################RGB2YCBCR
#获取亮度,即原图的灰度拷贝
ima_y = 0.256789 * ima_r + 0.504129 * ima_g + 0.097906 * ima_b + 16
#获取蓝色分量
ima_cb = -0.148223 * ima_r - 0.290992 * im_l_g + 0.439215 * ima_b + 128
#获取红色分量
ima_cr = 0.439215 * ima_r - 0.367789 * ima_g - 0.071426 * ima_b + 128# 将三个分量合并在一起
ima_rgb2ycbcr = np.zeros(ima.shape)
ima_rgb2ycbcr[:,:,0] = ima_y
ima_rgb2ycbcr[:,:,1] = ima_cb
ima_rgb2ycbcr[:,:,2] = ima_cr
###############################################YCBCR2RGB
ima_ycbcr2rgb = np.zeros(ima.shape)ima_ycbcr2rgb[:,:,0] = 1.164383 * (ima_y-16) + 1.596027 * (ima_cr-128)
ima_ycbcr2rgb[:,:,1] = 1.164383 * (ima_y-16) - 0.391762 * (ima_cb-128)- 0.812969 * (ima_cr-128)
ima_ycbcr2rgb[:,:,2] = 1.164383 * (ima_y-16) + 2.017230 * (ima_cb-128)

RGB2Gray

一、基础
  对于彩色转灰度,有一个很著名的心理学公式:

Gray = R*0.299 + G*0.587 + B*0.114

二、整数算法

  而实际应用时,希望避免低速的浮点运算,所以需要整数算法。
  注意到系数都是3位精度的没有,我们可以将它们缩放1000倍来实现整数运算算法:

Gray = (R*299 + G*587 + B*114 + 500) / 1000

  RGB一般是8位精度,现在缩放1000倍,所以上面的运算是32位整型的运算。注意后面那个除法是整数除法,所以需要加上500来实现四舍五入。
  就是由于该算法需要32位运算,所以该公式的另一个变种很流行:

Gray = (R*30 + G*59 + B*11 + 50) / 100

  但是,虽说上一个公式是32位整数运算,但是根据80x86体系的整数乘除指令的特点,是可以用16位整数乘除指令来运算的。而且现在32位早普及了(AMD64都出来了),所以推荐使用上一个公式。

RGB2YCbCr RGB2Gray相关推荐

  1. Matlab 常用的图像处理方法

    文章目录 Matlab 常用的图像处理方法 RGB转灰度 噪声添加 滤波 中值滤波 均值滤波 sobel算子处理 图像形态学运算 Reference Matlab 常用的图像处理方法 RGB转灰度 R ...

  2. 【MATLAB图像处理学习】

    记录一下吧,本科专业对口专业设计院画图和工地打灰,我不太喜欢这两个工作.虽然感觉能考上,但是这一年有点学习惯了,考完了只感觉空虚,还是接着学点东西吧 记录一下学习的过程吧. 12月29日 工具箱,核心 ...

  3. Octave中无法使用rgb2gray()函数

    在Octave中加载图像并转成灰度图时,发现rgb2gray()函数不存在,上网搜了一下,stackoverflow上给出了相关解释,如下: The problem is that you didn' ...

  4. Octave: 'rgb2gray' undefined error

    问题:Octave找不到类似在matlab中图像处理相关的函数,例如rgb2gray 解决办法:在使用前加载相应的图像包 在Octave命令行输入如下命令 pkg load image 下面的命令可以 ...

  5. 【学习 OpenCV】—— 色彩空间(RGB、HSV、rgb2hsv、rgb2gray 的实现)

    RGB 色彩空间的基础是对叠加型三原色(红绿蓝)的应用.之所以选择它们,是因为把它们组合起来后可以产生色域很宽(256*256*256)的各种颜色.实际上,人类的视觉系统( Human visual ...

  6. 关于Matplotlib实验中出现NameError: name ‘rgb2gray‘ is not defined的解决

    唉,这个问题搞了老半天!!! 废话少说,直接上解决方案:1:终端pip install install scikit-image 2:python项目中from skimage.color impor ...

  7. matlab中 rgb2gray() 函数 具体实现

    简介 rgb2gray是matlab内部一种处理图像的函数,通过消除图像色调和饱和度信息同时保留亮度实现将将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能,调用这个功能的格式是I = rgb2g ...

  8. 16位rgb2gray算法verilog移植

    用三级流水线 优化方法:整体扩大256倍,再右移8位 verilog代码 //==================local defines================== `define SIM ...

  9. Matlab报错:错误使用 rgb2gray>parse_inputs (第 79 行) MAP 必须为 m x 3 的数组。请对 RGB 和灰度图像使用 im2gray。

    拟解决问题: Matlab报错:错误使用 rgb2gray>parse_inputs (第 79 行) MAP 必须为 m x 3 的数组.请对 RGB 和灰度图像使用 im2gray. 下述程 ...

最新文章

  1. 2012_Houdini_ShowReel.
  2. FZU - 2042 The Mad Mathematician(数位dp)
  3. Linux 系统下显示文件内容(查看文件内容)的命令 more/less/cat/head/tail 比较
  4. SMSSMS垃圾邮件检测器的专业攻击
  5. oracle统计学生成绩c,Oracle11g学生成绩管理系统.docx
  6. java+selenium模拟登陆新浪微博demo
  7. 一些比较恶心的代码片段
  8. Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
  9. matlab freqs函数用法,Matlab freqs 函数
  10. HDU 3480 Division(斜率DP裸题)
  11. 一个简单的音乐网站项目
  12. visio 2013免费激活
  13. Ant Design vue 表格内换行
  14. html中设置粗斜体,HTML基础 b i 字体加粗 斜体
  15. 解决Centos8自带Firefox实现播放声音与视频-Linux、VMware
  16. Excel利用公式向导快速设置成绩的评级系统!
  17. input 测试工具 --evtest
  18. 支付宝APP支付申请配置过程详解
  19. 【架构师技能篇】Worker初识
  20. 计算机二级系统班C语言讲义,计算机二级C语言讲义8

热门文章

  1. python 爬取菜单生成菜谱,做饭买菜不用愁
  2. 【矩阵论】2. 矩阵分解——正定阵分解
  3. 扫地僧Backtrader给力教程:量化回测核心篇(全集)
  4. Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
  5. 配电运维日常电力现状及畅谈配电行业的多样化
  6. 2018 icpc北京网络赛C cheat 模拟
  7. 思岚科技发布SLAMWARE ROS SDK,全面支持ROS系统
  8. linux ipv6内核编译,linux ipv6内核设置
  9. iOS实现头像选取(照相或者图片库)、大小等比缩放、生成圆形头像
  10. 必须了解的银行卡知识