2013-01-18 104 views
-5

我有兩個圖像,我想要一個響應(true或false)來知道它們是不同的。 圖像尺寸不一樣。無論大小的Python圖像比較

+7

'return True' - 你去了。 (如果它們大小不一樣,它們總是不同的 - 我認爲你有不同的*不同的定義,你需要向我們解釋)。 –

+1

「相同」是指一個圖像是另一個圖像的作物,一個是另一個圖像的縮放版本,另一個圖像具有與另一個不同的顏色空間或顏色深度,一個是不同的格式(jpg,png等)比其他還是別的? –

+0

我的意思是說一個圖像可以調整大小。對於格式它們是由PIL標註的圖像,實際上它們是PIL對象 – tapioco123

回答

4

簡單虛設方法:調整最大圖像以匹配的大小最小的圖像和比較。

考慮以下的圖像和分別從1枚舉它們至4:

enter image description hereenter image description hereenter image description hereenter image description here

要比較的兩個圖像ij,使用調整最大他們到另一個的尺寸3瓣lanczos,通過做img1.resize(img2.size, Image.ANTIALIAS)便於在PIL中找到。現在您繼續進行比較,比如使用Comparing image in url to image in filesystem in python中描述的度量。

下面是使用分別的相似的結果,所述度量SSIM和NRMSE在鏈接的答案給出:

圖像1
    - > 2:[0.98,0.97];
   →3:[0.96,0.98];
   →4:[0.99,0.99];

圖2:
    - > 3:[0.98,0。97];
   →4:[0.98,0.93];

圖3:
    - > 4:[0.97,0.98]。

這些值爲最大1,表示根據度量標準圖像完全相同。因此,正如您所看到的,這些值非常接近1.您所要做的就是在該附近選擇一個閾值,並且如果由度量標準給出的結果高於閾值,則返回True,否則返回。

+0

如果拍攝尺寸爲16:9或4:3的照片,並且必須將其與正方形進行比較,我可能會將其裁切爲兩側,並且只保留其中心以匹配方形,而不是調整其大小(從而拉伸/扭曲它)。但是,根據您必須實現的功能,圖像來源等,調整大小仍然可以是更好的方法。 –

-1

沒有方法將是完美的,但你可以嘗試:

  1. 定義定義爲圖像大小的百分比的樣本大小
  2. 定義要採取
  3. 分發樣本的樣本數在兩個圖像上的區域
  4. 在每個樣本上,平均樣本區域中所有像素的顏色值
  5. 對於每對平均樣本區域顏色值,驗證它們是w ithin一些小的誤差等於
  6. 定義一個匹配樣本數量的閾值,用於在您熟悉的水平上平衡假陰性和假陽性
  7. 如果滿足閾值,則返回表示圖像匹配的結果,否則返回結果標誌着他們不

所以,說你開始2個圖像,大小100X100 200X200和,你決定要在每個維度的10%樣品的地區,有4個樣品。您將平均和比較:

  • x0-9,y0-9到x0-19,y0-19
  • x90-99,y0-9到x180-199,y0-19
  • X0- 9,y90-99到x0-9,y180-199
  • x90-99,y90-99到x180-199,y180-199