用C#检测伪造图像?

时间:2009-11-09 11:25:03

标签: c# .net algorithm image-processing

我的一个朋友提出了一个有趣的问题 - 假设我们在系统中有一组图像。现在,有人可能会通过略微修改已提交的任何图像来提交新图像,在这种情况下,系统应报告提交的图像是伪造的图像。

我可以考虑两种解决方案。

解决方案1 ​​ - 使用数据库中的给定图像对每个输入图像进行图像比较(基于位图),可能在将它们转换为灰度以对抗颜色变化技巧之后,以及在将它们调整为标准尺寸之后。

解决方案2 - 创建自组织地图并使用所有现有图像进行训练。如果有人提交了一张图片,如果它有一个紧密的匹配,请将其报告为伪造。

可能无法使系统的准确度超过90%。请分享您的想法/建议/解决方案。

通过几个答案后编辑:我已经有一个backprop神经网络和一个基于xml的语言来训练神经网络 - http://www.codeproject.com/KB/dotnet/neuralnetwork.aspx

我期待着针对上述问题的具体答案。

由于

6 个答案:

答案 0 :(得分:2)

很好的问题,但取决于你想写多少代码。如果我镜像/翻转图像,剪切和粘贴图像,该怎么办?当你解决这个问题时,你也破解了大多数CAPTCHA?

如果您有很多马力和编程工时,您可能需要查看Forier Transformations和Historgams来查找匹配项。这将识别翻转/镜像复制/粘贴。

然后创建大量的测试片段,比如单元测试(?),例如“可以在源中找到这一部分图像”“可以在找到色调旋转时使用这一点”等等。

非常开放的问题

答案 1 :(得分:2)

猜猜你可以从Image Recognition with Neural Networks开始。

基本上我认为它涵盖了您的解决方案2方法。至少你会找到有用的神经网络指导以及如何训练它们。

答案 2 :(得分:2)

这里肯定会在性能和准确性之间进行权衡。您可以使用神经网络,但可能首先需要一些预转换:例如http://en.wikipedia.org/wiki/Image_registration。 有几种更有效的算法,如直方图比较。检查Wikipedia上的细分文章:en.wikipedia.org/wiki/Segmentation_%28image_processing%29

答案 3 :(得分:1)

我认为最简单的解决方案是简单地隐藏在系统中的digitally watermark图像,并添加新图像。

添加新图像时,只需检查数字水印的痕迹。

答案 4 :(得分:0)

没有冒犯,但这可能是“如果你只知道一把锤子,每个问题看起来像一个钉子”的情况。人工神经网络不是一切的好方法。如果您只是计算存储图像与“伪造候选者”之间的逐像素均方差,则可能更可靠地判断图像相似度。

我还建议将所有图片调整为例如50x50像素并在比较它们之前执行直方图均衡。这样你可以忽略图像大小调整和全局亮度对比度的变化。

答案 5 :(得分:0)

经过一番研究,我认为最好的方法是使用自组织映射(SOM)方法。

我们的想法是首先使用可用/有效图像自我训练SOM网络,然后在插入新图像时,找到最近的图像,如果在阈值下找到匹配,则报告相同。

AForge是一个很棒的图书馆,支持SOM(http://code.google.com/p/aforge/

有关基本SOM的信息here

关于SOM here

的详细阅读