圖片搜索是指將輸入圖片於目標圖片庫的圖片進行一一匹配,得到與其相似的圖片。當然圖片搜索可以有多種方法,可以根據像素匹配或者圖像特征匹配,在我做的應用中,是用顏色的直方圖作為搜索和匹配依據,得到輸入圖片與其他圖片的差距值,這個值體現了圖片不同的顏色總體感覺。
圖像像素值為0到255,因為是彩色,所以顏色點的種類數目是255的三次方,如果對每一個顏色點進行計算它在整張圖片占的比重,不僅計算直方圖的時候開銷大,在匹配的時候計算量更是大得驚人。所以我們將這些顏色點進行壓縮,255級像素縮放到約8級灰度,這樣總的顏色點種類就只有600種左右,計算量大大減小。另外,在進行圖像搜索的時候,計算每個圖像的直方圖還是一個比較耗時的程序,所以,我們的應用在沒添加一張圖片的時候就計算好它的直方圖,然後把信息存到xml文件中,這樣在進行搜索的時候就只需要從文件中取到數據。
OpenCV入門教程之五 圖像直方圖的應用 http://www.linuxidc.com/Linux/2014-04/99996.htm
OpenCV中如何載入圖像並且轉換成灰度顯示圖像直方圖 http://www.linuxidc.com/Linux/2013-10/91708.htm
OpenCV 繪制直方圖 http://www.linuxidc.com/Linux/2013-10/91706.htm
OpenCV 數字圖像灰度直方圖 http://www.linuxidc.com/Linux/2013-10/91707.htm
結果及分析
搜索結果還算比較理想,圖像的直方圖體現了圖像顏色的大體特征,但是這種基於顏色直方圖的搜索方法未能體現圖像顏色位置上的搭配特征,所以搜索結果也難免有出入。
比如在1000張圖片中搜索紅色公車,搜索結果如下:
從上圖搜索結果可看到前9個最匹配的圖片中有一個與我們期望有差距,這就是沒有考慮顏色位置信息的結果。
再看搜索恐龍的結果:
搜索恐龍的結果令人較滿意。