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

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

  關鍵詞數(shù)字圖像處理;運動軌跡差影法;bmp圖片

0 引言

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

1 差影法的原理

  差影法在動態(tài)檢測與識別技術、血管造影技術及印刷線路板掩模缺陷的診斷等技術中都有應用,利用差影法可以檢測同一場景中兩幅圖像間的差異[3]。差影法本質就是對圖像進行代數(shù)運算,即對兩幅圖片中對應坐標位置的運算。本文的操作使用了圖像相減的做法,即對于同一場景的兩幅圖,圖像的背景是大致相同的,當兩幅圖進行相減時,相同位置的背景因為灰度值相同,使得像素值變?yōu)?,而目標物體因為位置不同,所以相減后值不為0,處理后的圖像就只有兩個目標物體的位置有像素點,背景因而變?yōu)楹谏?梢該?jù)此得出物體的軌跡。其中輸入圖像為A(X,Y)和B(X,Y),輸出圖像為C(X,Y),滿足公式C(X,Y)=A(X,Y)±B(X,Y)[4]。使用差影法將兩幅圖像相減所得結果如圖1、圖2和圖3所示。

001.jpg

2 bmp圖片文件格式

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

002.jpg

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

  位圖各部分詳細內容如下:

  文件頭:

  typedef struct tagBITMAPFILEHEADER {

  WORD bfType; //位圖文件類型

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

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

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

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

  //對于文件頭的偏移量

  } BITMAPFILEHEADER,

  FAR *LPBITMAPFILEHEADER,

  *PBITMAPFILEHEADER;

  信息頭:

  typedef struct tagBITMAPINFOHEADER{

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

  LONG biWidth; //位圖寬度

  LONG biHeight; //位圖高度

  WORD biPlanes; //目標設備平面數(shù)目

  WORD biBitCount; //位深度

  DWORD biCompression; //壓縮類型

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

  LONG biXPelsPerMeter; //水平分辨率

  LONG biYPelsPerMeter; //垂直分辨率

  DWORD biClrUsed; //使用的顏色表項數(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 視頻處理流程

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

003.jpg

4 差影法處理視頻

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

  4.1 視頻轉換為幀序列

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

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

  CvCapture *cap= cvCaptureFromFile(vedioName);

  if (cap==NULL)

  {

  MessageBox("失敗,請確認視頻格式是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 圖片的加載

  要處理圖片必須將其加載到內存,然后才能做相應的處理。本系統(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文件的格式,可以分別獲取到圖片的文件頭、信息頭、顏色表、像素數(shù)據(jù)。由于對同一視頻獲取的幀序列而言,它們的文件頭、信息頭和顏色表都是一致的,故僅處理像素數(shù)據(jù)部分,處理后,再利用原來圖片的文件頭、信息頭和顏色表等信息,拼湊出一個新的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++) //對比每一個像素

  {

  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 結果分析

004.jpg

  針對圖6和圖7中的兩幀圖像使用差影法處理,得到如圖8所示結果。由圖8可以看出,差影法對求物體運動軌跡是可行的,并且處理后的結果清晰,可以準確地辨別出目標物體。

005.jpg

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

6 結論

  基于差影法來獲取物體運動軌跡是可行的,并取得了良好的實驗結果,達到了預期目的。文中對獲取物體運動軌跡進行了一些研究,仍有以下內容需要進一步研究:

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

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

參考文獻

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

  [2] 孫達,黃劍華,唐降龍. 大場景中物體運動軌跡的測量[J]. 計算機工程, 2009,35(9):17-18.

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

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

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

  [6] 張明敏. 圖形圖像文件格式解碼實用程序[J]. 中國圖像圖形學報, 1998,3(5):73-79.

  [7] 羅佳佳. 基于差影法與攝像機定標技術的車牌定位研究[D].武漢:武漢理工大學, 2008.

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

  [9] 楊曉曉. 高速運動物體軌跡預測的研究[D]. 北京:北京交通大學,2012.


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