映像檢索看似是一門高深的學問,我們在享受Google,百度,Tineye等檢索服務的同時,有沒有想過自己也能搭建一個映像檢索系統呢?OpenDIR是一個在google code上簡單的開來源文件映像檢索應用。常見的映像檢索基本是以自然映像的精確或相似檢索為主,而OpenDIR則實現於以文本為主體的映像相似檢索演算法,比如生活中各類文書的電子掃描件等等。目前版本的OpenDIR使用了兩種特徵,projection
histogram feature和density distribution feature,計算向量間的Cosine相似性進行相似匹配。
編譯:
該項目的首頁在http://code.google.com/p/opendir/,在download中下載新版本的原始碼解壓後,是一個VC 2008的工程。同時,項目也提供了可執行檔壓縮包。
在編譯工程之前,首要要保證的是VC中已經配置了OpenCV。OpenCV作為開源電腦視覺庫,應用已經比較廣泛了,甚至在著名河蟹軟體的“綠爸”中都能找到它的芳影。具體的安裝和配置可以在http://www.opencv.org.cn/及其官網http://opencv.willowgarage.com/wiki/
找到,這裡小斤就不再贅述了。VS2010的話,可以直接下載opencv for VS2010,連Build步驟都省了。
對於OpenDIR,VC2008以上版本,直接開啟項目或轉換一下,build就可以用了。如果是VC2005等版本,可以直接建立一個空項目,把OpenDIR的一家老小都放進去Build,或者直接改vcproject檔案中的Version參數。
使用:
OpenDIR執行時可以輸入兩個指令,-w和-r,-w 後跟輸出的特徵資料檔案名, -r 後跟輸入的特徵資料檔案名。
後台供檢索的圖片庫,需在inputimage.txt這個檔案中指定,使用-w指令後,會將所有後台映像的特徵計算後,通過增量的方式存入特徵資料檔案中。
有了特徵資料檔案,只要調用-r指令就可以載入特徵資料檔案,而不需要重新計算後台圖片的特徵,直接開始檢索了。
下載的源碼包中已經包含了testimg檔案夾和inputimage.txt,其中包含了幾張文檔映像,以及一張test.jpg的模糊圖片用作測試。
在VC工程的屬性-Debugging-Command Arguments,我們輸入"-w feature.txt -r feature.txt"(引號內的內容),讓OpenDIR計算特徵資料檔案後,再直接載入,進行檢索。
執行過程中,可以看到feature.txt被產生了,開啟窺一窺:
imagepath=testimg\1.jpgindex=0DDFLength=120PHFLength=50FusionFeature=3, 12, 20, 20, 17, 12, 8, 8, 8, 8, 7, 3, 0, 0, 1, 41, 83, 86, 85, 80, 62, 0, 0, 0, 0, 0, 0, 48, 98, 100, 82, 85, 75, 0, 0, 0, 0, 0, 0, 48, 99, 99, 93, 100, 58, 0, 0, 0, 0, 0, 0, 48, 100, 100, 95, 84, 59, 0, 0, 0, 0, 5, 15, 16, 18, 19, 18, 14, 8, 4, 4, 0, 0, 11, 22, 13, 13, 13, 14, 13, 7, 7, 7, 0, 0, 1, 24, 21, 11, 10, 7, 8, 7, 8, 2, 0, 0, 8, 20, 13, 11, 5, 5, 0, 0, 0, 0, 0, 0, 3, 4, 4, 4, 4, 4, 9, 11, 13, 11, 0, 70, 13, 88, 7, 38, 56, 53, 57, 53, 53, 57, 53, 53, 57, 53, 57, 53, 53, 57, 51, 53, 57, 53, 57, 53, 26, 34, 61, 43, 80, 85, 24, 16, 27, 100, 18, 24, 77, 52, 18, 15, 15, 53, 38, 17, 0, 0, 0, 79, 37imagepath=testimg\2.jpgindex=1DDFLength=120PHFLength=50FusionFeature=7, 16, 15, 17, 16, 16, 10, 14, 15, 12, 13, 10, 8, 1, 29, 31, 32, 32, 32, 32, 32, 31, 0, 0, 0, 3, 100, 99, 100, 100, 100, 100, 100, 100, 3, 0, 0, 3, 100, 98, 96, 98, 90, 100, 100, 100, 3, 0, 0, 3, 100, 100, 99, 99, 97, 100, 100, 100, 3, 0, 4, 9, 51, 51, 51, 51, 52, 50, 51, 48, 1, 0, 14, 10, 10, 6, 2, 2, 3, 2, 2, 2, 0, 0, 7, 23, 20, 15, 12, 8, 0, 0, 0, 0, 0, 0, 19, 25, 16, 16, 16, 15, 13, 16, 15, 15, 17, 13, 9, 14, 13, 13, 14, 12, 12, 5, 5, 5, 5, 6, 56, 58, 15, 45, 66, 12, 8, 15, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 12, 33, 80, 12, 7, 13, 30, 20, 26, 39, 42, 36, 4, 16, 53, 99, 100, 16, 0, 0, 0, 91, 48imagepath=testimg\3.jpgindex=2DDFLength=120PHFLength=50FusionFeature=73, 85, 63, 53, 28, 21, 21, 20, 20, 20, 20, 17, 18, 99, 98, 100, 64, 24, 21, 21, 22, 24, 23, 21, 40, 78, 50, 53, 53, 46, 51, 45, 44, 23, 27, 22, 43, 71, 52, 54, 27, 23, 24, 31, 20, 22, 24, 19, 17, 73, 61, 75, 69, 72, 57, 56, 45, 28, 26, 17, 18, 65, 64, 66, 45, 61, 46, 51, 41, 19, 24, 22, 43, 36, 24, 25, 24, 12, 9, 6, 0, 0, 0, 0, 63, 59, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 46, 48, 35, 13, 2, 0, 0, 0, 0, 0, 0, 57, 59, 60, 46, 33, 37, 63, 44, 53, 48, 52, 47, 59, 60, 7, 18, 57, 72, 21, 31, 32, 36, 8, 17, 14, 100, 79, 96, 34, 1, 34, 70, 40, 17, 41, 91, 61, 96, 26, 21, 49, 47, 3, 8, 37, 48, 12, 18, 21, 14, 20, 29, 46, 30, 32, 25, 39, 55, 18, 9, 95, 43imagepath=testimg\4.jpgindex=3DDFLength=120PHFLength=50FusionFeature=35, 44, 44, 44, 41, 41, 23, 25, 32, 31, 32, 28, 81, 99, 99, 82, 86, 91, 9, 0, 1, 3, 26, 31, 81, 99, 100, 94, 100, 80, 22, 31, 47, 16, 39, 0, 81, 100, 100, 97, 85, 72, 36, 59, 51, 12, 12, 14, 12, 11, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 12, 16, 18, 15, 5, 0, 0, 0, 0, 0, 0, 0, 8, 23, 24, 26, 25, 18, 4, 0, 0, 0, 0, 0, 15, 20, 17, 11, 12, 10, 10, 0, 0, 0, 0, 0, 14, 5, 6, 6, 5, 6, 4, 5, 4, 0, 0, 0, 15, 15, 9, 5, 5, 5, 5, 5, 5, 5, 5, 6, 57, 59, 41, 100, 73, 64, 77, 75, 67, 80, 81, 86, 85, 82, 83, 88, 89, 85, 89, 93, 23, 15, 28, 2, 9, 14, 32, 39, 32, 39, 45, 49, 53, 48, 53, 30, 12, 18, 46, 30, 4, 4, 71, 34, 11, 10, 1, 0, 93, 20imagepath=testimg\5.jpgindex=4DDFLength=120PHFLength=50FusionFeature=67, 66, 67, 55, 29, 20, 20, 20, 20, 20, 20, 17, 36, 25, 25, 21, 25, 22, 29, 26, 25, 26, 14, 0, 29, 90, 84, 71, 84, 78, 55, 53, 22, 19, 22, 19, 40, 40, 41, 41, 45, 37, 35, 41, 26, 0, 0, 0, 52, 86, 26, 20, 22, 23, 20, 20, 23, 24, 22, 19, 23, 86, 93, 57, 40, 30, 0, 0, 0, 0, 0, 0, 18, 67, 49, 38, 32, 30, 21, 23, 23, 23, 29, 22, 26, 85, 100, 56, 0, 0, 0, 0, 0, 0, 0, 0, 15, 55, 54, 52, 47, 33, 31, 28, 0, 0, 0, 0, 35, 46, 52, 42, 22, 20, 54, 46, 56, 50, 54, 49, 62, 63, 1, 5, 28, 5, 4, 6, 80, 97, 87, 58, 53, 18, 63, 30, 6, 6, 66, 34, 11, 13, 87, 53, 17, 41, 42, 23, 48, 49, 74, 70, 22, 21, 29, 31, 31, 32, 22, 50, 45, 70, 23, 21, 34, 21, 31, 1, 100, 45imagepath=testimg\6.jpgindex=5DDFLength=120PHFLength=50FusionFeature=28, 39, 40, 38, 40, 39, 32, 17, 34, 32, 32, 26, 37, 30, 30, 25, 15, 13, 14, 11, 18, 16, 16, 12, 0, 50, 25, 13, 0, 0, 0, 0, 0, 0, 0, 0, 27, 45, 18, 12, 12, 12, 12, 12, 12, 12, 12, 10, 42, 57, 42, 43, 41, 46, 48, 28, 29, 23, 12, 10, 47, 39, 27, 19, 15, 16, 17, 13, 15, 13, 14, 13, 8, 31, 30, 41, 39, 49, 43, 30, 27, 23, 7, 0, 12, 44, 43, 28, 31, 47, 27, 29, 52, 27, 28, 22, 0, 0, 0, 3, 73, 57, 5, 100, 46, 0, 0, 0, 24, 33, 35, 55, 81, 14, 41, 71, 13, 12, 12, 17, 59, 60, 20, 59, 12, 7, 11, 37, 97, 33, 11, 10, 18, 21, 11, 13, 1, 15, 26, 99, 92, 80, 50, 9, 11, 88, 61, 8, 10, 16, 59, 57, 45, 89, 100, 97, 20, 6, 11, 11, 14, 25, 27, 28, 29, 20, 14, 0, 95, 37
其中的FusionFeature就是特徵向量了,每個映像由一個120維的density distribution feature和一個50維的projection histogram feature組成。
接著,小斤就輸入text.jpg來試一把:
項目首頁中介紹了這個text.jpg,是手機拍攝一個文檔後二值化的結果,有一坨大噪點,中間看起來是一個插圖。
輸入test.jpg後,查看檢索的相似性結果:
testimg的1.jpg的相似性最高,這是1.jpg的原圖,從段落開始結束的位置分布來看,應該就是它了:
簡單的效能測試:
小斤準備使用1000張後台映像進行測試,看看檢索的效率如何。
去網上搜集1000張文檔映像顯然比較累人,這裡使用了一個偷懶的辦法,找個1000頁左右的pdf,使用pdf2image等工具,產生1000張文檔映像的jpg,
最後每張在850*1100左右,解析度還行。
把這麼多映像填到inputimage.txt設定檔中,同樣有簡單的辦法,運行cmd,進入存放映像的目錄後,使用dir /b命令,每一行會顯示一個影像檔名,右鍵選中標記,圈住他們複製,粘貼到inputimage.txt中就可以了。當然,這樣做也有個弊端,就是這些映像和OpenDIR的可執行檔必須是在同一目錄下了。
後台映像庫算是輕而易舉地構建好了,和之前一樣,先使用-w指令產生特徵資料檔案,1000張圖的特徵計算了1分多鐘,但也只要辛苦一次就夠了。
完成後,使用-r指令開始檢索:
在1000張圖片中找到了一模一樣的它,相似性100%,花費4ms。
(測試環境Turion X2 RM-74 2.2G,2G記憶體)
測試多次後,對於精確檢索,比如檢索後台圖庫中存在的同一映像,每次都能以100%找到。
對於相似檢索,如一些掃描品質比較差的圖片或處理過的映像,(類似於之前的test.jpg),雖然檢索速度令人滿意,但檢索結果也就中規中矩了,有時結果風馬牛不相及。也許今後融入更好的特徵可以提高準確度吧。
----------------------------------
作者:小斤(陳忻)
本文屬於原創文章,如需轉載引用請註明原文作者和連結,謝謝。