《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 差影法模擬物體運(yùn)動(dòng)軌跡的研究與實(shí)現(xiàn)
差影法模擬物體運(yùn)動(dòng)軌跡的研究與實(shí)現(xiàn)
劉國(guó)柱,高全磊
(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島 266061)
摘要: 物體在不同介質(zhì)中的運(yùn)動(dòng)軌跡受到介質(zhì)的粘度、比重的影響,將物體的運(yùn)行軌跡從圖片中提取出來,有助于分析物體在不同介質(zhì)中的運(yùn)動(dòng)規(guī)律。本文中動(dòng)態(tài)視頻轉(zhuǎn)換成靜態(tài)bmp圖片序列,采用差影法針對(duì)bmp圖片進(jìn)行處理,再將處理后的系列bmp圖片進(jìn)行整合,得到物體的運(yùn)行軌跡,呈現(xiàn)出物體運(yùn)行軌跡曲線。結(jié)果表明差影法對(duì)物體運(yùn)動(dòng)軌跡的模擬可靠有效。
Abstract:
Key words :

  摘 要: 物體在不同介質(zhì)中的運(yùn)動(dòng)軌跡受到介質(zhì)的粘度、比重的影響,將物體的運(yùn)行軌跡從圖片中提取出來,有助于分析物體在不同介質(zhì)中的運(yùn)動(dòng)規(guī)律。本文中動(dòng)態(tài)視頻轉(zhuǎn)換成靜態(tài)bmp圖片序列,采用差影法針對(duì)bmp圖片進(jìn)行處理,再將處理后的系列bmp圖片進(jìn)行整合,得到物體的運(yùn)行軌跡,呈現(xiàn)出物體運(yùn)行軌跡曲線。結(jié)果表明差影法對(duì)物體運(yùn)動(dòng)軌跡的模擬可靠有效。

  關(guān)鍵詞數(shù)字圖像處理;運(yùn)動(dòng)軌跡差影法;bmp圖片

0 引言

  數(shù)字圖像處理是指將圖像信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)并利用計(jì)算機(jī)對(duì)其進(jìn)行處理的過程[1]。圖像是人類獲取和交換信息的主要來源,因此,圖像處理的應(yīng)用具有重要作用。本文基于差影法獲取物體運(yùn)動(dòng)軌跡。運(yùn)動(dòng)軌跡是最重要的物體運(yùn)動(dòng)信息之一,通過運(yùn)動(dòng)軌跡可以很好地分析物體的運(yùn)動(dòng)規(guī)律,還可以計(jì)算出其他的運(yùn)動(dòng)信息,如速度、加速度[2]。使用差影法獲取物體運(yùn)動(dòng)軌跡,方法簡(jiǎn)單,思路清晰,追蹤運(yùn)動(dòng)物體軌跡的過程清晰明了,并且具有很高的魯棒性和處理速度。

1 差影法的原理

  差影法在動(dòng)態(tài)檢測(cè)與識(shí)別技術(shù)、血管造影技術(shù)及印刷線路板掩模缺陷的診斷等技術(shù)中都有應(yīng)用,利用差影法可以檢測(cè)同一場(chǎng)景中兩幅圖像間的差異[3]。差影法本質(zhì)就是對(duì)圖像進(jìn)行代數(shù)運(yùn)算,即對(duì)兩幅圖片中對(duì)應(yīng)坐標(biāo)位置的運(yùn)算。本文的操作使用了圖像相減的做法,即對(duì)于同一場(chǎng)景的兩幅圖,圖像的背景是大致相同的,當(dāng)兩幅圖進(jìn)行相減時(shí),相同位置的背景因?yàn)榛叶戎迪嗤?,使得像素值變?yōu)?,而目標(biāo)物體因?yàn)槲恢貌煌韵鄿p后值不為0,處理后的圖像就只有兩個(gè)目標(biāo)物體的位置有像素點(diǎn),背景因而變?yōu)楹谏?。可以?jù)此得出物體的軌跡。其中輸入圖像為A(X,Y)和B(X,Y),輸出圖像為C(X,Y),滿足公式C(X,Y)=A(X,Y)±B(X,Y)[4]。使用差影法將兩幅圖像相減所得結(jié)果如圖1、圖2和圖3所示。

001.jpg

2 bmp圖片文件格式

  bmp圖片文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成[5]。文件頭主要包含文件的大小、文件類型、圖像數(shù)據(jù)偏離文件頭的長(zhǎng)度等信息;位圖信息頭包含圖像的尺寸信息、圖像用幾個(gè)比特?cái)?shù)值來表示一個(gè)像素、圖像是否壓縮、圖像所用的顏色數(shù)等信息。顏色信息包含圖像所用到的顏色表,顯示圖像時(shí)需用到這個(gè)顏色表來進(jìn)行調(diào)色。文件中的數(shù)據(jù)塊表示圖像的相應(yīng)的像素值。bmp文件中位圖數(shù)據(jù)是以連續(xù)行的形式存儲(chǔ)的[6]。具體格式如圖4所示。

002.jpg

  其中,顏色表的大小由位圖信息頭中的位深度決定,當(dāng)位深度是1、4、8時(shí),分別有2、16、256個(gè)顏色表項(xiàng),當(dāng)位深度是24時(shí),圖像為真彩色,圖像中每個(gè)像素的顏色用3個(gè)字節(jié)表示,分別對(duì)應(yīng)R、G、B值,圖像文件沒有顏色表項(xiàng)。

  位圖各部分詳細(xì)內(nèi)容如下:

  文件頭:

  typedef struct tagBITMAPFILEHEADER {

  WORD bfType; //位圖文件類型

  DWORD bfSize; //位圖文件的大小

  WORD bfReserved1; //位圖文件保留字1

  WORD bfReserved2; //位圖文件保留字2

  DWORD bfOffBits; //位圖數(shù)據(jù)部分相

  //對(duì)于文件頭的偏移量

  } BITMAPFILEHEADER,

  FAR *LPBITMAPFILEHEADER,

  *PBITMAPFILEHEADER;

  信息頭:

  typedef struct tagBITMAPINFOHEADER{

  DWORD biSize; //該結(jié)構(gòu)所占字節(jié)數(shù)

  LONG biWidth; //位圖寬度

  LONG biHeight; //位圖高度

  WORD biPlanes; //目標(biāo)設(shè)備平面數(shù)目

  WORD biBitCount; //位深度

  DWORD biCompression; //壓縮類型

  DWORD biSizeImage; //位圖數(shù)據(jù)大小

  LONG biXPelsPerMeter; //水平分辨率

  LONG biYPelsPerMeter; //垂直分辨率

  DWORD biClrUsed; //使用的顏色表項(xiàng)數(shù)

  DWORD biClrImportant;

  } BITMAPINFOHEADER,

  FAR *LPBITMAPINFOHEADER,

  *PBITMAPINFOHEADER;

  顏色表(RGB值):

  typedef struct tagRGBQUAD {

  BYTE rgbBlue;

  BYTE rgbGreen;

  BYTE rgbRed;

  BYTE rgbReserved;

  } RGBQUAD;

  其中顏色表和位圖信息頭組成位圖信息:

  typedef struct tagBITMAPINFO {

  BITMAPINFOHEADER bmiHeader;

  RGBQUAD bmiColors[1];

  } BITMAPINFO, FAR *LPBITMAPINFO,

  *PBITMAPINFO;

3 視頻處理流程

  使用差影法,讓兩幅圖片中不同的地方突顯出來,以實(shí)現(xiàn)追蹤物體運(yùn)動(dòng)軌跡的目的[7],處理流程如圖5所示。首先將視頻轉(zhuǎn)換為幀序列,然后加載一幅圖片作為背景,再將目標(biāo)圖片加載到內(nèi)存,進(jìn)行差影法處理,處理后若該圖片不是最后一幀則保存差影后的結(jié)果為新的背景,繼續(xù)操作,直至最后一幀圖片(注:使用AVI格式視頻,幀序列中的圖片格式是bmp)。

003.jpg

4 差影法處理視頻

  使用的開發(fā)工具是Visual Studio2010,開發(fā)語(yǔ)言為C++,使用類庫(kù)MFC、Opencv2。

  4.1 視頻轉(zhuǎn)換為幀序列

  使用Opencv2來實(shí)現(xiàn)avi視頻轉(zhuǎn)換為bmp格式圖片序列。

  使用cvCaptureFromFile(CString)函數(shù)來捕獲視頻中的每一幀。主要代碼如下:

  CvCapture *cap= cvCaptureFromFile(vedioName);

  if (cap==NULL)

  {

  MessageBox("失敗,請(qǐng)確認(rèn)視頻格式是avi !!");

  EndWaitCursor();

  }

  char fileName[300]; //文件名

  char* format=".bmp"; //圖片格式

  char* fileBag="d:\\testPics\\";

  IplImage* pImg=NULL;

  int frame=0;

  //捕獲每一幀圖片

  while((pImg=cvQueryFrame(cap))!=NULL) {

  frame++;

  strcpy(lastName,"");

  sprintf(lastName,"%s%d%s",fileBag,frame,format);

  //保存捕獲的幀

  cvSaveImage(fileName,pImg,NULL);

  }

  4.2 圖片的加載

  要處理圖片必須將其加載到內(nèi)存,然后才能做相應(yīng)的處理。本系統(tǒng)使用MFC中的CFile類,通過CFile的Read函數(shù)將圖片讀入[8]。主要代碼如下:

  CFile file;

  //用一定模式打開文件

  if(!file.Open(pathName,CFile::modeRead)) return FALSE;

  DWORD fileLength;

  fileLength = file.GetLength();

  char *m_pBMPBuffer = new char[fileLength + 1];

  if(!m_pBMPBuffer)

  return FALSE;

  if(file.Read(m_pBMPBuffer,fileLength)!=m_nFileLen)

  //從文件中讀入指定字節(jié)數(shù)的數(shù)據(jù)

  return FALSE;

  file.Close();

  4.3 使用差影法處理圖片

  通過分析bmp文件的格式,可以分別獲取到圖片的文件頭、信息頭、顏色表、像素?cái)?shù)據(jù)。由于對(duì)同一視頻獲取的幀序列而言,它們的文件頭、信息頭和顏色表都是一致的,故僅處理像素?cái)?shù)據(jù)部分,處理后,再利用原來圖片的文件頭、信息頭和顏色表等信息,拼湊出一個(gè)新的bmp圖片文件。主要代碼如下:

  BITMAPINFOHEADER &bmiHeader_old=

  *(LPBITMAPINFOHEADER)hDIB_Old ;

  BITMAPINFO &bmInfo_old=

  *(LPBITMAPINFO)hDIB_Old ;

  unsigned char pixelValue1,pixelValue2;

  LPSTR lpDst;

  LPSTR lpYuan,lpBack;

  LONG i,j;

  for (i=0;i<bmHeight;i++) //對(duì)比每一個(gè)像素

  {

  for(j=0;j <perLineBytes;j++)

  {

  lpYuan=(char*)hDIB_Old_Data +

  perLineBytes * i + j;

  lpBack=(char *)hDIB_Template_Data + perLineBytes

  * i + j;

  lpDst = (char *)m_newBMPDATA + perLineBytes * i

  + j;

  pixelValue1= (unsigned char)* lpYuan;

  pixelValue2= (unsigned char)* lpBack;

  *lpDst=(pixelValue1-pixelValue2)<0?abs(pixelValue-

  pixelValue2) : (pixelValue1- pixelValue2);

  }

  }

  CClientDC dc(this);

  CreateDIBitmap(dc.m_hDC,&bmiHeader_old,CBM_INIT,m_

  newBMPDATA,&bmInfo_old,DIB_RGB_COLORS);

  //創(chuàng)建位圖

5 結(jié)果分析

004.jpg

  針對(duì)圖6和圖7中的兩幀圖像使用差影法處理,得到如圖8所示結(jié)果。由圖8可以看出,差影法對(duì)求物體運(yùn)動(dòng)軌跡是可行的,并且處理后的結(jié)果清晰,可以準(zhǔn)確地辨別出目標(biāo)物體。

005.jpg

  通過差影法的循環(huán)使用,得到目標(biāo)物體的運(yùn)動(dòng)軌跡如圖9所示。由圖9看出,軌跡清晰明了,目標(biāo)物體的輪廓明顯,而且處理后的結(jié)果并無模糊現(xiàn)象[9]。驗(yàn)證了差影法模擬運(yùn)動(dòng)軌跡的可行性和可靠性。

6 結(jié)論

  基于差影法來獲取物體運(yùn)動(dòng)軌跡是可行的,并取得了良好的實(shí)驗(yàn)結(jié)果,達(dá)到了預(yù)期目的。文中對(duì)獲取物體運(yùn)動(dòng)軌跡進(jìn)行了一些研究,仍有以下內(nèi)容需要進(jìn)一步研究:

  (1)文中使用的視頻格式為AVI,圖片的格式為bmp,可以基于本研究,推廣到其他視頻格式和圖片格式的應(yīng)用。

  (2)可以結(jié)合實(shí)際問題來分析運(yùn)動(dòng)物體的軌跡,如交通運(yùn)輸、實(shí)時(shí)監(jiān)控、行為分析等領(lǐng)域,使系統(tǒng)的可用性更強(qiáng)。

參考文獻(xiàn)

  [1] 李立芳. 淺談數(shù)字圖像處理技術(shù)及應(yīng)用[J]. 中國(guó)科技信息, 2012(3):78-79.

  [2] 孫達(dá),黃劍華,唐降龍. 大場(chǎng)景中物體運(yùn)動(dòng)軌跡的測(cè)量[J]. 計(jì)算機(jī)工程, 2009,35(9):17-18.

  [3] 周彩霞,匡綱要,宋海娜,等. 基于差影法粗分割與多模板匹配的人臉檢測(cè)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2004,25(10):1648-1650.

  [4] 降雨志,張義順,張華軍,等. 投影法和差影法在焊縫跟蹤圖像識(shí)別中的應(yīng)用[J]. 沈陽(yáng)工業(yè)大學(xué)學(xué)報(bào), 2005,27(5):558-561.

  [5] 宋葉未,葉建芳. BMP格式位圖文件的分析及顯示算法[J]. 現(xiàn)代電子技術(shù), 2011,34(20):5-7.

  [6] 張明敏. 圖形圖像文件格式解碼實(shí)用程序[J]. 中國(guó)圖像圖形學(xué)報(bào), 1998,3(5):73-79.

  [7] 羅佳佳. 基于差影法與攝像機(jī)定標(biāo)技術(shù)的車牌定位研究[D].武漢:武漢理工大學(xué), 2008.

  [8] 宋坤,劉銳寧,李偉明. Visual C++開發(fā)技術(shù)大全[M]. 北京:人民郵電出版社, 2008.

  [9] 楊曉曉. 高速運(yùn)動(dòng)物體軌跡預(yù)測(cè)的研究[D]. 北京:北京交通大學(xué),2012.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。