4

我想製作一個程序,它會從圖像數據集中找到相似的圖像。這些步驟是如何使用Opencv存儲大量圖像的分層K均值樹?

  • 所有圖像
  • 商店描述
  • 適用於存儲的描述
  • 匹配的存儲的描述來使用的kNN

查詢圖像描述KNN提取SURF描述符現在,每個圖像SURF描述符將被存儲爲分層k-均值樹,現在我是否將每棵樹存儲爲單獨的文件,或者是否可以構建某種具有所有圖像描述符的單一樹當圖像被添加到數據集時更新。

This is the paper I am basing the program on.

回答

2

改爲使用KD-Tree。你將能夠構建分層的K維樹,你只需要找出哪些信息被髮送到樹中存儲。您可以將圖像的矢量/描述符保存到磁盤上,每次啓動程序時加載KD-Tree。新計算機矢量/描述既可以是發送到樹和磁盤

總結

  • 創建描述
  • 訂閱新的描述,以KD樹
  • 保存與磁盤相同的描述符\
  • 在每次重新啓動時,將所有描述符加載到樹中
  • 查詢樹給你的最佳匹配

希望這有助於

+1

我沒有最終使用KD樹,我這樣做的時候,但無論如何感謝。 – AquaAsh 2012-04-12 08:32:32

+0

不錯,你已經做到了這一點:) – 2012-04-12 17:30:24

+1

雖然你可以回答自己的問題,但不要讓它坐在那裏沒有答案...... – penelope 2012-04-19 09:01:41

6

你肯定要與SURF描述符做呢?我只是在自己開發一個類似的應用程序,它基於this論文(Nister,Stewenius),他們發誓 SIFT描述符是要走的路。但是,我想你也可以用其他描述符來完成。

看看你引用的文章,我鏈接到的作品更新,但它並沒有參考Nister paperthis work(Sivic,Zisserman),據我所知,這些作品都適用於所有內容基於圖像檢索的問題。

爲了更好地理解問題,在開始實施之前,我首先閱讀了Sivic, Zisserman以獲得系統背後的總體思路。在從所有特徵中提取所有SIFT描述符後,它們只應用簡單的聚類。他們使用兩種不同類型的特徵以獲得更好的精度,Shape Adapted(以特徵爲中心的角落)和Maximally Stable(對應於高對比度斑點 - 您可以在this論文(Matas等人)中查找它們)。由於每個功能的直接存儲,他們的系統的可擴展性並不是很好,但他們引入了反轉文件的概念,這是一種來自文本分析的技術(您可以閱讀它的基本知識here),這極大地簡化了查找過程。

在征服了這項工作之後,我建議繼續到Nister, Stewenius,他們在這裏介紹了L級分層k-均值聚類的概念以存儲特徵,以及後面的圖像數據庫搜索。現在,除非我非常誤解,否則不會將每個描述符作爲單獨的樹存儲在之內。相反,您基於現有功能(每個集羣中的集羣中心實際上是每個集羣的代表性「中心」特徵)生成樹。一旦樹構建到所需的深度(他們推薦10個集羣,超過6個級別),最後一級的集羣中心僅代表極少數特徵 - 因此,您實際上可以忘記所有原始特徵! (或者至少是他們的描述符)。每個原始特徵可以由相應的聚類中心表示,而不是描述符,對於每個圖像,您只需存儲有關哪些聚類中心 - 特徵 - 包含的信息。這很容易,因爲你只需要存儲一個或兩個整數每個功能 - 通過樹編碼它的路徑。最簡單的方法是,如果您只是在每個級別編寫該功能所屬羣集的編號 - 其中有10個(4位) - 對於每個級別(其中6個,4 * 6,< 32位,所以它適合於一個整數)。您當然可以按照您認爲合適的方式實施實際編碼。哦,他們也在MSER區域使用SIFT描述符。另外,如果用於構建詞彙樹的圖像具有代表性(例如,您正在開發空間圖片的數據集並且僅從圖像的代表性部分構建樹,但您知道存在在數據集的其餘部分沒有工業工廠的圖片),您可以非常快速地添加新圖片。在數據集中添加任何新圖片所需做的唯一一件事就是確定哪個計算出的聚類中心代表最佳的圖像特徵(如前所述,聚類中心的最後一級非常精確)並存儲關於聚類中心(前面提到的整數)。查找集羣中心應該非常快 - 在6個級別中只有10個比較。

希望這對某個人來說實際上是有用的,因爲問題已經過了一年多了。 :)