彩色图像灰度化 (RGB ⇒ Gray )(RGB ⇒ YUV)(Verilog)

这篇具有很好参考价值的文章主要介绍了彩色图像灰度化 (RGB ⇒ Gray )(RGB ⇒ YUV)(Verilog)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介:

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

加权平均法:

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

rgb转灰度,fpga开发,图像处理

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

rgb转灰度,fpga开发,图像处理

也即  

rgb转灰度,fpga开发,图像处理

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

 rgb转灰度,fpga开发,图像处理

最大值法: 

        将彩色图像中的三个彩色分量 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转灰度,fpga开发,图像处理

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

V ≈ (( 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) 

V ≈ (( 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 的方式,用移位寄存器代替乘法器,从而节省资源以及乘法器可能带来的时间延时。文章来源地址https://www.toymoban.com/news/detail-824137.html

到了这里,关于彩色图像灰度化 (RGB ⇒ Gray )(RGB ⇒ YUV)(Verilog)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 颜色模型:16进制颜色、RGB、RGBA、HSL、HSA、HSB、LAB、LCH、HSV、YUV、XYZ、YCbCr、CMYK、Gray颜色 / 前端能用吗 / DEMO

    一、16进制颜色模型 16进制颜色是一种用16个字符(0-9,a-f)来表示颜色的方式。其中前两个字符表示红色分量,接下来两个字符表示绿色分量,最后两个字符表示蓝色分量。每个分量的取值范围为00到FF(十进制的0-255)。 16进制颜色是在网络和Web开发中最常用的颜色编码方式

    2024年02月21日
    浏览(42)
  • 【图像处理】音视频色彩:RGB/YUV

    目录 1.RGB  1.1介绍        1.2分类 1.2.1RGB16 1)RGB565 2)RGB555 1.2.2RGB24 1.2.3RGB222 /

    2024年02月20日
    浏览(47)
  • 图像处理算法大全(基于libyuv或IPP)----RGB32(ARGB)转成yuv420,RGB24,nv12,yuv422集合

    《周星星教你学ffmpeg》技巧 libyuv源码:  ok!打完收工!

    2024年02月07日
    浏览(42)
  • python将RGB图像转为灰度图像

    本文参考论文SeAFusion模型中的图像预处理。 以图像尺寸为[1, 3, 480, 640]为例 三通道操作 单通道操作(本身就是灰度图像) 以图像尺寸为[1, 3, 480, 640]为例 三通道操作 参考文章: SeAFusion论文代码 numpy 与 torch中压缩、扩展维度的方法 TypeError: Cannot handle this data type: (1, 1, 28), |u1 to

    2024年02月12日
    浏览(39)
  • 视频图像的两种表示方式YUV与RGB(4)

    本篇主要讲YUV与RGB之间的转换,包括YUV444 颜色编码格式 转为 RGB 格式 ,RGB颜色编码格式转为 YUV444 格式。 一、 YUV与RGB之间的转换 YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV 的具体子采样格式 : YUV444 YUV42

    2024年04月11日
    浏览(39)
  • RGB空间中的彩色图像分割原理及其python实现

    ⭐️ 为尊重原创性 !转载请注明出处:©️ Sylvan Ding’s Blog 本文论述了基于欧式距离和曼哈顿距离的彩色图像分割算法,并用python实现了各个算法。之后将二者的优势结合,提出了改进后的曼哈顿距离算法:基于 加权曼哈顿距离 的彩色图像分割算法,在分割效果和速度上超

    2023年04月22日
    浏览(44)
  • 在opencv中,RGB转gray,gray再转RGB,为何色彩不同?

    在将RGB图像转换为灰度图像时,颜色信息会丢失,因为灰度图像只包含亮度信息而不包含颜色信息。灰度图像的每个像素只有一个通道,表示亮度级别,而不是红、绿、蓝三个通道的组合。 当你将灰度图像再次转换回RGB图像时,OpenCV会将每个灰度像素值映射回RGB空间中。由于

    2024年02月15日
    浏览(31)
  • 如何将yuv420p图像数据转换为RGB数据并使用opencv保存为jpg图片

    yuv420是用4个byte存储4个Y的信息,用1个Byte存储U的信息,一个Byte存储V的信息, 这4个Y共用这2个U和V ,也就是用6个Byte 存储4个像素信息,也就是一个像素需要12个Bits(6*8/4),也就是12bpp。 注意yuv420p里面的p是指planar,也就是分层存储,先存全部Y的信息,然后是U的信息,最后

    2024年02月16日
    浏览(36)
  • TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

    官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) CSDN数据集免费下载 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)

    2024年02月04日
    浏览(40)
  • 一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi-Planar、Interleaved

    目录 一、通用属性 1. Packed/Unpacked 2. 压缩/非压缩 二、RAW 1. Bayer格式 2. 分类 3. MIPI RAW 三、RGB 分类 四、YUV 1. YUV与RGB转换 2. 分类 3. 内存计算 五、压缩格式 有的人,错过了,一生再也找寻不到。 本文详细分析各种图像格式(RAW、RGB、YUV)的分类、内存分布。一篇文章让你看懂

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包