简介:

把一个彩色图像,也称为 RGB(红,绿,蓝)图像转化为灰度图像的行为称为彩色图像灰度化处理。也就是由原来的三个通道 RGB 转化为一个通道 YCrCb(从三个亮度值转换为一个亮度值), 也即 YUV(亮度,饱和度)的过程。常见的 24 位深度彩色图像 RGB888 中的每个像素的颜色由 R、G、B 三个分量决定,并且三个分量各占 1 个字节,每个分量的变化范围是 0~255。而灰色图像是一种特殊的彩色图像,其一个像素点的变化范围是 0~255,所以在进行图像处理的过程中,用灰度图像会比 RGB 图像少了很多计算量。想要进行彩色图像灰度化处理,有 4 种方法,以下会一一讲解。

加权平均法:

这也是彩色图像灰度化处理最常用的一种方法,其原理是将三个分量以不同的权值进行加权平均,其公式为

这里 0.299 + 0.587 + 0.114 = 1 ,这里刚好是满偏,这是通过不同的敏感度以及经验总结出来的公式。 在 Verilog 进行编写的过程中,为了能减少浮点运算以及除法运算导致运行速度过慢,在实现的过程中一般都是先扩大 1024 倍再缩小 1024倍来实现算法,如:

也即

因为 1024 是 2 的  10 次幂(这里只需要是 2 的 n 次幂就可以),所以可以采用移位寄存器的方法来处理。

最大值法:

将彩色图像中的三个彩色分量 R,G,B 的最大值作为灰度图的灰度值。具体表达式如下。

这个方法相比于上一个方法就比较简单了,最后的结果可能会略有偏差。

分量法:

将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。具体表达式如下。

gray1 ( i , j ), gray2 ( i , j ), gray3 ( i , j ) 为转换后的灰度图像在( i , j )处的灰度值, R( i , j ),G( i , j ),B( i , j ) 分别为转换前的彩色图像在( i , j )处 R、G、B 三个分量的值。

平均值法:

将彩色图像中的三分量的亮度求平均得到一个灰度值。如下:

RGB 与 YUV 相互转换:

RGB ⇒ YUV

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

U = - 0.1687 * R - 0.3313 * G + 0.5 * B +128

V = 0.5 * R - 0.4187 * G - 0.0813 * B +128

Y ≈ (( 77 * R + 150 * G + 29 * B ) >> 8)

U ≈ (( -43 * R - 85 * G + 128 * B ) >> 8) + 128

U ≈ (( 128 * R - 107 * G - 21 * B ) >> 8) + 128

Y ≈ (( 77 * R + 150 * G + 29 * B ) >> 8)

U ≈ (( -43 * R - 85 * G + 128 * B  + 32768 ) >> 8)

U ≈ (( 128 * R - 107 * G - 21 * B + 32768 ) >> 8)

最后的公式可以避免在运算过程中产生的有符号数对结果产生影响。移位操作可以将 16 位寄存器的高八位直接赋给所需输出的 Y 、U 、V 信号,这样能不消耗更多的逻辑。

在实现算法的过程中,我们可以先设计三个阶段实现这个公式,第一个阶段是把系数乘法,也就是把如 ( 77 * R )、( 150 * G ) 的结果算出来,第二个阶段是把第一阶段算出来的结果加在一起,第三个阶段是把所得到数据的高八位赋给输出的 Y 、U 、V 信号,也就是移位运算。总结一下就是第一个阶段算乘法,第二个阶段算加法,第三个阶段进行移位操作。

YUV ⇒ RGB

R = Y + 1.402 * ( V - 128 )

G = Y - 0.34414 * ( U - 128 ) - 0.71414 * ( V - 128 )

B = Y + 1.772 * ( U - 128 )

R ≈ ( 256 * Y + 359 * V - 45940 ) >> 8

G ≈ ( 256 * Y - 88 * U - 183 * V + 34678 ) >> 8

B ≈ ( 256 * Y + 454 * U - 58065 ) >> 8

这里为了实现 YUV ⇒ RGB 我们设定了 4 个阶段,前三个阶段与 RGB ⇒ YUV 相同,第四个阶段就是要判断最后算出来的 R 、G 、B 信号是否是负数,是否大于 255 ( R 、G 、B 是 8 bit),如果是负数,则将其直接赋值为 0 ,如果大于 255 就将其直接赋值为 255 。写代码判断时,可以用三目运算符,先判断是不是负数,在判断是不是大于 255 。判断大于 255 这个环节,可以把赋值的寄存器比输出信号高一位,判断最高位(也就是第 9 位)为 1 ,则该结果大于 255 。

上述方法实现转换所占用的资源较多(乘法器所占资源较大,且在多位乘法中会出现时钟延时)。为了节省资源,我们可以选用向左移位的方式来计算乘法(左移 n 位即乘上),例如:77 * R 可以写成 (R << 6) + (R << 3) + (R << 2) + R 的方式,用移位寄存器代替乘法器,从而节省资源以及乘法器可能带来的时间延时。

彩色图像灰度化 (RGB ⇒ Gray )(RGB ⇒ YUV)(Verilog)相关推荐

  1. RGB彩色图像灰度化经验公式

    来源自我的博客 http://www.yingzinanfei.com/2017/02/04/rgbcaisetuxianghuiduhuajingyangongshi/ 将彩色图像灰度化,常采用的经 ...

  2. opencv入门课程:彩色图像灰度化和二值化(采用skimage库和opencv库两种方法)

    用最简单的办法实现彩色图像灰度化和二值化: 首先采用skimage库(skimage库现在在scikit_image库中)实现: from skimage.color import rgb2gray ...

  3. 【转】c#数字图像处理(二)彩色图像灰度化,灰度图像二值化

    转自:https://www.cnblogs.com/dearzhoubi/p/8571652.html 为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法 ...

  4. C语言数字图像处理---1.2 彩色图像灰度化和二值化

    本篇主要讲述32位彩色图像的灰度化和二值化内容. [彩色图像灰度化] 1.定义 在上一节中,我们介绍了8位单色灰度图,它使用0-255来表示一个像素,但在实际使用中,我们最常用的还是彩色图像灰度化.对 ...

  5. matlab实现彩色图像灰度化的三种方法

    一.概要 将彩色图像转换为灰度图像的过程称为灰度化处理. 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程. 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中最大的 ...

  6. 图片识别为什么大部分都将彩色图像灰度化

    对于图片识别灰度化的原因这里根据自己的理解和网上看到的一些自己觉得合理的解释这里做个大概总结,如有错误欢迎大神们打脸指正 最直接的原因:减少计算量 包含色彩的图片,特征量,计算量会成指数倍数增加 比如 ...

  7. 3 - 图片灰度化与转换为八位灰度图片

    参考资料:彩色图像灰度化 图片灰度化与转换为八位灰度图片 1.灰度化公式 2.24 位真彩图灰度化 3.24 位真彩图转换成 8 位灰度图片 1.灰度化公式 彩色图像灰度化的算法公式一般有如下两种:明 ...

  8. Unity3D Shader系列之UI Image灰度化

    目录 1.灰度化是什么 2.灰度值计算方法 3.灰度化的目的 4.Shader实现 5.参考文章 在<OpenCV for Unity学习笔记(1)--Mat及灰度化图像>我们看到,使用O ...

  9. 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  10. MATLAB:虹膜识别的图像灰度化处理,直方图均衡化

    (1)图像灰度化处理: 读取一张图片之后,进行灰度化处理,然后对其进行直方图均值化. clear;close all %读取原图地址 RGB= imread('D:\img\1.jpg'); %图像灰 ...

最新文章

  1. 有关于mfc webbrowser插件的使用
  2. 磁盘IO:缓存IO、直接IO、内存映射
  3. Appium进行iOS自动化测试时遇到的问题及解决办法
  4. 通过单步调试的方式学习 Angular 中 TView 和 LView 的概念
  5. fiddler过滤特定资源
  6. ESXI转HYPER-V,问题接二连三啊(VMDK转VHD)
  7. Wordpress 与 Sphere 结为合作伙伴
  8. JAVA Swing 事件监听
  9. 深入理解kafka_深入理解Kafka随书代码示例已整理完毕,附地址~
  10. cocostudio html5,Cocostudio的简单使用:
  11. Hadoop学习路径
  12. 安洵信息渗透工程师面试经验分享
  13. CodeForces - 1077(div3) E.Thematic Contests(枚举+二分)
  14. python高级变量类型
  15. jquery延时执行
  16. PAT乙级 1052 卖个萌 (0/20 分) Java 未实现
  17. iOS开发中常用的那些工具
  18. 没有美术基础学游戏建模怎么样?
  19. 浪潮8460m4安装linux,NF8460M4(DDR4) – IPMI设置
  20. 分辨率和清晰度的区别关系

热门文章

  1. 令牌桶算法和漏桶算法python_如何实现漏桶算法与令牌桶算法
  2. python最优分箱计算iv值_基于sklearn决策树的最优分箱与IV值计算-Python实现
  3. EEGLAB 脑电数据处理与分析
  4. 闪耀超颖光栅的建模与设计
  5. uniapp移动端实现pdf预览
  6. 【Axure原型】新闻资讯客户端APP原型 今日头条同类APP实战原型
  7. 2021 最新版《神经网络和深度学习》中文版.pdf
  8. 《Redis视频教程》(p2)
  9. 微信小程序登陆方式,详细代码步骤如下。
  10. MYSQL 数据库的常用语句