目标检测 - 算法建议

3

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

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

我需要从场景中识别出这个特定的人物。我尝试使用相关性方法,但由于图像太嘈杂了,所以结果不正确/准确。

我一直在思考/研究最好解决这个任务的方法,以下是最合理的方法:

  • 高斯滤波器
  • 卷积
  • FFT

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

我知道实现FFT将很困难和/或可能很慢,特别是对于我正在使用的图像大小。

有人能提供解决方案吗?什么是最好的技术/算法?


5
给我们看图片,兄弟,这样我们才能根据所见来回答你的问题 :0 - user349026
嘿 - 它说我不能上传图片?基本上这是Wally(场景)和Wally本身的灰度图像.. 有什么帮助吗? - Phorce
调整它们的大小,必须符合尺寸限制或格式。请尝试使用不大于300x300的Jpeg格式。 - user349026
3个回答

2
在Andrew Ng的机器学习课程中,我们使用神经网络和滑动窗口解决了这个问题:
1. 使用带有图像标签的数据训练神经网络来识别你要查找的特定特征,使用36x49(或任何其他大小)的窗口。 2. 对于识别新图像,将36x49矩形滑动到图像上,在每个位置进行测试。当您移动到新位置时,将窗口向右移动一定数量的像素,称为`jump_size`(例如5个像素)。当您到达图像的右侧时,请返回0并将窗口的`y`增加`jump_size`。
神经网络在这方面表现良好,因为噪声不是一个巨大的问题:您不需要将其去除。它还可以识别与之前看到的略有不同但相似的图像(脸部角度不同,照明略有不同等)。
当然,缺点是你需要训练数据才能做到这一点。如果你没有一组预标记的图像,那么你可能会很倒霉。不过,如果你有Facebook帐户,你可以编写一个脚本来提取你和你的朋友标记的所有照片并使用它们。

嘿,谢谢你的回复。这不是真正的面孔(比如,实际的面孔),而是基本上一个“沃利在哪里”的任务。所以我可以将图像分成相同大小的块,然后只需移动图像并查看哪个给出最高的相关性,这就是位置。我已经尝试过这种方法,但没有得到我想要的预期结果,我甚至查看了块和矩阵,因为噪声问题,矩阵在场景中不存在。 - Phorce
相关性并不是一个很好的选择——如果图像只是稍微移动了几个像素,那么相关性可能并不强,即使它是完全相同的图像。 - robbrit
除了相关性之外,你有什么建议吗?http://codepad.org/Bvxwkqwm 是我目前的算法。有什么想法吗?谢谢。 - Phorce
正如我在原帖中提到的,我建议使用NN分类器。它是你尝试做的事情的一种泛化,所以你需要有一堆沃利的图片来训练分类器,但这不应该太难。相比基于相关性的系统,它会好得多,我向你保证! - robbrit

0

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


0

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接