圖像搜索(二)-全局特征
最直觀及理想化的特征,就是把二維圖像之間的相似性,轉變成幾個數字(或字符串)之間的相似性,這種簡朴算法得到的特征結果可稱之為該圖像的指紋。
一個圖像的像素級別的量很大,而且是個二維的,如1024 * 768 = 736432(而且是多通道的,如RGB)大小的圖像,要在這種數量級上進行相似度比較,沒有可行性。但圖像的輪廓在不同的大小尺寸下基本還是相似的,另一方面,對大規模數據相似性匹配而言,1+0組成的二值數據無疑是最快的;在此思路下,我們借用直方圖+均值的概念,來進行指紋的提取,步驟如下:
- 把圖像縮小到固定大小,如8 * 8,去掉復雜信息,保留大致輪廓;
- 簡化色彩通道,灰度化,由單一通道信息代表多通道(會有缺陷);
- 將所有像素的灰度值加起來求簡單均值;
- 將所有像素與均值來比較大,大或等於的為1,小的為0;
- 將上述0,1組合起來,得到一個hash值,即為圖像的指紋。
匹配時,將兩個hash值求漢明距離,值為0的為一模一樣,1的高度相似等,依次類推,這個方法稱之為均值哈希算法。
看到這個算法的時候,各位第一個感覺是不是,這太簡單了吧,它真的有效嗎?事實上,很多的相似圖可以通過這個辦法找出來,像下圖左那樣,它的hash值的圖壓根就看不出是個什么東西了,居然還能做相似的匹配,而且一定情況下,還是挺有效的(變形程度不超過25%,它們就能匹配原圖)。
改進一
上述方法是簡單,但存在很多問題,受均值的影響非常大,如伽馬校正或顏色直方圖被調整后,這個方法就不行了;但我們可以根據信號理論來改進:一張圖片就是一個二維信號,它包含了不同頻率的成分。亮度變化小的區域是低頻成分,它描述大范圍的信息。而亮度變化劇烈的區域(比如物體的邊緣)就是高頻的成分,它描述具體的細節。或者說高頻可以提供圖片詳細的信息,而低頻可以提供一個框架。對我們縮小后的圖片來說,缺乏圖像細節,大部分都是低頻的。我們平時說的下采樣,也就是縮小圖片的過程,實際上是損失高頻信息的過程。
改進一:利用圖片的低頻信息,在頻率域進行指紋獲取,其有變化的工作過程如下:
它將圖像從像素域變換到頻率域,通過離散余弦變換(DCT)來獲取圖片的低頻成分。一般圖像都存在很多冗余和相關性的,所以轉換到頻率域之后,只有很少的一部分頻率分量的系數不為0,大部分系數都為0(或者說接近於0),換句話說,圖像的能量幾乎都集中在左上角這個地方的低頻系數上面了;所以我們可以縮放到較大的尺寸(如由88變為6464),然后只取左上角的8*8區域來獲取64位的Hash值,其它步驟(包括匹配)與上述的一樣。
這種算法稱之為感知哈稀算法,只要圖片的整體結構保持不變,hash結果值就不變。
這種方法的優點是,具有比較好的尺度不變性以及光照不變性;以及優良的空間點用,計算速度快!
同樣的,缺點非常大,誤配多,尤其是很多商品圖(如穿在同一模特上的樣式大致相同的衣服)的低頻域信息很相似,以及眾商品圖在拷貝時帶來的邊框和背景誤差,都會帶來錯誤匹配。
改進二
增加64bit哈希碼的識別能力,加入空間信息,分區塊提取hash碼;加入顏色識別碼和顏色置信度;同時考慮加入開頭信息,使用少量的形狀基;其具體方法基本都是基於統計方法然后二值化;
通過以上種種手段所得到的指紋,已經能區別大部分拷貝圖(或輕變形圖)了,而且精度非常高(9?%),因為這種算法的要求就是,輕量級,速度快,重精度,輕召回。
特點:此類算法均充分利用了統計量化的原理,同樣的算法可以用在顏色、紋理等其它全局性的特征中,這類特征可以判斷幾張圖的整體上相似,但對局部特性和噪聲都比較敏感;因此加入空間信息(金字塔)來進行指紋抽取的升級是一個比較好的思路。
本算法充分體驗了“簡約而不簡單”的算法之美,但圖像搜索所面向的對象絕非簡單的拷貝圖,它的缺陷也非常明顯,除尺度/光照以及微形變以外,其它不變性都難以應付,而且判斷兩圖是否相似的閾值也比較難以把握;
知識點
漢明距離,均值hash算法
漢明距離是使用在數據傳輸差錯控制編碼里面的,漢明距離是一個概念,它表示兩個(相同長度)字對應位不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字符串進行異或運算,並統計結果為1的個數,那么這個數就是漢明距離。
漢明重量是字符串相對於同樣長度的零字符串的漢明距離,也就是說,它是字符串中非零的元素個數:對於二進制字符串來說,就是 1 的個數,所以 11101 的漢明重量是 4。
計算一個數字的比特位包含1的個數有個小技巧:value &= value - 1這個運算的結果就是把value最后一個1去掉,循環進行運算直到value等於0(所有的1都被去掉)就可以知道vaule擁有多少個1了。
伽馬校正及顏色直方
伽馬校正:伽馬校正就是對圖像的伽馬曲線進行編輯,以對圖像進行非線性色調編輯的方法,檢出圖像信號中的深色部分和淺色部分,並使兩者比例增大,從而提高圖像對比度效果。
實際的圖像系統是由多個部件組成的,這些部件中可能會有幾個非線性部件。如果所有部件都有冪函數的轉換特性,那么整個系統的傳遞函數就是一個冪函數,它的指數γ 等於所有單個部件的g 的乘積。如果圖像系統的整個γ =1,輸出與輸入就成線性關系。這就意味在重現圖像中任何兩個圖像區域的強度之比率與原始場景的兩個區域的強度之比率相同,這似乎是圖像系統所追求的目標:真實地再現原始場景。但實際情況卻不完全是這樣。
顏色直方:
對一幅灰度圖像從上到下,從左到右掃描每個像素值,在每個灰度值上計算像素數目,以這些數據為基礎完成圖像直方圖的繪制。
下采樣
縮小圖片
離散余弦變換
離散余弦變換(DCT for Discrete Cosine Transform)是與傅里葉變換相關的一種變換,它類似於離散傅里葉變換(DFT for Discrete Fourier Transform),但是只使用實數。離散余弦變換相當於一個長度大概是它兩倍的離散傅里葉變換,這個離散傅里葉變換是對一個實偶函數進行的(因為一個實偶函數的傅里葉變換仍然是一個實偶函數),在有些變形里面需要將輸入或者輸出的位置移動半個單位(DCT有8種標准類型,其中4種是常見的)。
DCT 將原始圖像信息塊轉換成代表不同頻率分量的系數集,這有兩個優點:其一,信號常將其能量的大部分集中於頻率域的一個小范圍內,這樣一來,描述不重要的分量 只需要很少的比特數;其二,頻率域分解映射了人類視覺系統的處理過程,並允許后繼的量化過程滿足其靈敏度的要求。
當u,v = 0 時,離散余弦正變換(DCT)后的系數若為F(0,0)=1,則離散余弦反變換(IDCT)后的重現函數 f(x,y)=1/8,是個常 數值,所以將 F(0,0) 稱為直流(DC)系數;當 u,v≠0 時,正變換后的系數為 F(u,v)=0,則反變換后的重現函數 f(x,y) 不是常數,此時 正變換后的系數 F(u,v) 為交流(AC)系數。
DCT 后的64個 DCT 頻率系數與 DCT 前的64個像素塊相對應,DCT 過程的前后都是64個點,說明這個過程只是一個沒有壓縮作用的無損變換過程。
[DCT JAVA實現](http://blog.csdn.net/luoweifu/article/details/8214959](http://blog.csdn.net/luoweifu/article/details/8214959):
64bit 哈希碼,金字塔
空間金字塔模型(Spatial Pyramid Matching, SPM)對圖像進行不同粒度的切分,構造多個不同尺度的子塊(關於尺度的介紹,可以查詢小波分析),然后同樣按照BOW模型分別統計子塊中的特征表達(直方圖),最后拼接所有子塊中的特征作為圖像的特征描述。SPM模型流程如圖3所示。
原始方法是首先提取原圖像的全局特征,然后在每個金字塔水平把圖像划分為細網格序列,從每個金字塔水平的每個網格中提取出特征,並把它們連接成一個大特征向量。但由於圖像中每個局部區域反映的信息量不同,由此提出加權空間金字塔方法,及給每層每網格分配一個權重,按權重把每層每網格特征加權串聯在一起。
圖像金字塔:
金字塔是圖像多尺度表示的主要形式,圖像金字塔是以多分辨率來解釋圖像的一種有效但概念簡單的結構。一幅圖像的金字塔是一系列以金字塔形狀排列的分辨率逐步降低的圖像集合。如下圖所示。