代码之家  ›  专栏  ›  技术社区  ›  amazedsaint

用C检测伪造的图像?

  •  4
  • amazedsaint  · 技术社区  · 15 年前

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

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

    解决方案1-对每个输入图像与数据库中的给定图像进行图像比较(基于位图),可能是在将它们转换为灰度以抵消颜色更改技巧之后,以及在将它们调整为标准大小之后。

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

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

    浏览少量答案后编辑 :我已经有了一个backprop神经网络和一个基于XML的语言来训练这里的神经网络。- http://www.codeproject.com/KB/dotnet/neuralnetwork.aspx

    我期待着为我上面描述的问题找到具体的答案。

    谢谢

    6 回复  |  直到 15 年前
        1
  •  2
  •   Dead account    15 年前

    好问题,但取决于你想写多少代码。如果我镜像/翻转图像,剪切和粘贴图像。当你解决这个问题时,你也破解了大部分的验证码?

    如果你有大量的马力和编程工时,你可能会想看更复杂的转换和组织来找到匹配。这将识别翻转/镜像复制/粘贴。

    然后创建许多测试片段,比如单元测试(?)例如“能在源中找到这一位图像吗?”“能在色调旋转时找到这一位吗”等等。

    非常开放的问题

        2
  •  2
  •   Jorge Córdoba    15 年前

    我猜你可以从 Image Recognition with Neural Networks .

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

        3
  •  2
  •   Igor Lankin    15 年前

    在性能和准确性之间当然存在着权衡。您可以使用神经网络,但可能需要先进行一些预转换:例如 http://en.wikipedia.org/wiki/Image_registration . 有几种更有效的算法,如直方图比较。查看维基百科上的分段文章:en.wikipedia.org/wiki/segmentation_28image_processing%29

        4
  •  1
  •   Winston Smith    15 年前

    我认为最简单的解决办法就是简单地隐身 digitally watermark 系统中已存在的图像以及添加的新图像。

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

        5
  •  0
  •   Niki    15 年前

    没有冒犯,但这可能是一种“如果你只知道锤子,每个问题看起来都像钉子”的情况。人工神经网络并不是解决所有问题的好办法。如果简单地计算存储图像和“伪造候选图像”之间的逐像素均方差,就可以更可靠地判断图像的相似性。

    我还建议将所有图像的大小调整为50x50像素,并在比较之前执行柱状图均衡。这样可以忽略图像大小调整和全局亮度对比度更改。

        6
  •  0
  •   amazedsaint    15 年前

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

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

    AFORGE是一个有SOM支持的优秀图书馆( http://code.google.com/p/aforge/ )

    基本SOM信息 here

    关于SOM的好文章 here