目标检测 - 算法建议

时间:2012-04-17 12:37:16

标签: c++ algorithm image-processing computer-vision fft

我正在尝试用C ++进行图像检测。我有两张图片:

图像场景:1024x786   人:36x49

我需要从现场识别这个特定的人。我试图使用相关但图像太嘈杂,因此无法给出正确/准确的结果。

我一直在思考/研究最能解决这项任务的方法,而这些方法似乎最合乎逻辑:

  • 高斯滤镜
  • 卷积
  • FFT

基本上,我想移动图像周围的噪音,然后我可以使用相关来更有效地找到这个人。

我知道FFT很难实现和/或可能很慢,尤其是我正在使用的图像大小。

有人可以提供解决这个问题的任何指示吗?最好的技术/算法是什么?

3 个答案:

答案 0 :(得分:2)

在Andrew Ng的Machine Learning class中,我们使用神经网络和滑动窗口来解决这个问题:

  1. 使用36x49窗口(或您想要的任何其他尺寸)训练神经网络识别您正在寻找的特定功能,使用带有标签的数据,使用36x49窗口。
  2. 用于识别新图像,取36x49矩形并在图像上滑动,在每个位置进行测试。当您移动到新位置时,将窗口向右移动一定数量的像素,将其称为jump_size(例如5像素)。当您到达图片的右侧时,请返回0并按y增加窗口的jump_size
  3. 神经网络对此有好处,因为噪音不是一个大问题:您不需要将其删除。它也很好,因为它可以识别类似于之前看到的图像,但略有不同(面部角度不同,光线略有不同等)。

    当然,缺点是你需要训练数据才能做到这一点。如果您没有一套预先标记的图像,那么您可能会运气不好 - 尽管如果您拥有Facebook帐户,您可以编写一个脚本来拉取您和您朋友的所有标记照片并使用它。 / p>

答案 1 :(得分:0)

当您已经使用kd-tree或分层树对图像进行排序时,FFT才有意义。我建议将图像2d rgb值映射到1d曲线,并在频率分析之前降低一些复杂性。

答案 2 :(得分:0)

我没有提出确切的算法,因为我发现目标检测方法在很大程度上取决于具体情况。相反,我有一些提示和建议。以下是我的建议:找到目标的特定特征并围绕它设计代码。

例如,如果您可以访问彩色图像,请使用Wally没有太多绿色和蓝色的事实。从红色图像中减去蓝色和绿色的平均值,你将有一个更好的起点。 (在图像和目标上应用相同的操作。)但是,如果噪声与颜色有关(即:每种颜色不同),这将不起作用。

然后,您可以在转换后的图像上使用相关性,并获得更好的结果。相关性的负面影响是,它只能用于第一张图像的精确切割...如果你需要找到目标来帮助你找到目标,那么它就不是很有用!相反,我认为你的目标的平均版本(许多Wally图片的组合)可以在某种程度上起作用。

我的最终建议:根据我个人使用嘈杂图像的经验,光谱分析通常是一件好事,因为噪声往往只会污染一个特定的尺度(希望与Wally的尺度不同!)此外,相关性在数学上等同于比较图像和目标的光谱特征。