2016-09-26 54 views
1

我正在寻找一种最简单的方法来比较两个不同目录中的图像并确定最佳匹配。找到最佳匹配后,将图像保存到源目录中具有相同图像名称的新目录中。例如比较两个不同目录中的图像并确定最佳匹配

/path/to/src/img1, img2, img3....... 

/path/to/dest/img11, img22, img33..... 

/path/to/target/img1, img2, img3.... 

我做了一些研究网上,我发现使用ImageMagick compare命令,但我不干新无法弄清楚它是如何将在两个不同的目录与多张图片的工作,并命名对于图像到src目录的名称。 请问我是否无法简单向您解释我的问题。 任何帮助将不胜感激。提前致谢。

+0

这在一定程度上取决于您期望图像的差异。除了翻转一个轴之外,与另一个图像相同的图像将具有相同的最小/平均值/最大值和标准偏差,但可能没有两个像素相同。以略微不同的曝光拍摄的两幅图像可能在视觉上几乎不可区分,但没有两个像素相同。 –

+0

在我的情况下,我有在相同的相机角度拍摄的图像和它们的大小是相同的,但其中一个投影的模式和其他没有投影。 – jHz

+0

你能展示样品吗? –

回答

1

可以进行归一化每幅图像之间的当前目录和每个图像中的其他目录的互相关,找到哪一个具有这样的相关性最高:

#!/bin/bash 

# Work out list of source and destination files 
SRC=(*.jpg) 
DST=(../wop/*.jpg) 

# Ensure output directory exists 
TGT=result 
[ ! -d "$TGT" ] && mkdir "$TGT" 

for a in ${SRC[@]}; do 
    nearest=0 
    for b in ${DST[@]}; do 
     # Perform normalised cross-correlation with each image in other directory 
     result=$(convert "$a" "$b" -metric ncc -compare -format "%[distortion]" info:) 
     # Convert result to rounded integer percentage 
     percent=$(echo "scale=0;$result*100/1" | bc) 
     echo DEBUG compare $a with $b: $percent 
     # Update if this one is nearer than previous nearest 
     [ $percent -gt $nearest ] && { nearest=$percent; friend=$b; } 
    done 
    echo cp "$friend" "$TGT/$a" 
done 

输出

./go 
DEBUG compare 00000000.jpg with ../wop/00000007.jpg: 22 
DEBUG compare 00000000.jpg with ../wop/00000014.jpg: 17 
DEBUG compare 00000000.jpg with ../wop/00000015.jpg: 77 
cp ../wop/00000015.jpg result/00000000.jpg 
DEBUG compare 00000001.jpg with ../wop/00000007.jpg: 37 
DEBUG compare 00000001.jpg with ../wop/00000014.jpg: 71 
DEBUG compare 00000001.jpg with ../wop/00000015.jpg: 32 
cp ../wop/00000014.jpg result/00000001.jpg 
DEBUG compare 00000005.jpg with ../wop/00000007.jpg: 77 
DEBUG compare 00000005.jpg with ../wop/00000014.jpg: 36 
DEBUG compare 00000005.jpg with ../wop/00000015.jpg: 31 
cp ../wop/00000007.jpg result/00000005.jpg 
+0

我们怎么能说这些图像是相似的?我从输出中不理解。 – jHz

+0

十进制数是归一化的互相关 - 越接近1,图像越相似,因此000000.jpg与000015.jpg最为相似,并且00001.jpg与000014.jpg最为相似。 –

+0

好的,谢谢。我理解了逻辑,但是如何使用这些信息将图像从src目录复制到目标目录。 – jHz

相关问题