将扫描图像(标签)与原始

时间:2016-07-13 11:17:14

标签: image-processing

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

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

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

添加样本照片。

原件: -
Original

扫描: -
Scanned

1 个答案:

答案 0 :(得分:1)

进一步思考

正如我在评论中所解释的那样,我认为原始图像和扫描图像的注册将非常重要,因为您的扫描不是完全水平也不是相同的尺寸。要进行原始配准,您可以找到一些高对比度的点,这些点在原始图像中是有希望的。所以,假设我想在左上角(称为tl.jpg),一个在右上角(tr.jpg),一个在左下角(bl.jpg),一个在左上角右下角(br.jpg)。我可以选择这些:

enter image description here [enter image description here] [enter image description here] 3 enter image description here

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

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

enter image description here enter image description here

它显示了我找到子图像的位置,第二个(灰色)图像显示了图像实际位于的白色峰值。它还告诉我子图像位于原始图像中的坐标[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

enter image description here enter image description here

好的,我们可以得到4个点,一个靠近原始图像的每个角落,以及它们在扫描图像中的相应位置。然后我们需要进行仿射变换 - 我将来可能会或可能不会这样做。关于如何做到的注意事项here

原始答案

如果您能够提供一些样本图像以显示标签所期望的问题,那将会有所帮助。但是,我们假设你有这些:

label.png

enter image description here

unhappy.png

enter image description here

unhappy2.png

enter image description here

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

如果你使用Fred Weinhaus的高级website脚本similar,你现在可以计算原始图像和不满意图像之间的标准化互相关。因此,采用原始标签和带有一条白色轨道的标签,它们非常相似(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

的新图像进行比较

enter image description here

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

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