更好地转换为灰色?

时间:2013-06-18 15:56:39

标签: opencv computer-vision color-space

是否有更好的方法将(RGB)图像转换为灰度而不是

enter image description here

这种方式产生光强度,这可能无法很好地标记物体以进行进一步处理。例如,如果我们有一些热点或反射,这将被描述为这种灰度级中的显着对象。

我正在尝试其他颜色空间,例如Lab,但是它的对比度很差。

4 个答案:

答案 0 :(得分:4)

要求食谱并不是那么简单 - 你需要定义你需要的东西。

当你需要一种分别对模拟广播信号中的亮度和色度进行编码的方法时,你使用的变换可以追溯到彩色电视的早期,同时考虑到可用带宽少得多的事实传输色度而不是亮度。编码与黄绿色带中人视网膜锥体的较高相对灵敏度密切相关。

没有理由盲目地使用它。相反,您需要清楚地表达您期望的转换的目标是什么,将该目标转换为(可量化的)标准,然后找到优化该标准的特定转换。变换可以是全局的(即,与您使用的电视一样)或自适应(即取决于当前像素的邻域中的颜色值),并且无论哪种方式它都可以是线性的(例如,再次,电视一个)或不是。

答案 1 :(得分:2)

由于人们实际上可以识别“阴影”和“反射”这两个术语,因此这是一个相当高级别的操作。此外,由于这些影响,一个人可能会“蒙蔽”或混淆。所以我会选择“不,没有明显更好的,低级别的方法来消除不同的亮度效果”。

你可以制作一个模块来检测相邻的亮度失真区域(基于色调和色度等线索,它们是否形成“拼图”等空间因素),并将它们拼接在一起。

我推荐使用HSV,因为它可以很好地克服图像中的阴影。

答案 2 :(得分:1)

您可以与Lab一起使用的技巧是忽略L通道,然后其他两个通道只会给出颜色变化。如果你想找到一个闪耀着明亮光线的物体的边界,这可能非常有效。

还有许多其他颜色空间可以将亮度与颜色信息分开,例如Lab。一些例子是HSV,YUV,YCrCb。只需选择最适合的效果,丢弃亮度并使用两种颜色的通道。

实验室是一个'感知'颜色空间,试图匹配眼睛中的非线性。即,人类可以感觉到非常相似的实验室数字,而实际数字大不相同的实验数字将被视为非常不同.RGB不能很好地工作。


关于您提到的转化的一些注意事项:

如果在OpenCV中使用CV_RGB2GRAY转换,它会使用您提到的系数。但是,这些是否正确使用取决于您拥有的RGB的味道。

您的号码适用于模拟电视(如NTSC和PAL)中使用的BT.601原色。 较新的HDTV和广泛用于计算机显示器和打印机的sRGB使用BT。 709原色,在这种情况下,转换应为Y = 0.2126 R + 0.7152 G + 0.0722 B,此处的Y由CIE 1931定义.Lab中的L通道也对应于CIE 1931亮度值。

然后是Adobe RGB,它可以代表比sRGB更多的颜色(它具有更宽的“色域”)。但我不认为OpenCV有转换它。

将RGB转换为灰度的最佳方法取决于图像的来源以及使用它的方式。

值得查看OpenCV cvtColor()文档。

答案 3 :(得分:0)

这个领域有一些作品。例如,这一个:http://dl.acm.org/citation.cfm?id=2407754