给定许多项目的图像,其所有边界框都以像素坐标着称。
我正在尝试提取每个项目周围的区域(周围),使用AKAZE计算其描述符和特征,以便相互比较。
但是我意识到这可能太慢了,因为它涉及:
1)裁剪每个单独的项目,然后生成许多图像,
2)检测并计算每个图像以生成关键点和描述符。
或者,为了加快速度,我想:
1)调整整个图像的大小,然后执行一次关键点的检测和计算。
2)然后,为了获得特定对象的关键点,我们只需检索与对象位置对应的预先计算的关键点集。
我的问题是这种方法功能合理,如果对此有任何后果?
答案 0 :(得分:1)
是的,这第二个策略是一个很好的方法。为了有效地执行此操作,您应该在调用OpenCV的detectAndCompute
(或detect
,如果您正在使用它)时提供掩码参数。你的面具应该与你的图像大小相同。在掩模的每个像素中,如果该像素不位于至少一个检测区域内,则该像素为零,否则其值为正(对于uchar掩模为255)。
事实上,对于第一种策略,您可能会在检测区域的边界出现问题,这些区域可能会遗漏特征点。这是因为特征检测和描述符计算需要处理每个像素周围的小像素窗口(在边界处不可用)。要正确处理,您需要在裁剪前放大检测区域。
关于效率,您应该意识到第二种方法存在开销,即完整图像将在特征检测之前进行一些图像预处理。对于AKAZE,这是非线性扩散,对于其他如SIFT和SURF,这是图像卷积。这些是建立所谓的图像金字塔所必需的。在您只有少量检测的情况下,第一种策略可以更有效(相对于图像预处理,图像裁剪的开销很小)。