搭建圖像搜索引擎(之一):定義你的圖像描述子

本文翻譯自:http://www.pyimagesearch.com/2014/02/03/building-an-image-search-engine-defining-your-image-descriptor-step-1-of-4/


之前我們已經講述瞭如何從頭到尾搭建“一個令人敬畏的指環王圖片搜索引擎”,其樂趣無窮,並且學到了許多:我們懂得了如何使用OpenCV裏的圖像描述子,更重要的是從實際的代碼出發,明白一個圖片搜索引擎是如何搭建起來的。

下面,讓我們邁出踏實的第一步吧。

先來回顧圖像搜索引擎的4步:

    1.定義圖像描述子:要使用哪種描述子?要描述圖像的哪些方面?

    2.索引數據集:用描述子表示數據集裏的每個圖像。

    3.定義相似性度量:如何確定兩幅圖像是否相似?

    4.搜索:實際搜索是如何執行的呢?這些查詢請求是如何提交到搜索引擎的呢?

上篇博文只是“活動關節,寫寫代碼”類型的文章,接下來的文章更顯水平。如果你只是想知道如何搭建一個圖像搜索引擎,你只需知道這4步。

這篇博文主要是介紹第一步:定義圖像描述子。


定義圖像描述子

指環王圖片搜索引擎中,我們用三維的圖像直方圖來表示每幅圖像的特徵。這是全局圖像描述子一種應用於整幅圖像的OpenCV圖像描述子。對於我們的數據集來說,這是一個不錯的選擇。我們所利用的電影裏的每個場景都有各自相對不同的顏色分佈,所以才能使得每個顏色直方圖更容易返回相應的結果。

當然,顏色直方圖並不是唯一的描述子,我們還能利用其它方法描述圖像裏的對象的紋理和形狀。看看有哪些。

顏色

總所周知,顏色是描述圖像的最基本方面,也是計算最簡單的。我們可以使用每個通道內像素強度的均值、標準差、梯度來表示圖像顏色特徵,也可以使用之前描述的顏色直方圖來表示。它是一種應用於整幅圖像的全局描述子。使用簡單的顏色方法的好處之一是我們可以很容易獲取圖像大小(尺度)和方向(圖像旋轉)不變性。

這怎麼可能?

那麼,首先看看《侏羅紀公園》裏的霸王龍圖像在不同尺度和方向提取出來的直方圖結果。

Figure 1: No matter how we rotate and scale the T-Rex image, we still have the same histogram.

Figure 1: 無論尺度和方向變化如何,直方圖都是一樣的.

如圖所示,我們用了不同的角度和比例因子旋轉和縮放了圖像,x軸是bin的數量,y軸是每個bin中圖像像素的百分比。

每種情況下的直方圖是相同的,也就證明了顏色直方圖不會因尺度和旋轉而變化。

圖像描述子的旋轉和尺度不變形也是圖片搜索引擎的理想特性。如果用戶向我們的圖片搜索引擎請求查詢,不論查詢圖像的大小和旋轉角度,我們都得找到相似的圖像。當一個描述子能如此魯棒以至於能應對像旋轉和尺度這樣的變化的時候,我們稱之爲不變性(不是因爲它不能改變),因爲它的描述子具有如尺度和旋轉的不變性。

紋理

紋理在於對圖像的感覺、外觀和整體觸覺質量建立模型,但不是那麼容易呈現。例如,改怎麼用描述子表示一張霸王龍圖的粗糙程度?

大多數嘗試建立紋理模型的方法用於檢測灰度圖像而不是彩色圖像。如果我們使用灰度圖像,我們很容易獲得一個N*N的像素密度矩陣。通過檢查這些像素對,可以建立這些像素對在X像素條件下的頻率(概率)密度分佈。 這種類型的分佈叫做灰度共生矩陣(GLCM)。
一旦有了GLCM,我們可以計算統計數據,像對比度、相關性和熵等等。其他的紋理描述子包括灰度圖像的傅里葉變換和小波變換,以及變換後的係數檢查。
最後,更爲流行的紋理特徵描述子之一是方向梯度直方圖(Histogram of Oriented Gradients, HOG),已經完全用於檢查圖像裏的人。

形狀

說到形狀,我不是指圖像呈現的NumPy數組的形狀(尺寸,或者說高度和寬度),而是說圖像裏特定對象的形狀。當使用形狀描述子,第一步通常是運用分割或者邊緣檢測技術來讓我們更關注我們所想要描述形狀的輪廓。然後,一旦獲得了輪廓,就可以再次用統計矩來表示形狀。
下面看看皮卡丘的例子。
Figure 2: The image on the left is not suited for shape description. We first need to either perform edge detection (middle) or examine the countered, masked region (right).
Figure 2: 左圖不適合形狀描述。需要邊緣檢測(中間)或者檢測相反的、取出模塊的區域(右)。
左圖是幅皮卡丘的全綵色圖像,通常情況先我們不用這種類型的圖像進行形狀描述。我們將它轉換到灰度圖像,再來使用邊緣檢測(中間),或者使用皮卡丘的模(即我們想描述的相關部分)。
OpenCV提供了Hu矩(Hu Moments)的方法,被廣泛作爲一種簡單的形狀描述子。
後續文章中,我將展示用更多的形狀描述子描述圖像裏對象的形狀。

小結

本文中我們討論了搭建圖片搜索引擎的第一步,選擇圖像描述子。我們需要檢測數據集並決定描述圖像的哪一方面:顏色分佈?紋理特徵?還是形狀?或許,我們三個都要。
選擇描述子只是第一步,下次我們將探討如何用這些描述子描述圖像數據集裏的每一幅圖像。


Downloads:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章