【问题标题】:Compare scanned image (label) with original将扫描图像(标签)与原始图像进行比较
【发布时间】:2016-07-13 11:17:14
【问题描述】:

有一个原始的高质量标签。打印后,我们扫描样本并希望将其与原件进行比较,以查找打印文本中的错误。原始图像和扫描图像的大小几乎相同(但略有不同)。

ImageMagic 可以做得很好,但不能用于扫描图像(我想它会按位进行比较,但扫描图像包含很多“噪音”)。

有没有可以这样比较的实用程序?或者可能是一种算法(已实现或易于实现)——比如在信号处理中使用 Cauchy-Schwarz 不等式的算法?

添加示例图片。

原文:-

已扫描:-

【问题讨论】:

    标签: image-processing


    【解决方案1】:

    进一步的想法

    正如我在 cmets 中所解释的,我认为原始图像和扫描图像的配准将很重要,因为您的扫描不是完全水平的,也不是相同的尺寸。要进行粗略的配准,您可以找到一些希望在原始图像中独一无二的高对比度点。所以,假设我想要一个在左上角(称为tl.jpg),一个在右上角(tr.jpg),一个在左下角(bl.jpg),一个在右下角(@ 987654349@)。我可能会选择这些:

    [] []3

    我现在可以使用子图像搜索在原始图像和扫描图像中找到这些,例如:

    compare -metric RMSE -subimage-search original.jpg tl.jpg a.png b.png 
    1148.27 (0.0175214) @ 168,103
    

    这向我显示了找到子图像的位置,第二张(灰色)图像向我显示了图像实际所在的白色峰。它还告诉我子图像位于原始图像中的坐标 [168,103]。

    compare -metric RMSE -subimage-search scanned.jpg tl.jpg a.png b.png 
    7343.29 (0.112051) @ 173,102
    

    现在我知道同一点位于扫描图像中的坐标 [173,102] 处。所以我需要将 [173,102] 转换为 [168,103]。

    然后我需要对其他子图像执行此操作:

    compare -metric RMSE -subimage-search scanned.jpg br.jpg result.png 
    8058.29 (0.122962) @ 577,592
    

    好的,所以我们可以得到 4 个点,原始图像中每个角附近的一个,以及它们在扫描图像中的对应位置。然后我们需要做一个仿射变换——我将来可能会做,也可能不会做。有注意事项here.

    原答案

    如果您能够提供一些示例图像来显示您对标签的预期问题,这将有所帮助。但是,假设您有这些:

    标签.png

    不开心.png

    unhappy2.png

    我只在它们周围放了一个红色边框,这样你就可以看到这个白色背景上的边缘。

    如果您使用 Fred Weinhaus 的脚本 similar 来自他的出色 website,您现在可以计算原始图像和不满意图像之间的标准化互相关。因此,将原始标签和带有一条白色轨迹的标签放在一起,结果非常相似 (96%)

    ./similar label.png unhappy.png
    Similarity Metric: 0.960718
    

    如果我们现在尝试更不满意的一个,其中有两条轨道,它们不太相似 (92%):

    ./similar label.png unhappy2.png
    Similarity Metric: 0.921804
    

    好的,这似乎可行。我们现在需要处理偏移且大小不同的扫描,因此我将尝试修剪它们以仅获取重要的内容并将它们模糊以丢失任何噪声并调整为标准化大小以使用小脚本进行比较。

    #!/bin/bash
    image1=$1
    image2=$2
    fuzz="10%"
    filtration="-median 5x5"
    resize="-resize 500x300"
    echo DEBUG: Preparing $image1 and $image2...
    
    # Get cropbox from blurred image
    cropbox=$(convert "$image1" -fuzz $fuzz $filtration -format %@ info:)
    # Now crop original unblurred image and resize to standard size
    convert "$image1" -crop "$cropbox" $resize +repage im1.png
    
    # Get cropbox from blurred image
    cropbox=$(convert "$image2" -fuzz $fuzz $filtration -format %@ info:)
    # Now crop original unblurred image and resize to standard size
    convert "$image2" -crop "$cropbox" $resize +repage im2.png
    
    # Now compare using Fred's script
    ./similar im1.png im2.png
    

    我们现在可以将原始标签与名为 unhappy-shifted.png 的新图像进行比较

    ./prepare label.png unhappy-shifted.png
    DEBUG: Preparing label.png and unhappy-shifted.png...
    Similarity Metric: 1
    

    我们可以看到尽管被转移,但它们的比较相同。显然我看不到你的图像,它们有多嘈杂,你有什么样的背景,它们有多大,它们是什么颜色等等 - 所以你可能需要调整我刚刚完成中值过滤器的准备工作。也许您需要模糊和/或阈值。也许你需要去灰度。

    【讨论】:

    • 谢谢你,马克!我添加了示例图片(只是将它们设为原始大小的 30%)——它们有点复杂。你能告诉我你是否认为这种方法也适用于他们?
    • 嗯...您的图像更难处理,因为它们相对于彼此旋转,因此配准/对齐错误将主导或扭曲结果。我认为您需要在图像的每个角附近找到控制点并进行仿射变换以将扫描与原始图像对齐,然后继续执行上述方法。这不是我很快就有时间做的事情。我可能会识别出一个小方块,其中每个角附近的熵/对比度都很高,并在扫描图像中进行子图像搜索以识别控制点。
    • 非常感谢,马克!!即使你没有很快找到时间,如果你发表你的想法也会很棒。顺便说一句,它还需要显示图片不同的地方。所以我想我现在先暂停一下这项任务,以了解有关该主题的更多信息。
    • 一个问题 - 它总是相同的原始标签吗?或者你有很多不同的?
    • 这个想法是用于不同的,而不是我在这里展示的——这只是一个例子。但我认为我们可以将原件与同一标签的多次扫描进行比较。
    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2015-11-01
    相关资源
    最近更新 更多