簡體   English   中英

FFT 獲取 2 張圖像之間的相似度

[英]FFT to get the similarity between 2 images

我的目標是能夠獲得2 張圖像之間的相似度百分比

關鍵是我對相似性的定義在這種情況下有點特殊。

以下是我想要實現的一些示例:

圖像 A

圖像 A

類似於

圖像之二

圖像之二

然而,

圖像 B

圖像 B

與圖像 A(或 A bis)不相似,但類似於

圖像 B 之二

圖像 B 之二

我已經嘗試遵循此處描述的方法: Checking images forsimilarity with OpenCV but it didn't work in my case... 事實上,黑色背景與圖像 A 相比,圖像 A bis 與圖像 A 更相似。

PS:我也嘗試了顏色,但結果是一樣的:

圖像 A 彩色

圖像 A 彩色

圖像 A bis 彩色

圖像 A bis 彩色

圖像 B 彩色

圖像 B 彩色

我做了更多的研究,有人告訴我,我可以使用 FFT(快速傅里葉變換)和 openCV(這是我使用的)來實現我想要的。

應用 FFT 時,這是我得到的:

圖像 A FFT

圖像 A FFT

圖像 A bis FFT

圖像 A bis FFT

圖像 B FFT

圖像 B FFT

圖像 B 之二 FFT

圖像 B 之二 FFT

這讓我想到了這些問題:FFT 真的可行嗎? 如果是,我可以嘗試用我的幅度譜做什么? 如果沒有,還有其他方法可以解決我的問題嗎?

PS:我寧願不使用 ML 或深度學習 id。

謝謝! (對圖片數量感到抱歉)

編輯 1

您的指標可能是重疊像素的數量除以兩個圖像的邏輯和

為什么到目前為止我還沒有這樣做:因為有時,您在示例中看到的表單可能位於圖像頂部,而我示例中的表單位於底部。 此外,一種形式可能比示例中的形式小得多,即使它們仍然相同。

編輯 2

我正在尋找當地的相似性。 實際上,只要表單本身與示例的形狀相同,大小並不重要。 可能更大,更小,位於頂部,底部......這完全取決於表格的形狀。 但是,for form 必須在同一個方向和旋轉。

例如,這里有兩個必須歸類為 Image A 的圖像:

圖像之二之二 圖像 A bis bis bis

編輯 3

您看到的圖片是 30 個堆疊的手部動作幀。 這就是為什么在圖像 A* 中您會看到 2 個斑點 --> 從左向右滑動並且 AI 沒有檢測到中間的手。 因為滑動並不完美,這就是為什么“斑點”每次都不在同一高度的原因。 此外,如果手靠近相機,您將獲得圖像 A,如果更遠,您將獲得EDIT 2部分的圖像 A bis bis。

編輯 4

當我嘗試使用 IoU 關於@Christoph Rackwitz 的答案時,IoU 的問題在於它在圖像 A 和圖像 A 較小的情況下不起作用(請參閱編輯 2圖像)。

聯合交叉路口

圖片

files = [ "A svk5g.png", "A bis aWBFd.png", "B x8214.png", "B bis b3Bdw.png" ]
ims = [cv.imread(f, cv.IMREAD_GRAYSCALE).astype(bool) for f in files]

def iou(a, b):
    return np.sum(a & b) / np.sum(a | b)

scores = np.array([[iou(a,b) for b in ims] for a in ims])
array([[1.     , 0.88364, 0.07373, 0.08069],
       [0.88364, 1.     , 0.06857, 0.06803],
       [0.07373, 0.06857, 1.     , 0.30637],
       [0.08069, 0.06803, 0.30637, 1.     ]])

所以你看,“A”和“A bis”之間的匹配率為 88%,“B”和“B bis”之間的匹配率僅為 30%,A* 和 B* 之間的匹配率為 7-8%。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM