OpenCV中直方圖反向投影演算法詳解與實現
OpenCV中直方圖反向投影演算法詳解與實現一:直方圖交叉
OpenCV中直方圖反向投影演算法實現來自一篇論文《Indexing Via Color Histograms》其作者有兩位、是Michael.J.Swain與Dana H. Ballard。論文分為兩個部分,前面一部分詳細描述了顏色直方圖以及通過顏色直方圖交叉來實現對象鑒別。可以實現對象背景區分、複雜場景中查找對象、不同光照條件影響等。假設M表示模型直方圖數據、I表示圖像直方圖數據、直方圖交叉匹配可以被描述為如下:
其中J表示直方圖的範圍,即bin的個數。最終得到結果是表示多少個模型顏色像素與圖像中的像素相同或者相似,值越大,表示越相似。歸一化表示如下:
這種方法對背景像素變換可以保持穩定性、同時對尺度變換也有一定抗干擾作用,但是無法做到尺度不變性特徵。基於上述理論,兩位作者發現通過該方法可以定點陣圖像中已知物體的位置,它們把這個方法叫做直方圖反向投影(Back Projection)。
二:直方圖反向投影
直方圖反向投影可以通過如下步驟完成
對每個直方圖BIN J
對圖像的每個像素點I(x,y)根據像素值獲得對應的直方圖分布概率
對得到分布概率圖像做卷積
求取局部最大值,即得到已知物體位置信息
正是因為直方圖反向投影有這樣能力,所以在經典的MeanShift與CAMeanShift跟蹤演算法中一直是通過直方圖反向投影來實現已知對象物體的定位。
三:基於OpenCV演算法代碼實現
演算法實現基於OpenCV的數據結構Mat來實現數據轉換與存儲,其它的地方基本都是自己寫,上次有同學說我的代碼都是Java的,這次全部改為C++啦,所以請大家繼續關注本公眾號!
第一步:直方圖計算
OpenCV自己實現通過對直方圖插值實現LUT查找,不做RGB顏色降維,本人的實現反其道而行之,對圖像顏色做降維得到直方圖,不再對直方圖計算使用LUT插值查找。
計算輸入圖像與模型的直方圖代碼如下
第二步:計算R
第三步:計算概率分布圖像
第四步:卷積計算
第五步:歸一化與顯示反向投影結果
四:運行演示
模型圖像
已知目標圖像
反向投影結果
PS:
不畏浮雲遮望眼
只緣身在最高層
關注【OpenCV學堂】
TAG:OpenCV學堂 |
※Photoshop詳解轉手繪中頭髮繪製方法
※光與影的圖形革新,NVIDIA圖靈核心架構詳解
※Python之re模塊方法詳解
※Vim編輯器使用方法詳解
※Pixvana詳解VR雲服務對英偉達VRWorks SDK的支持
※ROS大神為你詳解:如何搞定Movidius神經計算棒基於ROS的實現與封裝
※OpenStack技術和實戰詳解
※Chrome 瀏覽器增添 AR 效果,谷歌詳解 Web AR 實現技術
※Chrome瀏覽器增添AR效果,谷歌詳解Web AR實現技術
※圖文詳解全新 Cayenne 技術篇:能開出跑車感覺的 SUV
※區塊鏈技術詳解和Python實現案例
※Qorivva MPC56xx系列MCU的Flash加密解密原理與工程實現方法詳解
※Cisco認證-GNS3使用方法詳解
※透過現象看原理:詳解 Spring 中 Bean 的 this 調用導致 AOP 失效的原因
※AlexNet網路的結構詳解與實現
※ThreadLocal實現原理詳解
※星露穀物語steam聯機方法詳解
※Photoshop詳解海報合成過程中思路和方法
※OpenStack關鍵技術系列:KeyStone鑒權認證系統詳解
※HTML5的canvas繪圖技術詳解