3

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

图像场景:1024x786 人物:36x49

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

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

  • 高斯滤波器
  • 卷积
  • 快速傅里叶变换

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

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

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

4

3 回答 3

2

在 Andrew Ng 的机器学习课程中,我们使用神经网络和滑动窗口解决了这个问题:

  1. 训练一个神经网络来识别你正在寻找的特定特征,使用带有图像标签的数据,使用 36x49 窗口(或你想要的任何其他大小)。
  2. 要识别新图像,请取 36x49 矩形并将其滑过图像,在每个位置进行测试。当您移动到一个新位置时,将窗口向右移动一定数量的像素,称之为jump_size(比如 5 个像素)。当您到达图像的右侧时,返回 0 并将y窗口的 增加jump_size

神经网络对此有好处,因为噪声不是一个大问题:你不需要移除它。这也很好,因为它可以识别与以前看到的图像相似但略有不同的图像(面部角度不同,光线略有不同等)。

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

于 2012-04-17T12:49:17.497 回答
0

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

于 2012-04-17T12:47:46.883 回答
0

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

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

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

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

于 2012-08-07T21:46:21.400 回答