• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      非動(dòng)態(tài)的背景建模與前景檢測(cè)算法

      2020-06-21 15:33:01王若宇
      河南科技 2020年10期

      王若宇

      摘 要:為了從一些復(fù)雜的場(chǎng)景中提取出人像,用到的開源代碼有很多,其均假設(shè)若一個(gè)像素的顏色在較長(zhǎng)時(shí)間內(nèi)變化不大,則認(rèn)為它是背景。但是,這些開源代碼在用于一些自拍攝像頭時(shí)效果較差,因?yàn)楫?dāng)一個(gè)人端坐在攝像頭前,他的像素不會(huì)發(fā)生很大變化。因此,本文提出了另外一種算法,該算法基于如下假設(shè):在背景建模期間前景不會(huì)出現(xiàn),且背景建模結(jié)束后,背景的變化始終為建模期間背景變化的子集。這種非動(dòng)態(tài)的算法適用于提取距離攝像頭距離更近的對(duì)象。

      關(guān)鍵詞:前景提取;前景檢測(cè);背景建模

      Abstract: In order to extract human images from some complex scenes, many open source codes are used, which assume that if the color of a pixel does not change much in a long time, it is considered as the background. However, these open source codes are not very effective for some self timer cameras, because when a person sits in front of the camera, his pixels will not change greatly. Therefore, this paper proposed another algorithm, which was based on the following assumption: the foreground would not appear during the background modeling, and after the background modeling, the background change was always a subset of the background change during the modeling. This non dynamic algorithm is suitable for extracting objects closer to the camera.

      Keywords: foreground extraction;foreground detection;background modeling

      1 算法設(shè)計(jì)

      1.1 算法思路

      由于是從攝像頭采集的圖像,因此其有BGR三個(gè)通道,每個(gè)通道的值為[0,255]。為每一個(gè)像素的每一個(gè)通道創(chuàng)建一個(gè)編碼本(CodeBook[1]),編碼本中儲(chǔ)存有若干個(gè)碼元(CodeElement),一個(gè)碼元中儲(chǔ)存一個(gè)區(qū)間。在前景檢測(cè)階段,若某一像素的三個(gè)通道都落在對(duì)應(yīng)編碼本的任一碼元里,則認(rèn)為它是背景;否則,認(rèn)為它是前景。據(jù)此得到掩模,然后利用形態(tài)學(xué)開閉操作、輪廓檢測(cè)、凸包運(yùn)算等消除噪聲,優(yōu)化掩模效果。

      創(chuàng)建編碼本和碼元的思路在數(shù)據(jù)結(jié)構(gòu)介紹中解釋。

      1.2 數(shù)據(jù)結(jié)構(gòu)介紹

      1.2.1 碼元(CodeElement)。創(chuàng)建碼元的代碼如下:

      1.2.2 編碼本(CodeBook)。創(chuàng)建編碼本的代碼如下:

      其中,learnHigh和learnLow表示一個(gè)學(xué)習(xí)閾值。在背景建模階段,對(duì)輸入圖像的每一個(gè)像素的每一通道,遍歷其編碼本中的碼元,如果該通道的值在某個(gè)碼元中,則跳過;如果該通道的值雖然不在某個(gè)碼元中,但它在(Min-learnLow)~(Max+learnHigh)中,則表示該碼元應(yīng)該學(xué)習(xí)這個(gè)像素,因此應(yīng)擴(kuò)大碼元的區(qū)間使之包含這個(gè)像素。若該通道的值不滿足上述兩個(gè)條件,則應(yīng)該為它的編碼本新建一個(gè)碼元,并使碼元的Max和Min初始值為該通道的值。

      1.2.3 編碼本索引。編碼本索引為codeBooks[]。其本質(zhì)為Python中的一個(gè)列表。它的元素個(gè)數(shù)為像素?cái)?shù)乘以通道數(shù)。本來使用三維數(shù)組來儲(chǔ)存可能會(huì)更為直觀,但列表并不支持。列表的index與圖像的位置和通道的映射關(guān)系為:

      1.3 核心代碼介紹

      1.3.1 創(chuàng)建編碼本。創(chuàng)建編碼本的函數(shù)代碼如下:

      在開始算法時(shí),所需采集的圖像信息已經(jīng)確定,因此編碼本數(shù)量已經(jīng)確定。按照設(shè)計(jì)的順序向編碼本索引中添加所有編碼本,以便之后對(duì)其進(jìn)行操作。

      該函數(shù)的參數(shù)依次為三個(gè)通道的學(xué)習(xí)上限和學(xué)習(xí)下限。

      1.3.2 更新編碼本。更新編碼本的函數(shù)代碼如下:

      建模的核心代碼用于建模時(shí)更新各個(gè)編碼本中的碼元。根據(jù)輸入的圖像數(shù)據(jù),有選擇地新建碼元或者擴(kuò)大碼元范圍。

      該函數(shù)的參數(shù)為當(dāng)前像素在當(dāng)前通道的顏色和索引。

      1.3.3 清除不常用的碼元。清除不常用的碼元的函數(shù)代碼如下:

      將更新時(shí)間很久遠(yuǎn)的碼元清除,以便減少碼元數(shù)量,提高代碼效率。但是,本次算法由于效率較低,建模數(shù)量本身就比較小,而且維護(hù)碼元更新時(shí)間需要大量開銷,因此暫時(shí)不用這個(gè)函數(shù)。

      1.3.4 計(jì)算掩模。計(jì)算掩模的函數(shù)代碼如下:

      根據(jù)輸入的顏色數(shù)值及其索引,判斷該數(shù)值是否在索引指向的編碼本的某一碼元中,若是,則返回True,否則返回False。

      該函數(shù)的參數(shù)為當(dāng)前像素在當(dāng)前通道的顏色和索引。

      返回值為表明輸入顏色是否在輸入索引所指向的編碼本中的布爾型值。

      1.3.5 主函數(shù)循環(huán)流程設(shè)計(jì)

      1.3.5.1 建模。設(shè)置變量frameNum記錄當(dāng)前幀數(shù),若幀數(shù)小于事先設(shè)置的createdFrame變量,則表示該幀用于建模,用如下三層循環(huán)對(duì)該幀所有像素的三個(gè)通道遍歷,均調(diào)用updateCodeBook()函數(shù)更新其編碼本:

      1.3.5.2 顯示。當(dāng)幀數(shù)frameNum大于事先設(shè)置的createdFrame變量時(shí),表示該幀用于顯示。使用如下三層循環(huán)尋找掩模:

      從圖1可以看到,其存在大量噪聲,因此需要用形態(tài)學(xué)方法對(duì)其進(jìn)行處理。

      1.3.5.3 優(yōu)化處理。優(yōu)化處理步驟如下。

      第一步,進(jìn)行開閉操作初步去除噪聲,代碼如下。

      從圖2可知,仍有部分噪聲,且手邊界被腐蝕。

      為了查看目前效果,設(shè)置建模幀數(shù)為100,并在建模時(shí)有意將手出現(xiàn)在建模范圍內(nèi),但并不一直出現(xiàn)。將處理后掩模對(duì)應(yīng)原視頻幀輸出,效果如圖3所示。

      從圖3可知,雖然效果不錯(cuò),但需要的建模時(shí)間較長(zhǎng)(1 min),且建模時(shí)要刻意將手出現(xiàn)在視頻里,調(diào)節(jié)建模效果。

      分析20幀建模結(jié)果發(fā)現(xiàn),噪聲周長(zhǎng)遠(yuǎn)小于識(shí)別目標(biāo)。結(jié)合分析100幀建模結(jié)果發(fā)現(xiàn),手的邊界被腐蝕了部分,應(yīng)該據(jù)此進(jìn)行進(jìn)一步處理。

      第二步,消除小輪廓,用凸包運(yùn)算填充大輪廓。

      圖4中兩種風(fēng)格的圖像都是在同一模型下識(shí)別的。由于研究者使用的攝像頭會(huì)在畫面較暗時(shí)調(diào)整相關(guān)參數(shù),變?yōu)橄旅娴膱D像風(fēng)格,正好可以用于測(cè)試編碼本算法對(duì)背景有很大影響但規(guī)律變化時(shí)的效果。在建模時(shí),刻意調(diào)整攝像頭相關(guān)參數(shù),將上下兩圖的風(fēng)格都加入模型中。而后在前景檢測(cè)階段,無論攝像頭在哪種風(fēng)格下,都可以準(zhǔn)確識(shí)別前景。但是,由于凸包運(yùn)算使得下邊掩模丟失部分細(xì)節(jié)。若檢測(cè)范圍較大,這些細(xì)節(jié)可以被忽視。

      1.4 代碼內(nèi)參數(shù)介紹

      video為前景的視頻來源。backGround為背景的視頻來源。smallContour為區(qū)分大小輪廓的閾值,周長(zhǎng)小于該值為小輪廓,否則為大輪廓。createdFrame為用于建模的幀數(shù)。width為由于算法效率太低,只能處理小范圍圖像,用該值規(guī)定處理的寬度;height為由于算法效率太低,只能處理小范圍圖像,用該值規(guī)定處理的高度,具體是取視頻左上角該大小的圖像,即坐標(biāo)為[0:height][0:width]的像素。changeNum用于元組擴(kuò)大范圍時(shí),不但包含傳入的顏色,而且進(jìn)一步根據(jù)該值擴(kuò)大范圍?;谌缦虏聹y(cè):當(dāng)顏色color為背景時(shí),[color-changeNum,color+changeNum]都可能為背景。函數(shù)creatCodeBook(10, 10, 10, 10, 10, 10)的參數(shù)為各個(gè)通道的學(xué)習(xí)閾值。該值越大元組范圍越大,元組數(shù)目越少。

      2 算法特點(diǎn)總結(jié)

      使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的編碼本算法。但是,不動(dòng)態(tài)更新編碼本,而是與背景減除的思想結(jié)合,在程序開始時(shí)建模,期待用戶將盡可能多的背景情況包含在模型中,又不出現(xiàn)前景。這個(gè)條件雖然苛刻,但是有其道理:在只根據(jù)當(dāng)前攝像頭輸入運(yùn)行算法的情況下(即沒有現(xiàn)成的模型,沒有約定的背景或者前景顏色),若一個(gè)人端坐在攝像頭前,其衣服上的像素顏色變化范圍將很小,與背景顏色變化規(guī)律幾乎是一致的,因此,若建模的時(shí)候出現(xiàn)前景,很難將它與背景區(qū)別開。

      本算法適用于背景規(guī)律變化的情況,在建模階段獲取的全部信息都可以在前景檢測(cè)階段被成功識(shí)別為背景。

      此外,對(duì)編碼本算法做了些許修改,比如,每像素的每個(gè)通道一個(gè)編碼本,而不是每像素一個(gè)編碼本;學(xué)習(xí)閾值儲(chǔ)存在編碼本中而不是碼元中等。

      本算法未針對(duì)前景出現(xiàn)后背景的變化進(jìn)行計(jì)算(如前景的陰影,或前景出現(xiàn)后攝像頭自動(dòng)調(diào)節(jié)亮度)。攝像頭自動(dòng)調(diào)節(jié)亮度的問題可通過將視頻轉(zhuǎn)化為YUV通道,然后增大V通道的changeNum和學(xué)習(xí)閾值來改善。

      參考文獻(xiàn):

      [1]Gary Bradski,Adrian Kaehler.Learning Opencv[M].北京:清華大學(xué)出版社,2009.

      麻江县| 老河口市| 江阴市| 望奎县| 苍溪县| 荥经县| 图们市| 二连浩特市| 封丘县| 巢湖市| 民勤县| 辰溪县| 左权县| 小金县| 辽阳县| 独山县| 银川市| 阳原县| 台前县| 安义县| 肃宁县| 静乐县| 重庆市| 平定县| 敦化市| 正宁县| 大余县| 奎屯市| 红桥区| 黑龙江省| 达拉特旗| 信阳市| 班玛县| 宁明县| 赤水市| 宜黄县| 蓝山县| 孙吴县| 廊坊市| 济宁市| 镇宁|