[英]FFT to get the similarity between 2 images
我的目標是能夠獲得2 張圖像之間的相似度百分比。
關鍵是我對相似性的定義在這種情況下有點特殊。
以下是我想要實現的一些示例:
圖像 A
類似於
圖像之二
然而,
圖像 B
與圖像 A(或 A bis)不相似,但類似於
圖像 B 之二
我已經嘗試遵循此處描述的方法: Checking images forsimilarity with OpenCV but it didn't work in my case... 事實上,黑色背景與圖像 A 相比,圖像 A bis 與圖像 A 更相似。
PS:我也嘗試了顏色,但結果是一樣的:
圖像 A 彩色
圖像 A bis 彩色
圖像 B 彩色
我做了更多的研究,有人告訴我,我可以使用 FFT(快速傅里葉變換)和 openCV(這是我使用的)來實現我想要的。
應用 FFT 時,這是我得到的:
圖像 A FFT
圖像 A bis FFT
圖像 B FFT
圖像 B 之二 FFT
這讓我想到了這些問題:FFT 真的可行嗎? 如果是,我可以嘗試用我的幅度譜做什么? 如果沒有,還有其他方法可以解決我的問題嗎?
PS:我寧願不使用 ML 或深度學習 id。
謝謝! (對圖片數量感到抱歉)
編輯 1 :
您的指標可能是重疊像素的數量除以兩個圖像的邏輯和
為什么到目前為止我還沒有這樣做:因為有時,您在示例中看到的表單可能位於圖像頂部,而我示例中的表單位於底部。 此外,一種形式可能比示例中的形式小得多,即使它們仍然相同。
編輯 2 :
我正在尋找當地的相似性。 實際上,只要表單本身與示例的形狀相同,大小並不重要。 可能更大,更小,位於頂部,底部......這完全取決於表格的形狀。 但是,for form 必須在同一個方向和旋轉。
例如,這里有兩個必須歸類為 Image A 的圖像:
編輯 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.