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

分享

【計(jì)算機(jī)視覺】借助圖像直方圖來檢測(cè)特定物

 黑塵子 2015-11-30

直方圖引入

直方圖是一個(gè)簡(jiǎn)單的表,它給出了一幅圖像或一組圖像中擁有給定數(shù)值的像素?cái)?shù)量。因此,灰度圖像的直方圖有256個(gè)條目(或稱為容器)。0號(hào)容器給出值為0的像素?cái)?shù)目,1號(hào)容器給出值為1的像素個(gè)數(shù),以此類推。

直方圖反投影

直方圖是圖像內(nèi)容的一個(gè)重要特性。如果一幅圖像的區(qū)域中顯示的是一種獨(dú)特的紋理或是一個(gè)獨(dú)特的物體,那么這個(gè)區(qū)域的直方圖可以看做一個(gè)概率函數(shù),它給出的是某個(gè)像素屬于該紋理或物體的概率。這使得我們可以借助圖像的直方圖來檢測(cè)特定的內(nèi)容。
反投影直方圖的方法是一種把目標(biāo)概率分布映射到觀測(cè)圖像的簡(jiǎn)單方法。其作用是,替換一個(gè)輸入圖像中每一個(gè)像素值,使其變成感興趣區(qū)域(ROI)的直方圖中對(duì)應(yīng)的概率值
其在opencv2的C++ API為:

1
2
3
4
5
6
7
8
cv::calcBackProject(&image,
1, //一幅圖像
channels, //通道數(shù)量
histogram, //進(jìn)行反投影的直方圖
result, //生成的反投影圖像
ranges, //每個(gè)維度的值域
255.0 //縮放因子
);

HSV顏色空間

HSV(Hue,Saturation,Value)是根據(jù)顏色的直觀特性(色調(diào)H,飽和度S,亮度V)創(chuàng)建的一種顏色空間, 也稱六角錐體模型(Hexcone Model)。

色調(diào)H

用角度度量,取值范圍為0°~360°,從紅色開始按逆時(shí)針方向計(jì)算,紅色為0°,綠色為120°,藍(lán)色為240°。它們的補(bǔ)色是:黃色為60°,青色為180°,品紅為300°;

飽和度S

取值范圍為0.0~1.0,值越大,顏色越飽和。

亮度V

取值范圍為0.0(黑色)~1.0(白色)。
HSV模型的三維表示從RGB立方體演化而來。設(shè)想從RGB沿立方體對(duì)角線的白色頂點(diǎn)向黑色頂點(diǎn)觀察,就可以看到立方體的六邊形外形。六邊形邊界表示色彩,水平軸表示純度,明度沿垂直軸測(cè)量。
HSV顏色空間

hue表示顏色的相位角,取值范圍是0—-360;S表示顏色的飽和度;S為一比例值,范圍從0到1,它表示成所選顏色的純度和該顏色最大的純度之間的比率,通俗點(diǎn)講,S表示的是某種顏色的“純度”, S取值越大,表示色彩越純,取值越小,表示色彩越灰。V表示色彩的明亮程度,范圍從0到1。V等于0表示圓錐的底部定點(diǎn),也就是黑色,V等于1表示圓錐的頂面,當(dāng)V=1并且S=0時(shí)表示純白色。
HSV圓錐

應(yīng)用示例:建立顏色概率模型

由于我們要進(jìn)行的是通過一種算法來實(shí)現(xiàn)檢測(cè)特定物體(尤其是人臉)的功能,所以通過這個(gè)示例的引入,來為后面介紹Mean Shift算法打下基礎(chǔ)。
因?yàn)槟w色在顏色空間的分析相當(dāng)集中,但會(huì)受到光照和人種的影響。為了減少膚色收光照強(qiáng)度的影響,通常將顏色空間從RBG轉(zhuǎn)換到亮度和色度分離的某個(gè)顏色空間,如HSV顏色空間,然后放棄亮度分量。
采集膚色樣本,吧膚色樣本中的每個(gè)像素從RGB空間轉(zhuǎn)換到HSV空間,統(tǒng)計(jì)其H分量的直方圖,并對(duì)該直方圖進(jìn)行歸一化處理,就可以得到膚色在H空間的概率分布,該概率分布就是所需的跟蹤模式。

具體步驟如下:
1、將觀測(cè)圖像中每個(gè)像素從RGB空間映射到HSV空間,按公式計(jì)算H分量大小建立起統(tǒng)計(jì)直方圖
2、根據(jù)直方圖進(jìn)行反向投影運(yùn)算,即,將觀測(cè)圖像中的每個(gè)像素值,用其H分量在已建立的統(tǒng)計(jì)直方圖中對(duì)應(yīng)的值代替
3、所得到輸出圖像就是觀測(cè)圖像的顏色概率分布圖像

現(xiàn)在,用程序演示直方圖反投影算法中使用顏色信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class ContentFinder
{
private:
float hranges[2];
const float* ranges[3];
int channels[3];
float threshold;
cv::MatND histogram;
public:
ContentFinder():threshold(-1.0f){
ranges[0] = hranges;//所有通道的值相同
ranges[1] = hranges;
ranges[2] = hranges;
}
//設(shè)置直方圖的閾值[0,1]
void setThreshold(float t)
{
threshold = t;
}
//獲取閾值
float getThreshold()
{
return threshold;
}
//設(shè)置參考直方圖
void setHistogram(const cv::MatND& h)
{
histogram = h;
cv::normalize(histogram,histogram,1.0);//輸入直方圖必須是歸一化后的
}
cv::Mat find(const cv::Mat& image,
float minValue,float maxValue,
int* channels,int dim);
};
cv::Mat ContentFinder::find(const cv::Mat& image,
float minValue,float maxValue,
int* channels,int dim)
{
cv::Mat result;
hranges[0] = minValue;
hranges[1] = maxValue;
for(int i=0;i<dim;i++)
{
this->channels[i] = channels[i];
}
cv::calcBackProject(&image,1, //輸入圖片
channels, //所有通道列表
histogram, //直方圖
result, //反投影的結(jié)果
ranges, //值域
255.0 //縮放因子
);
//進(jìn)行閾值化以得到二值圖像
if(threshold > 0.0)
cv::threshold(result,result,255*threshold,255,cv::THRESH_BINARY);
return result;
}

均值漂移(Mean Shift)算法

假設(shè)我們現(xiàn)在知道物體的近似位置,概率映射可用于找到的對(duì)象的確切位置。最有可能的位置是在已知窗口區(qū)域中得到最大概率的位置。因此,如果我們從最初的位置開始,并且迭代移動(dòng),邊可以找到精確的位置。這便是均值漂移算法所要完成的任務(wù)。

原理

均值漂移算法以迭代的方式鎖定概率函數(shù)的局部最大值。它主要是尋找預(yù)定義窗口中數(shù)據(jù)點(diǎn)的重心點(diǎn),或者說加權(quán)平均值。該算法將窗口中心移動(dòng)到數(shù)據(jù)點(diǎn)的重心處,并重復(fù)這個(gè)過程直到窗口重心收斂到一個(gè)穩(wěn)定點(diǎn)。
從數(shù)學(xué)角度上說,Mean Shift算法利用概率密度的梯度爬升來尋找局部最優(yōu)。當(dāng)輸入一個(gè)圖像的范圍,然后根據(jù)反向投影圖和輸入的方框進(jìn)行Mean Shift迭代,它是向重心移動(dòng),即向反向投影圖中概率大的地方移動(dòng),所以始終會(huì)移動(dòng)到目標(biāo)上,Mean Shift算法是一個(gè)變步長(zhǎng)的梯度上升算法。
現(xiàn)考慮一個(gè)點(diǎn)集(這可以是經(jīng)過直方圖反投影的像素點(diǎn)的分布),現(xiàn)有一個(gè)小窗口,需要將其移至像素點(diǎn)最密集的區(qū)域。如下圖所示:
meanshift_basics
最初的窗口表示為C1這個(gè)大的藍(lán)色圓圈,其原始中心為”C1_o”。隨著這個(gè)中心點(diǎn)向局部密度較大的區(qū)域移動(dòng),得到了”C1_r”的中心點(diǎn)。隨著這個(gè)過程的迭代,最終會(huì)得到一個(gè)最大像素點(diǎn)分布的區(qū)域,即C2,該區(qū)域包含了最多數(shù)量的點(diǎn)。

總結(jié)下來,Mean Shift的基本思路是,從每個(gè)像素開始,首先估計(jì)有相似顏色的鄰近像素點(diǎn)的密度(局部密度)的梯度,而后利用迭代算法求出局部密度的峰值(即重心點(diǎn)),把能夠聚類到同一個(gè)峰值點(diǎn)的所有像素點(diǎn)劃分成一個(gè)區(qū)域。

基本流程

(1)選擇跟蹤窗口的大小和初始位置。在Mean Shift跟蹤算法中,核窗寬(即核函數(shù)的定義域的大小,就是搜索窗口的大小)的大小起著非常重要的作用。因?yàn)樗坏珱Q定了參與Mean Shift迭代的樣本數(shù)量,而且也反映了跟蹤窗口的大小。通常,核窗寬由初始跟蹤窗口的尺寸決定,而且在整個(gè)跟蹤過程中不再發(fā)生變化。
meanshift_step1
(2)計(jì)算跟蹤窗口內(nèi)的質(zhì)心(或重心)。在離散二維(2D)概率分布圖像中,計(jì)算某窗口的質(zhì)心同物理上計(jì)算某物體的質(zhì)心一樣,即利用窗口的零階矩M00和(x,y)的一階矩(M10,M01)之間的關(guān)系,計(jì)算得到窗口的質(zhì)心。
公式
meanshift_step2
(3)調(diào)整跟蹤窗口的中心到質(zhì)心;
(4)重復(fù)第二步和第三步,直到跟蹤窗口中心和質(zhì)心“會(huì)聚”,即每次窗口移動(dòng)的距離小于一定的閾值。
meanshift_step3

一般一個(gè)圖像就是個(gè)矩陣,像素點(diǎn)均勻的分布在圖像上,就沒有點(diǎn)的稠密性。所以怎樣來定義點(diǎn)的概率密度,這才是最關(guān)鍵的。而我們可以根據(jù)像素點(diǎn)的顏色相近來定義為概率密度高。
其作為人臉跟蹤的應(yīng)用由下圖演示:
meanshift_face

優(yōu)點(diǎn)

Mean Shift作為一種高效的模式匹配算法,由于不需要進(jìn)行全局搜索,而且搜索精度高,已經(jīng)廣泛地應(yīng)用在各種模式識(shí)別、實(shí)時(shí)可視跟蹤等領(lǐng)域。

不足

缺乏必要的模型更新方法;整個(gè)跟蹤過程中跟蹤窗口的大小保持不變,當(dāng)目標(biāo)存在尺度變化的時(shí)候會(huì)導(dǎo)致尺度定位不準(zhǔn)確。

連續(xù)自適應(yīng)的Meanshift(CamShift)算法

Bradski根據(jù)Mean Shift算法的不足,提出了Camshift算法。CamShift算法,即Continuously Adaptive Mean-Shift算法,基本思想就是對(duì)視頻圖像的多幀進(jìn)行MeanShift運(yùn)算,將上一幀結(jié)果作為下一幀的初始值,迭代下去。
該算法采用不變矩對(duì)目標(biāo)的尺寸進(jìn)行估算,實(shí)現(xiàn)了連續(xù)自適應(yīng)地調(diào)整跟蹤窗口的大小和位置,并將其應(yīng)用在對(duì)連續(xù)彩色圖像序列中的運(yùn)動(dòng)目標(biāo)的快速跟蹤。
簡(jiǎn)單點(diǎn)說,Mean Shift是針對(duì)單張圖片尋找最優(yōu)迭代結(jié)果,而Camshift則是針對(duì)視頻序列來處理,并對(duì)該序列中的每一幀圖片都調(diào)用Mean Shift來尋找最優(yōu)迭代結(jié)果。正是由于Camshift針對(duì)一個(gè)視頻序列進(jìn)行處理,從而保證其可以不斷調(diào)整窗口的大小,如此一來,當(dāng)目標(biāo)的大小發(fā)生變化的時(shí)候,該算法就可以自適應(yīng)地調(diào)整目標(biāo)區(qū)域繼續(xù)跟蹤。

原理

Camshift算法首先根據(jù)跟蹤目標(biāo)顏色概率模型,將視頻圖像轉(zhuǎn)化為概率分布圖像(PDI),并初始化一個(gè)矩形搜索窗口,對(duì)每一幀PDI圖像利用Mean Shift算法搜索目標(biāo)匹配的最優(yōu)區(qū)域,并根據(jù)搜索區(qū)域的不變矩估算跟蹤目標(biāo)的中心和大小,保存和輸出當(dāng)前幀搜索結(jié)果,并且用當(dāng)前幀搜索結(jié)果作為下一幀圖像初始化搜索窗口。如此循環(huán),即可實(shí)現(xiàn)對(duì)目標(biāo)的連續(xù)跟蹤。Camshift算法是一種動(dòng)態(tài)變化的非參數(shù)密度函數(shù)梯度估計(jì)方法。

具體步驟

(1)創(chuàng)建指定窗口的顏色概率分布圖,初始化一個(gè)搜索窗口W,其大小為S
camshift_1
由上圖左圖的直方圖可以知道,選定區(qū)域最常見的色度范圍。假設(shè)新的視頻幀到來時(shí),每個(gè)像素點(diǎn)的色度值被檢測(cè),通過直方圖給出該像素點(diǎn)的概率值。
(2)利用Mean Shift算法使搜索窗口“收斂”;在2D概率分布圖像中,計(jì)算搜索窗口的質(zhì)心;調(diào)整搜索窗口的中心到計(jì)算的質(zhì)心位置。重復(fù)該過程,直到“收斂”(即中心的位移小于給定的閾值)
(3)重新設(shè)置搜索窗口的大小S并計(jì)算跟蹤目標(biāo)的輸出參數(shù),并用新的窗口大小初始化下一幀Mean Shift的搜索窗口
camshift_2
上圖表示通過Camshift算法跟蹤人臉時(shí)計(jì)算一個(gè)視頻幀圖像中可能存在人臉的圖像。黑色像素概率值最低,白色像素概率值最高,灰色像素介于二者之間。
(4)跳轉(zhuǎn)到第二步進(jìn)行下一幀的循環(huán)

下面是Camshift算法的人臉跟蹤演示:
camshift_face

參考資料

OpenCV 3.0.0-dev documentation
OpenCV 2 計(jì)算機(jī)視覺編程手冊(cè),科學(xué)出版社
基于OpenCV的人臉跟蹤識(shí)別系統(tǒng)研究,雷靜,西安電子科技大學(xué),碩士學(xué)位論文,2010
Meanshift,聚類算法

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产又粗又长又大高潮视频| 黄色国产一区二区三区| 精品人妻一区二区四区| 熟女体下毛荫荫黑森林自拍| 五月情婷婷综合激情综合狠狠| 沐浴偷拍一区二区视频| 国产成人精品一区二区在线看| 日本少妇aa特黄大片| 亚洲熟女乱色一区二区三区 | 老司机精品视频在线免费| 成人精品视频在线观看不卡| 国产精品乱子伦一区二区三区| 国产精品不卡高清在线观看| 欧美av人人妻av人人爽蜜桃| 伊人久久青草地综合婷婷| 欧美国产日韩在线综合| 亚洲中文字幕三区四区| 午夜亚洲精品理论片在线观看| 中文字幕精品一区二区三| 国产剧情欧美日韩中文在线| 99热九九热这里只有精品| 成人精品国产亚洲av久久 | 国产成人免费激情视频| av中文字幕一区二区三区在线| 妻子的新妈妈中文字幕| 国产一区二区不卡在线播放| 国语久精品在视频在线观看| 成人精品亚洲欧美日韩| 亚洲熟女诱惑一区二区| 中日韩免费一区二区三区| 亚洲精品国男人在线视频| 黄色在线免费高清观看| 日本加勒比在线播放一区| 最新午夜福利视频偷拍| 国产99久久精品果冻传媒| 老鸭窝老鸭窝一区二区| 一区二区日韩欧美精品| 亚洲av秘片一区二区三区| 欧美成人免费夜夜黄啪啪 | 久久99夜色精品噜噜亚洲av| 国产三级不卡在线观看视频|