2

有没有更好的方法将(RGB)图像转换为灰度比

在此处输入图像描述

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

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

4

4 回答 4

4

这不像要一份食谱那么简单——你需要定义你需要什么。

您使用的变换可以追溯到彩色电视的早期,当时需要一种方法来分别编码模拟广播信号中的亮度和色度,同时考虑到可用于传输色度的带宽要少得多的事实比亮度。编码与黄绿色带中人类视网膜中视锥细胞的较高相对敏感性非常松散相关。

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

于 2013-06-19T17:16:50.477 回答
2

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

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

我推荐 HSV,因为它对我来说非常有效,可以非常可靠地克服图像中的阴影。

于 2013-06-18T17:21:52.660 回答
1

您可以在 Lab 中使用的一个技巧是忽略 L 通道,然后其他两个通道只会给出颜色变化。如果您想找到一个有强光照射的物体的边界,这将非常有效。

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

Lab 是一种“感知”色彩空间,它试图匹配眼睛中的非线性。也就是说,靠近的 Lab 数字将被人类感知为非常相似,而差异很大的 Lab 数字将被感知为非常不同。 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的亮度值。

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

将 RGB 转换为灰度的最佳方法取决于您的图像来自哪里以及您想用它做什么。

值得查看 OpenCV cvtColor()文档。

于 2013-06-20T14:17:41.763 回答
0

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

于 2014-01-06T03:18:26.007 回答