一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【計算機視覺】OpenCV中直方圖處理函數(shù)簡述

 方海龍的書館 2015-02-26

 計算直方圖calcHist

直方圖是對數(shù)據(jù)集合的統(tǒng)計 ,并將統(tǒng)計結(jié)果分布于一系列提前定義的bins中。這里的數(shù)據(jù)不只指的是灰度值 ,統(tǒng)計數(shù)據(jù)可能是不論什么能有效描寫敘述圖像的特征。
如果有一個矩陣包括一張圖像的信息 (灰度值 0-255):

gray
gray

既然已知數(shù)字的范圍包括256個值, 我們能夠?qū)⑦@個范圍切割成子區(qū)域(稱作 bins),如:

bins
bins

然后再統(tǒng)計掉入每個bin_{i}的像素數(shù)目。採用這一方法來統(tǒng)計上面的數(shù)字矩陣,我們能夠得到下圖( x軸表示 bin, y軸表示各個bin中的像素個數(shù))。

hist1
hist1

直方圖能夠統(tǒng)計的不不過顏色灰度,它能夠統(tǒng)計不論什么圖像特征(如梯度,方向等等)。

直方圖詳細細節(jié)

dims: 須要統(tǒng)計的特征的數(shù)目,在上例中,dims = 1由于我們只統(tǒng)計了灰度值(灰度圖像)
bins: 每一個特征空間子區(qū)段的數(shù)目,在上例中,bins = 16
range: 每一個特征空間的取值范圍,在上例中,range = [0,255]

OpenCV的直方圖計算

OpenCV提供了一個簡單的計算數(shù)組集(一般是圖像或切割后的通道)的直方圖函數(shù)calcHist。支持高達32維的直方圖。

void calcHist(
const Mat* arrays,            // 圖像源數(shù)組,相同深度(CV_8U or CV_32F),相同大小
int narrays,                 // 圖片個數(shù)
const int* channels,         // 通道
InputArray mask,             // 掩碼圖像
OutputArray hist,             // 返回的直方圖
int dims,                     // 直方圖的維數(shù)
const int* histSize,         // 每一維上直方圖的個數(shù)
const float** ranges,        // 像素值的范圍
bool uniform=true, 
bool accumulate=false );

說明:

channels - 用來計算直方圖的channels的數(shù)組
mask - 掩碼。假設(shè)mask不為空,那么它必須是一個8位(CV_8U)的數(shù)組,而且它的大小的和arrays[i]的大小同樣,值為1的點將用來計算
dim - 直方圖的維數(shù)。必須為正,而且不大于CV_MAX_DIMS(當前的OpenCV版本號中為32,即最大能夠統(tǒng)計32維的直方圖)
histSize - 在每一維上直方圖的個數(shù)。簡單把直方圖看作一個一個的豎條的話,就是每一維上豎條的個數(shù)
ranges - 用來進行統(tǒng)計的范圍

反投影直方圖

反向投影是一種記錄給定圖像中的像素點怎樣適應(yīng)直方圖模型像素分布的方式。
簡單的講,所謂反向投影就是首先計算某一特征的直方圖模型,然后使用模型去尋找圖像中存在的該特征。

void calcBackProject(
const Mat* arrays, 
int narrays, 
const int* channels, 
InputArray hist, 
OutputArray backProject, 
const float** ranges, 
double scale=1, bool uniform=true );

hist - 輸入直方圖
backProject - 反投影向量,這是一個單通道的向量,和arrays[0]具有同樣的大小和深度

以下使用膚色直方圖為例來解釋反向投影的工作原理:
使用模型直方圖(代表手掌的皮膚色調(diào))來檢測測試圖像中的皮膚區(qū)域,

  • 對測試圖像中的每一個像素 ( p(i,j) ),獲取色調(diào)數(shù)據(jù)并找到該色調(diào)( h(i,j), s(i,j) )在直方圖中的bin的位置
  • 查詢 模型直方圖 中相應(yīng)的bin( h(i,j), s(i,j) )并讀取該bin的數(shù)值
  • 將此數(shù)值儲存在新的圖像中(BackProjection)。 你也能夠先歸一化 模型直方圖 ,這樣測試圖像的輸出就能夠在屏幕顯示了
  • 通過對測試圖像中的每一個像素採用以上步驟, 得到 BackProjection 結(jié)果圖
    backProjection
    backProjection
  • 使用統(tǒng)計學(xué)的語言, BackProjection 中儲存的數(shù)值代表了測試圖像中該像素屬于皮膚區(qū)域的概率。比方以上圖為例, 亮起的區(qū)域是皮膚區(qū)域的概率更大(事實確實如此),而更暗的區(qū)域則表示更低的概率

閾值化

閾值是最簡單的圖像切割的方法。
應(yīng)用舉例:從一副圖像中利用閾值切割出我們須要的物體部分(當然這里的物體能夠是一部分或者總體)。這種圖像切割方法是基于圖像中物體與背景之間的灰度差異,并且此切割屬于像素級的切割。
為了從一副圖像中提取出我們須要的部分,應(yīng)該用圖像中的每個像素點的灰度值與選取的閾值進行比較,并作出對應(yīng)的推斷。(注意:閾值的選取依賴于詳細的問題。即:物體在不同的圖像中有可能會有不同的灰度值。)
一旦找到了須要切割的物體的像素點,我們能夠?qū)@些像素點設(shè)定一些特定的值來表示。(比如:能夠?qū)⒃撐矬w的像素點的灰度值設(shè)定為:‘0’(黑色),其它的像素點的灰度值為:‘255’(白色);當然像素點的灰度值能夠隨意,但最好設(shè)定的兩種顏色對照度較強,方便觀察結(jié)果)。

Threshold_Example
Threshold_Example

閾值類型

Threshold Type 1
Threshold Type 1
Threshold Type 2
Threshold Type 2
Threshold Type 3
Threshold Type 3
Threshold Type 4
Threshold Type 4
Threshold Type 5
Threshold Type 5

閾值A(chǔ)PI

double threshold(
InputArray src, 
OutputArray dst, 
double thresh, 
double maxVal, 
int thresholdType);

均值漂移(Mean Shift)算法函數(shù)

該函數(shù)利用了迭代物體搜索算法,它要以一個物體的反射直方圖(back projection)和初始位置作為輸入。
搜索窗體的重心向反射直方圖的質(zhì)心(mass center)移動,該過程不斷的反復(fù),直到達到了迭代的次數(shù)(criteria.maxCount),或者窗體中心小于一個閾值(criteria.epsilon)。

int meanShift(
InputArray probImage,         // Back projection of the object histogram
Rect& window,                 // Initial search window
TermCriteria criteria        // Stop criteria for the iterative search algorithm.
);

Camshift算法函數(shù)

該函數(shù)首先利用meanShift()函數(shù)找到物體的中心,然后調(diào)整窗體的大小并找到最優(yōu)的旋轉(zhuǎn)角度。該函數(shù)返回一個rotated rectangle數(shù)據(jù)結(jié)構(gòu)(包括物體的位置,大小和旋轉(zhuǎn)角度)。下一次搜索窗體的位置能夠通過RotatedRect::boundingRect()得到。

RotatedRect CamShift(
InputArray probImage,         // Back projection of the object histogram
Rect& window,                 // Initial search window
TermCriteria criteria        // Stop criteria for the underlying meanShift()
);

TermCriteria模板類

該類是作為迭代算法的終止條件使用的,其構(gòu)造函數(shù)須要三個參數(shù):一個是類型,第二個參數(shù)為迭代的最大次數(shù),最后一個是特定的閾值。

TermCriteria(int type, int maxCount, double epsilon);

類型有CV_TERMCRIT_ITER、CV_TERMCRIT_EPS、CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,分別代表著迭代終止條件為達到最大迭代次數(shù)終止,迭代到閾值終止,或者兩者都作為迭代終止條件。

參考資料

OpenCV Histograms API文檔
直方圖之calcHist使用
直方圖之calcHist使用(補)
OpenCV 教程 imgproc模塊
反向投影
閾值操作

轉(zhuǎn)載請注明作者Jason Ding及其出處
Github主頁(http://jasonding1354./)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡書主頁(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲成人免费天堂诱惑| 黄片三级免费在线观看| 男人大臿蕉香蕉大视频| 69老司机精品视频在线观看| 丁香六月婷婷基地伊人| 日本 一区二区 在线| 日本一本不卡免费视频| 国产精品一区二区三区欧美| 国内尹人香蕉综合在线| 欧美日韩综合在线第一页| 中文日韩精品视频在线| 又色又爽又黄的三级视频| 国产亚洲视频香蕉一区| 97人摸人人澡人人人超碰| 国产中文另类天堂二区| 微拍一区二区三区福利| 五月天综合网五月天综合网| 丰满少妇被猛烈撞击在线视频| 性感少妇无套内射在线视频| 国产亚洲系列91精品| 九九九热视频最新在线| 免费亚洲黄色在线观看| 国产成人午夜在线视频| 天海翼高清二区三区在线| 色婷婷国产精品视频一区二区保健| 午夜视频成人在线观看| 欧美韩日在线观看一区| 亚洲天堂国产精品久久精品| 熟女免费视频一区二区| 中文字幕精品少妇人妻| 国产亚洲欧美一区二区| 中文字幕在线五月婷婷| 好吊色免费在线观看视频| 老司机精品在线你懂的| 欧美日本道一区二区三区| 国产亚洲欧美一区二区| 国产三级视频不卡在线观看| 日本女优一区二区三区免费| 日本黄色录像韩国黄色录像| 麻豆tv传媒在线观看| 成人日韩视频中文字幕|