2013-05-21 107 views
0

我使用OpenCV中的输入图像转换为灰度图像的SURF功能。SURF和OpenSURF彩色图像

cvtColor(object, object, CV_RGB2GRAY); 

当我浏览OpenSURF的文档时,我意识到它不是灰度。

我的困惑是,我们可以将SURF应用于任何图像格式(YUV,HSV,RGB),或者我们必须改变和修改程序来实现这一点?

回答

1

大多数特征检测器都在灰度级上工作,因为它们分析图像补丁中边缘的图案。您可以在任何单色通道上使用您提及的颜色格式运行SURF,即可以在YUV图像上运行Y,U或V图像,也可以在HSV图像上运行H,S或V.不确定OpenSURF如何处理这个问题,但他们必须在内部使用灰度图像。

+0

此外:OpenSURF在计算完成后立即执行灰度转换积分图像(检测器需要)。请参阅'IplImage * Integral(IplImage * source)'执行'IplImage * img = getGray(source);'。 – deltheil

0

像OpenCV一样,如果您向OpenSURF发送的图像不是单通道,则会调用cvtColor(src, dst, CV_BGR2GRAY)。如果您通过YUV,HSV,Lab等任意一个3通道图像,事情会变得非常糟糕,因为图像将会应用不适当的颜色转换。

+0

因此,如果我使用YUV,例如我不得不在这种情况下通过Y通道,否则它也会出错。 – rish

+0

如果你只是通过Y通道(即单通道图像),它会很好(不会进行颜色转换)。顺便说一句,你可以使用cv :: split()将3通道YUV图像转换为包含3个单通道图像的矢量。 – Bull