映像相似性度量

來源:互聯網
上載者:User

映像相似性度量

【轉載】原文出處:http://blog.sina.com.cn/s/blog_4a540be60100vjae.html

 

映像相似性計算主要用於對於兩幅映像之間內容的相似程度進行打分,根據分數的高低來判斷映像內容的相近程度。

   可以用於電腦視覺中的檢測跟蹤中目標位置的擷取,根據已有模板在映像中找到一個與之最接近的地區。然後一直跟著。已有的一些演算法比如BlobTracking,Meanshift,Camshift,粒子濾波等等也都是需要這方面的理論去支撐。

  還有一方面就是基於映像內容的映像檢索,也就是通常說的以圖檢圖。比如給你某一個人在海量的映像資料庫中羅列出與之最匹配的一些映像,當然這項技術可能也會這樣做,將映像抽象為幾個特徵值,比如Trace變換,映像雜湊或者Sift特徵向量等等,來根據資料庫中存得這些特徵匹配再返回相應的映像來提高效率。

  下面就一些自己看到過的演算法進行一些演算法原理和效果上的介紹。

   (1)長條圖匹配。

      比如有映像A和映像B,分別計算兩幅映像的長條圖,HistA,HistB,然後計算兩個長條圖的歸一化相關係數(巴氏距離,長條圖相交距離)等等。

      這種思想是基於簡單的數學上的向量之間的差異來進行映像相似程度的度量,這種方法是目前用的比較多的一種方法,第一,長條圖能夠很好的歸一化,比如通常的256個bin條的。那麼兩幅解析度不同的映像可以直接通過計算長條圖來計算相似性很方便。而且計算量比較小。

      這種方法的缺點:

         1、長條圖反映的是映像像素灰階值的機率分布,比如灰階值為200的像素有多少個,但是對於這些像素原來的位置在長條圖中並沒有體現,所以映像的骨架,也就是映像內部到底存在什麼樣的物體,形狀是什麼,每一塊的灰階分布式什麼樣的這些在長條圖資訊中是被省略掉得。那麼造成的一個問題就是,比如一個上黑下白的映像和上白下黑的映像其長條圖分布是一模一樣的,其相似性為100%。

         2、兩幅映像之間的距離度量,採用的是巴氏距離或者歸一化相關係數,這種用分析數學向量的方法去分析映像本身就是一個很不好的辦法。

         3、就資訊量的道理來說,採用一個數值來判斷兩幅映像的相似程度本身就是一個資訊壓縮的過程,那麼兩個256個元素的向量(假定長條圖有256個bin條)的距離用一個數值表示那麼肯定就會存在不準確性。

   下面是一個基於長條圖距離的映像相似性計算的Matlab Demo和實驗結果.

%計算映像長條圖距離
%巴氏係數計演算法

M=imread('1.jpg');
N=imread('2.jpg');
I=rgb2gray(M);
J=rgb2gray(N);

[Count1,x]=imhist(I);
[Count2,x]=imhist(J);
Sum1=sum(Count1);Sum2=sum(Count2);
Sumup = sqrt(Count1.*Count2);
SumDown = sqrt(Sum1*Sum2);
Sumup = sum(Sumup);
figure(1);
subplot(2,2,1);imshow(I);
subplot(2,2,2);imshow(J);
subplot(2,2,3);imhist(I);
subplot(2,2,4);imhist(J);
HistDist=1-sqrt(1-Sumup/SumDown)

 


   通過可以看到這種計算映像相似性的方法確實存在很大的弊端。然而很多人也對於這種方法進行了修改,比如FragTrack演算法,具體可以參見這篇論文《》。其中對映像分成橫縱的小塊,然後對於每一個分塊搜尋與之最匹配的長條圖。來計算兩幅映像的相似性,融入了長條圖對應位置的資訊。但是計算效率上很慢。

  還有一種是計算一個映像外包多邊形,一般得到跟蹤映像的前景圖後計算其外包多邊形,根據外包多邊形做Delauny三角形分解,然後計算每個三角形內部的長條圖,對於這兩個長條圖組進行相似距離計算。這樣就融入了長條圖的位置資訊。

 (2)數學上的矩陣分解

   映像本身就是一個矩陣,可以依靠數學上矩陣分解的一些知識來擷取矩陣中一些代表這個矩陣元素值和分布的一些魯棒性特徵來對映像的相似性進行計算。

    最常用的一般是SVD分解和NMF分解。

   下面簡單介紹下SVD分解的一些性質,如果需要探究的更深入一點網上有一些相關文獻,讀者可以去探究的更清楚:

 <1> 奇異值的穩定性

 <2> 奇異值的比例不變性

 <3> 奇異值的旋轉不變性

 <4> 奇異值的壓縮性        

    綜上所述,可以看出奇異值分解是基於整體的表示。映像奇異值特徵向量不但具有正交變換、旋轉、位移、鏡像映射等代數和幾何上的不變性,而且具有良好的穩定性和抗噪性,廣泛應用於模式識別與映像分析中。對映像進行奇異值分解的目的是:得到唯一、穩定的特徵描述;降低特徵空間的維數;提高抵抗幹擾和雜訊的能力。但是由於奇異值分解得到的奇異向量中有負數存在所以不能很好的解釋其物理意義。

  非負矩陣分解(NMF):

    NMF的主要思想是將非負矩陣分解為可以體現映像主要資訊的基矩陣與係數矩陣,並且可以對基矩陣賦予很好的解釋,比如對人臉的分割,得到的基向量正是人的“眼睛”,“鼻子”等主要概念特徵,源映像表示為這些特徵的加權組合。所以NMF演算法也在Face Service等場合中發揮著巨大的作用。

   下面一個實驗說明了SVD+NMF數學上的這些分解在映像相似性判定方面的應用,這個跟我目前的課題有關細節方面就不再透露更多了。

當然基於數學上的矩陣特徵值計算的還有很多方法比如Trace變換,不變矩計算等等,當然如果有需要這方面資料的同學可以找我,我可以進行相關的協助。
(3)基於特徵點的映像相似性計算

    每一幅映像都有自己的特徵點,這些特徵點表徵映像中比較重要的一些位置,比較類似函數的拐點那種,通常比較常用的有Harris角點和Sift特徵點。那麼將得到的映像角點進行比較,如果相似的角點數目較多,那麼可以認為這兩幅映像的相似程度較高。這裡主要介紹基於Sift運算元。

   對於Sift的原理和代碼可以參見David Lower的網站。

David G Lowe Sift網站

   那麼我們就可以通過找到匹配點的個數來判斷兩幅映像是否一致,這個演算法的好處是對於一個物體,兩個不同角度下得到的照片依然可以找到很多的匹配點,我也一直認為是一個綜合來說結果相對較為準確的方法,但是由於每個特徵點需要計算一個長度不小的特徵值,也造成了該演算法的時間消耗比較大。所以不常用於即時的視頻處理。這個演算法還有一個好處就是可以通過找到的匹配特徵點進行映像校正。關於使用Sift做映像校正請參見我的另外一篇博文。

  

我當時對於比如左邊映像,找到50個特徵點,如果其中有60%以上的與右邊的匹配上了,認為兩幅映像是相似映像。

使用Sift找到的匹配對應點,然後通過仿射變換的6維參數計算,然後逆變換得到校正後的映像,效果蠻不錯的,可見Sift對於抗旋轉和雜訊的效果確實很好。

對於Sift也不能全部相信,一般使用RANSAC對於錯誤匹配點去除可以達到更好的效果,當然目前也有很多對SIFT進行改進的演算法。希望有這方面研究的可以多多交流。

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.