搜索
bottom↓
回复: 22

请教:关于RGB到灰度图像的转换。

[复制链接]

出0入0汤圆

发表于 2010-3-15 08:38:41 | 显示全部楼层 |阅读模式
各位大侠们,在网上找了下好像没有用fpga将rgb图像转换成灰度图像的相关算法。因为里面涉及浮点运算,据说是因为用fpga来做的话,会很麻烦而且速度并不会很快。Gray = 0.299 * R + 0.587 * G + 0.114 * B,除法相当的耗费资源。灰度化是图像处理和模式识别的基础,我想问一下,在fpga上面一般是怎样实现灰度化的。
我看有很多人说:1,直接用g分量代替其他的分量;2,直接用r=1/3r+1/3g+1/3b,g=1/3r+1/3g+1/3b,b=1/3r+1/3g+1/3b,
有没有标准的算法啊?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-3-15 08:43:36 | 显示全部楼层
高度关注。

出0入0汤圆

发表于 2010-3-15 09:01:10 | 显示全部楼层
可以考虑定点近似公式,如:1024Gray = 306 R + 601 G + 117 B。实际上是公式两端同时乘以数,得到xG=aR+bG+cB;舍入为定点,调整并保证x=a+b+c。原始运算成为定点乘加和,然后移位。由于是右移,等价于低位舍弃,不需要实际的移位操作。

值得考虑的:
- Gray侧乘数为2的整次方,此时除法用移位代替。FPGA上就是舍弃低位。因此变为乘加和形式。
- 乘数是多少为最佳,需要另行写程序算一下。看原始浮点公式的整数舍入结果和定点公式结果误差的度量。针对特定公式,不一定越大越好。

浮点定点化是常干的事情。

出0入0汤圆

发表于 2010-3-15 09:38:57 | 显示全部楼层
http://www.cnblogs.com/oomusou/archive/2008/07/14/1242946.html

http://www.cnblogs.com/oomusou/archive/2008/08/23/de2_cmos_gray.html

参考这两个贴子

出0入0汤圆

 楼主| 发表于 2010-3-15 09:43:20 | 显示全部楼层
嗯,今晚上来看看二楼的算法。谢谢大家。

出0入0汤圆

发表于 2010-3-15 09:56:36 | 显示全部楼层
给你找个文件。。。
点击此处下载 ourdev_538406.pdf(文件大小:602K) (原文件名:让你的程序飞起来.pdf)

出0入0汤圆

发表于 2010-3-15 13:29:42 | 显示全部楼层
如果不十分要求精度,把乘法拆成加法,例如:16 Gray = (4 + 1) R + (8 + 1) G + 2 B => ((G + R) + (4R + 2B)) + 8G = 16 Gray。变成纯粹的移位/加法实现。后边的变形主要是节约加法器资源,适当优化加法路径而已。反正没太发现有啥太好做的。
反正都是原始公式的近似。算法到是看你的FPGA有多少资源,对速度等等有啥要求了。

5楼的文档后来是关于处理器的优化技巧,转换到FPGA上就是面积,速度的讨论,也有一些可做的事情。查表法可以有更好的优化结果。


修改补充:
- LZ的公式,是从RGB到Y的变换公式,提取的是RGB中的亮度信息。人眼对于亮度,远比其余的两个分量敏感。具体原理请参考JPEG压缩算法的介绍。它的第一步就是RGB到YCbCr的变换。
- 从人眼敏感度来看,敏感程度G>R>B,这也是在变换中体现出来的信息。和RGB各取1/3获得灰度相比,这个R/G/B不等权的变换更好的体现了人眼对于亮度的需求。换句话说,RGB比例越接近原始的那个公式的比例,主观感觉应该会更好一些。
补充的是根据一些额外信息的猜测,仅供参考和讨论。

出0入0汤圆

发表于 2010-3-15 13:42:58 | 显示全部楼层
关注!

出0入0汤圆

发表于 2010-3-15 14:40:48 | 显示全部楼层
用FPGA来做没有问题的,参考一下浮点运算的方法很快就搞定了。
我曾经转换过YCbCr->RGB和RGB->YCbCr,很容易的。

出0入0汤圆

 楼主| 发表于 2010-3-15 20:19:48 | 显示全部楼层
嗯,我来汇报下结果。
事实证明采用dr2001 的算法是可行的,能够实现灰度转换,而且我将采用这种方法的灰度转换和只用绿色分量做出来的灰度图进行比较,发现两者差别真的不大。可以考虑以后就用简单的绿色分量代替其他分量的算法。

(原文件名:rgb图像.JPG)

由于我灰度转换是在数据存入到sdram中之后才用的灰度转换,因此只能在显示器上看到效果,所以这里上传的只有rgb图像。
什么时候我把那个灰度转换模块搞到sdram之前去。

出0入0汤圆

发表于 2010-3-15 20:22:31 | 显示全部楼层
有灰度LCD嘛,4阶16阶的

出0入0汤圆

发表于 2010-3-15 20:25:53 | 显示全部楼层
怎么都能实现灰度转换,只不过看提取什么样的亮度信息。

单分量肯定是不够的,至少需要R+B+2G这样的类似DC的采样点阵。否则纯蓝和纯黑在单一分量下没区别。

出0入0汤圆

发表于 2010-3-24 15:37:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-24 15:44:51 | 显示全部楼层
RGB转换成YUV,提取亮度信号

出0入0汤圆

发表于 2010-5-16 06:58:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-16 18:59:49 | 显示全部楼层
下载了5楼的文件,谢谢楼上诸位。

出0入0汤圆

发表于 2010-5-20 02:12:42 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-7-13 10:58:45 | 显示全部楼层
强烈mark

出0入0汤圆

发表于 2010-7-13 12:39:08 | 显示全部楼层
学习了!!!

出0入0汤圆

发表于 2010-8-5 21:04:13 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-8-5 21:28:30 | 显示全部楼层
关注中……

出0入0汤圆

发表于 2010-8-6 08:29:40 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表