一文读懂图像三原色原理
本书后面的篇幅将重点讲基于Matlab与FPGA的数字图像处理。但在正式开始之前,我们不得不再得巴拉巴拉一下,图像的成像原理。知其然要知其所以然,了解图像的成像原理,对于图像数据的组成,算法的处理以及显示成像等,均有帮助。
从牙牙学语起,我们开始认知世界的五彩斑斓,或是草丛的绿油,或是晚霞的红火,或是麦穗的金黄,或是大海的蓝色,亦或是惊艳的彩虹。我们无比迷恋那缤纷的花海,甘愿倾城沉醉那花香,这是来自大自然的馈赠,也是我们对色彩不懈追求与陶冶。
颜色通常由三个独立的分量来描述,相互综合得到最终的结果,这个三个变量变构成了一个XYZ空间坐标系,这就是颜色空间,而不同的颜色空间只是从不同的角度去衡量而已。颜色空间可以分成基本的两大类:三原色颜色空间,即RGB;色度/亮度颜色空间,即YUV/HSV(这里HSV不作为重点解释)。
计算机处理色彩为了匹配显示器,采用了RGB三原色,同时每种颜色有256个细分深度,因此三种颜色的分量混合叠加出224种颜色。红蓝绿三色能够混合出其他颜色,不是真的产生了其他颜色,只是你感觉上以为是那一种颜色。电视机上无论看上去是什么颜色,你用三棱镜做一下光谱,只能做出红蓝绿三种颜色,做不出自然光那样的彩虹式完整光谱。红蓝绿三原色的根本原因是我们人类的只有三种感光细胞,分别主要感知三个频段的光。红绿蓝三种颜色的频率正好落在这三个频段里,因此人类的眼睛结构被称作三色视觉系统。灵长类哺乳动物也都是三色视觉,而其他哺乳动物大多是两色视觉,鸟类则是四色视觉系统,海豚则是单色视觉系统。
YUV(YCbCr)是欧洲电视系统所采用的一种颜色编码方法,其向下兼容老式黑白电视,并且由于YUV422/YUV420等编码,可以有效地降低传输带宽。这里Y表示亮度,也就是灰阶值,而U/V则表示色度,用来描述色调及饱和度,用于指定像素的颜色。Y是由RGB特定部分叠加建立的,而Cr/Cb分别表示RGB输入信号红色/蓝色部分与RGB信号亮度之间的插值。
如下给出了RGB与YUV的转换公式(后面的章节会有具体FPGA转换案例):
此外,颜色还有四原色技术,比如印刷机的CMYK,这里的C是Cyan青色,M是Magenta品红色,Y是Yellow黄色,而K则是Black黑色最后一个字母(防止与Blue冲突)。理论上三种油墨就够了,但是由于高纯度的油墨暂时还不能实现,因为CMY相加是暗红色,因此为了确保黑色的输出,增加了专门的黑墨来调和(本身黑墨也用的最多)。
后来显示器后来也有了四原色技术:RGBY,夏普就有采用四原色技术的3D液晶显示器,可大大的提高液晶显示器的色彩表现能力。不过RGBY也是在RGB三原色的基础上增加了黄色元素,其根本还是三原色。
所以,从理论上讲,三原色已经可以满足我们对颜色的构成需求,同时也吻合我们人类的视觉系统,本书图像处理也将基于RGB三原色进行算法实现。
为了研究RGB三原色模型,需要从光线的底层物理意义开始分析。光也属于电磁波,与电磁波有着同样的特性,因此这里给出了电磁波波谱图,如下图所示。
在电磁波波段中,400~700nm范围内为可见光波段,即人类肉眼可见的光。大自然的色彩均是由可见光组成的。雨后的彩虹,或者三棱镜色散后呈现的“红橙黄绿青蓝紫”,便是自然光(白光)分解的结果。分解后的光频率与波长如下表所示。
所谓三原色模型,是认为人眼里有三种感光细胞(锥状感光细胞),分别对红色、绿色和蓝色最敏感。人眼之所以能看到各种颜色的光,主要是这三种细胞感觉综合的结果,因此红色、绿色、蓝色被称为三原色。
人眼在光线充足的环境中能见到五颜六色,而在光线比较暗的情况下,只能观察到物理的敏感程度,却不能感受到五颜六色的斑斓。因此,相关研究表明,人眼还存在另外一种可见光细胞——柱状细胞,用于对光线强度进行感应。这四种感光细胞对波长的敏感程度如下图所示。
这里的RGB三种感光细胞都可覆盖可见光范围,但是每一种细胞最敏感的波长不同。分别将能感应RGB的细胞称为红视锥细胞、绿视锥细胞、蓝视锥细胞。而每一种细胞并非刚刚好对准响应颜色的波长中心值,这一点主要取决于人眼,而非电磁波。人眼所看到的彩色图像,是RGB以不同强度混合进入眼睛后综合出来的结果。由这三种细胞受到不同强度反映的结果组合出颜色,称为“三颜刺激”。
在计算机中,使用最广泛的就是RGB模型了。计算机使用离散的数字信号来描述数据,RGB模型也不例外。针对同一强度的RGB三原色,可以组成2*2*2=8种颜色,如上图所示。
饱和度均为 100%的RGB三原色组合模式与组合后的结果如下表所示。
1677万种颜色对于我们的人眼感光而言,已经足够表示真彩图像了。计算机的处理、大部分LCD的显示接口都采用了RGB888的模式。
当图像要求不是很高,同时设备带宽限制时,还可以采用RGB565、RGB444等三原色深度模型。由于人眼的分辨率有限,RGB565所组合产生的216=65536种颜色已经足够,所以在带宽、成本等条件限制下,RGB565也比较常用;同时,16bit彩色图像也更适用于16位宽存储器的缓存(以字节为单位,24bit存储器不常见),接下来的设计中采用的就是RGB565模型。
对于16bit彩色的显示,RGB分别占的位数为5 : 6 : 5模式,也就是红色用5位表示、绿色用6位表示、蓝色用5位表示,如下图所示。
RGB565已经能满足大部分场合的要求,但在要求较高的场合,一般采用RGB888、RGB30甚至更高深度的RGB,通过Gamma来提高图像的宽动态效果。
由于PC为RGB888色彩空间,因此本书后续章节图像处理,无论基于Matlab或者FPGA,均采用RGB888进行计算。
I am CrazyBingo!
本文为《基于Matlab与FPGA的图像加速处理教程》中的章节,在正式出版前,我将率先在公众号/博客中给大家分享出来,请大胆指正!!!
一文读懂图像三原色原理相关推荐
- 一文读懂贝叶斯原理(Bayes‘ theorem)
一文读懂贝叶斯原理(Bayes' theorem) 前言:贝叶斯定理是18世纪英国数学家托马斯·贝叶斯(Thomas Bayes)提出得重要概率论理论.以下摘一段 wikipedia 上的简介: 一. ...
- 一文读懂CDN加速原理
一文读懂CDN加速原理 什么是 CDN 工作原理 传统访问过程 CDN 访问过程 组成要素 智能调度 DNS 缓存功能服务 负载均衡设备 内容 Cache 服务器 共享存储 名词解释 CNAME记录( ...
- 一文读懂遗传算法工作原理(附Python实现)
Datawhale干货 选自:AnalyticsVidhya,编译:机器之心 近日,Analyticsvidhya 上发表了一篇题为<Introduction to Genetic Algori ...
- 一文读懂扩散模型原理、推断加速和可控生成
在刚刚过去的2022年,扩散模型(Diffusion Models)成为了深度生成模型中新的SOTA.近期,中国人民大学助理教授李崇轩和清华大学博士生鲍凡在由智源社区主办的"2022大模型创 ...
- 一文读懂图像局部特征点检测算法
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 研究图像特征检测已经有一段时间了,图像特征检 ...
- 摄像头图像分析目标物体大小位置_一文读懂图像定位及跟踪技术
文 | 传感器技术 在科学技术日新月异的今天,人们对机器设备的智能性.自主性要求也越来越高,希望其完全替代人的角色,把人们从繁重.危险的工作任务中解脱出来,而能否像人一样具有感知周围环境的能力已成为设 ...
- 一文读懂网络通信技术原理
一.网络的由来? 互联网的本质就是一系列的网络协议. 一台硬设有了操作系统,然后装上软件你就可以正常使用了,每个人都拥有一台自己的机器,然而彼此孤立. 如何能让大家一起玩耍,就有了初步的网络,其实两台 ...
- 一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码
文章较长,大家可选择性阅读,嘎嘎细 计算机结构 CPU的运行原理 CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指 ...
- 一文读懂chatGPT模型原理(无公式)
每天给你送来NLP技术干货! 来自:JioNLP 点击这里进群->加入NLP交流群 (本文是chatGPT原理介绍,但没有任何数学公式,可以放心食用) 前言 这两天,chatGPT模型真可谓称得 ...
最新文章
- C++ Primer 5th笔记(10)chapter10 泛型算法 :谓词
- redhat yum 安装 mysql_Redhat 7 下Mysql8.0.19安装配置图文详解(配合使用 centos YUM源)...
- linux c实现一个简单的sniffer
- 图解Transformer-一篇文章看懂transformer
- Java计算两日期相差天数源码
- SQL 的 left join 和 right join
- 微信公众号-通用百度翻译代码实现
- 【NLP Subword】三大算法原理:BPE、WordPiece、ULM
- Mac效率工具:Mosaic 1.3.3
- Android中类似Linux下ldd分析可执行文件和动态库对库的依赖
- UnityWebPlayer使用(2) 动态改变src
- C++ 小游戏程序 (共七款)
- 【WLAN】【基础知识】WIFI那些事儿之DFS
- 简单线性回归R和Python预测身高体重国内生产总值二氧化碳排放量
- 禁止每次打开edge自动在开始菜单创建Microsoft Edge 的 Edge 栏
- CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
- 云主机-本地内网通信OPEN-V
- keychron机械键盘使用感受
- 真是「狗」了,知乎「吃相」太难看了
- matlab 像素点的辐照度方程,用蒙特卡罗方法和MATLAB计算冷屏内壁表面辐射光线落入探测器芯片的比例...
热门文章
- 如何在 VS Code 中编写、运行C语言程序 教程
- centos 安装、配置metis
- Qt用SVG图片作为背景图
- matlab做二元garch m,多元garch模型的matlab程序如何运行?能否举例说明下啊,希望高手指点...
- 单片机 信号发生器(DAC0832)
- R329开发板根目录 ls 命令文件和文件名乱码其他目录不乱码问题解决
- PowerPoint 教程:如何在 PowerPoint 中从大纲创建演示文稿?
- 标准ACL,扩展ACL
- 数字图像处理在前端页面中实现
- JAVA中的“人妖”