2011-10-10 83 views
6

在我的項目中,我需要比較圖像。一個圖像顯示了一個渲染模型,另一個圖像是一張照片,其中顯示了模型中表示的真實對象。我真正想要的:如何比較兩個邊緣圖像(在OpenCV中)?

  • 該算法必須比較兩個圖像並返回一個數字,描述相似性。比方說,數字越低,圖像就越好。
  • 這兩個圖像都表示爲二進制圖像,只包含實際渲染圖像/照片的輪廓/邊緣。
  • 該照片中的對象比渲染圖像多得多。所以我只想檢查渲染對象的視點是否與照片中真實對象的視點幾乎相同。 (例如:一輛汽車的模型與一輛真正的汽車相近,我從一個特殊的位置和方向拍攝了一輛真實的汽車的照片,現在我想檢查一下,如果我的虛擬相機的位置和方向看着汽車幾乎相同,比我的現實生活相機的位置和方向)。解決方案只是比較渲染圖像的白色像素與照片的像素(作爲邊緣圖像)。其他像素不感興趣。
  • 圖像比較的返回值應該越小,我的定位和虛擬相機的位置就越適合真實相機的方向和位置。

我試圖計算兩個圖像的歐幾里得距離,但結果是唯一的,當像素完全適合對方。現在我正在尋找替代品。

到目前爲止,我考慮使用歸一化的互相關,但我真的不知道它是否適合我的任務。

問題是,如果規範化的互相關值得一試,或者有更好的方法來解決我的問題!

該算法應該儘可能快,因爲我比較了很多圖像。

非常感謝


感謝您的建議。我有點困惑,因爲規範化的交叉核心和Haussdorff距離似乎有利於在大局中找到一個小模式。

問題是:這兩種算法是否也適用於比較2張相同大小的圖片?

這是一個需要比較的2個圖像的例子。目前,我正在比較大約120張圖片 - 第二張圖片。

太糟糕了,我無法將圖像作爲新用戶發佈。所以這裏是直接鏈接: http://s14.directupload.net/file/d/2674/t8qzbq9i_png.htm

+0

你能後的兩個圖像? – Maurits

+0

已鏈接到示例。 – user987979

+0

+1有趣的問題。你能在邊緣檢測它們之前發佈圖像嗎?這將有助於爲您的問題添加一些背景。 – misha

回答

1

你也可以退房cosine similarity。我在檢測視頻流中的剪切場景方面取得了巨大成功。實質上,您將整個圖像視爲一維矢量,並繼續進行餘弦相似性度量。基本上,小角度意味着緊密匹配,大值意味着不匹配。閾值需要針對您的數據集進行一些調整,但可能會起作用,速度非常快。

歸一化的互相關應該更健壯,但需要更多時間。由於您提到需要處理不同的姿勢,因此您還應該查看特徵檢測和提取解決方案。看看opencv的matcher_simple.cppmatching_to_many_images.cpp樣本。這些技術對尺度和旋轉差異有一定的容忍度。

希望有幫助!

+1

對於高維數據,如圖像,我不希望歐氏距離和餘弦相似性有顯着差異。 – Maurits

4

以Haussdorff距離爲起點進行實驗?總體思路和c實施here。文章在這裏:

​​,通過DP Huttenlocher - 1993年