董 浩,王 帥,張 晶,周洪遠
(河北省科學院自動化研究所,河北 石家莊 050081)
數(shù)字圖像處理技術的目的是為了提高圖像的視感質量、提取圖像中所包含的某些特征或者對圖像數(shù)據進行格式變換,目前已在航空航天、生物醫(yī)學工程、工業(yè)檢測、機器人視覺等領域得到廣泛應用,并逐漸深入人們的日常生活。一般來說,數(shù)字圖像處理無論基于何種目的,都需要由計算機和專用的圖像處理軟件對圖像進行加工處理。
Visual Basic(VB)是一種由微軟公司開發(fā)的編程設計語言,它具有簡單易學、人機交互性好等優(yōu)點,已經在各領域得到廣泛應用。圖像處理并不是Visual Basic最具優(yōu)勢的開發(fā)方向,但是借助于其豐富的圖形控件和API函數(shù),Visual Basic可以用簡潔、高效的語言代碼對圖像進行實時處理,并取得令人滿意的效果。
鐵路軌道檢測儀主要用于檢測鐵路軌道的高低、水平、軌向等參數(shù),它主要由激光發(fā)射裝置和檢測接收系統(tǒng)組成。在檢測接收系統(tǒng)中,使用工業(yè)相機采集光斑圖像并對其進行處理獲得檢測參數(shù)。對此,我們開發(fā)了基于VB的實時圖像處理軟件,利用該軟件對光斑圖像進行圖像捕捉、獲取像素、減噪處理、二值化等操作,處理后的光斑圖像經數(shù)據處理、計算,結合軌道檢測儀所攜帶的其他設備,可以為鐵路日常維護提供詳實、全面的數(shù)據,有效提高了工務段日常線路維護的效率和質量。
要處理一幅圖像,首先要通過合適的手段捕捉圖像,Visual Basic提供了兩種控件用于圖像的顯示,分別是PictureBox控件和Image控件。Image控件沒有句柄,只能用于顯示圖片,不能作為其它控件的容器,也不支持PictureBox的高級方法。但是Image控件占用系統(tǒng)資源較少,繪圖速度快,而且其Strech屬性設置為ture時,圖形能自動調整大小以適應Image的尺寸。鑒于此,我們在捕捉圖像時,采用PictureBox控件,在軟件人機顯示界面,采用Image控件。
每一幅圖像都是由一系列像素點構成的點陣。在彩色圖像中,每個像素點都是由紅、綠、藍三個基色調調合而成的,如果獲取了每個像素點三種基色的數(shù)值,就可以對圖像進行深層次的處理。
在Visual Basic中,主要有三種方法可以讀取像素值,前文提到的PictureBox控件可以打開多種類型圖片,其本身提供的POINT方法可以讀取每一點的像素值,但是讀取速度較慢,占用內存較大;GetPixel方法需要調用API函數(shù),但其核心和POINT方法相同,仍然不是最佳選擇。目前較主流的方法是GetDIBits方法,使用GetDIBits方法獲取picturebox中各點的RGB值,比POINT方法或GetPixel函數(shù)逐像素獲取像素要快出一個數(shù)量級。使用GetDIBits方法獲取像素,首先要注意定義數(shù)據結構,這是GetDIBits方法不可缺少的。然后需要定義變量,用來存儲圖形的寬度和高度,并定義三維數(shù)組,存放獲取原彩色圖像中各像素的RGB值,這里需要注意的是,GetDIBits方法只能用于從PictureBox控件獲取像素,并不能從Image控件獲取,因為Image控件沒有句柄,如果想把Image控件的快速性和GetDIBits結合起來,可以采用自定義控件的方法,為Image控件添加句柄,這樣可以充分利用GetDIBits方法和Image控件的優(yōu)勢,獲取更加快速的像素讀取速度。
以下是GetDIBits方法獲取像素的部分代碼:
Dim iWidth As Integer
Dim iHeight As Integer
Dim bits()As Byte
iWidth=form1.Picture1.ScaleWidth/Screen.TwipsPerPixelX
iHeight=form1.Picture1.ScaleHeight/Screen.TwipsPerPixelY
Dim bi24BitInfo As BitMapInfo
With bi24BitInfo.bmiHeader
.biBitCount=32
.biCompression=0&
.biPlanes=1
.biSize= Len(bi24BitInfo.bmiHeader)
.biWidth=iWidth
.biHeight=form10.Picture1.ScaleHeight/Screen.TwipsPerPixelY
End With
ReDim bits(3,0To iWidth-1,0To iHeight)As Byte
ReDim bitsBW(3,0To iWidth-1,0To iHeight)As Byte
lrtn= GetDIBits(form1.Picture1.hdc,form1.Picture1.Picture.Handle,0&,iHeight,bits(0,0,0),bi24BitInfo,0&)
利用GetDIBits方法可以快速獲取圖片各點像素值,便于后期對圖片進行各種處理。
由于軌道檢測儀一般用于野外線路測量,檢測接收系統(tǒng)拍攝到的光斑圖像受日照影響較大,當光線直射到接收屏時,甚至出現(xiàn)激光光斑湮沒在背景噪聲中的現(xiàn)象,另外,長期野外測量,很容易使相機鏡頭帶有灰塵或者微小劃痕,這造成輸入的數(shù)碼圖像上帶有細微的雜色點或者細線,甚至出現(xiàn)背景波紋,如圖1、圖2所示。
圖1 激光光斑湮沒在背景噪聲中圖片
圖2 出現(xiàn)背景波紋的激光光斑圖片
為解決由光線和相機本身造成的噪聲污染,采集到的圖像必須經過減噪處理,即采用濾波、調節(jié)對比度、調節(jié)亮度等手段,對圖像進行減噪,以去除背景噪聲,提高圖像信噪比。借助于工業(yè)相機廠商提供的函數(shù),可以實現(xiàn)對不同光照狀態(tài)下圖像對比度、亮度的調節(jié)。下面主要介紹一下濾波,由于灰塵或者劃痕帶來的噪聲點寬度較小,一般在1到數(shù)個像素之間,而且其亮度和周圍正常像素點差異較大,如果我們針對每一個像素點,取一個范圍,比如和他周圍最接近的8個像素點作比較,取出差異最小的n個像素求平均,代替當前噪聲點,就可以達到去除噪聲點的效果,由于代碼過長,下面僅給出算法,以供參考。
舉例如下:范圍為8,噪聲點為6,取最接近的點為4,4,4,5,5,7,8
4 5 5
7 6 8
3 4 4
均值為(4+4+4+5+5+7+8)/7=5.28(四舍五入后為5)
處理后結果如下:
4 5 5
7 5 8
3 4 4
可以看出噪聲點已被去除。
經過采用濾波、調節(jié)對比度、調節(jié)亮度三種方法綜合處理,可以將不同光照條件下產生的噪聲有效去除,獲得的圖像具有較高信噪比,以下是調整前后圖像對比。
圖3 處理前的激光光斑圖片
圖4 處理后的激光光斑圖片
經過減噪處理的圖片,已經基本去除了環(huán)境噪聲,可以對圖像進行二值化操作,進一步處理圖像,二值化屬于VB比較常見的圖像處理手段,目前主要有平均值法、加權平均值法、最大值法等算法,在本系統(tǒng)中,經過GetDIBits方法提取出的像素點已經被存儲在bits()三維數(shù)組中,只需要對bits()三維數(shù)組進行直接操作,就可以得到二值化后的圖片,部分代碼如下:
If bits(0,ix,iy)<90Then
bitsBW(0,ix,iy)=0
bitsBW(1,ix,iy)=0
bitsBW(2,ix,iy)=0
Else
bitsBW(0,ix,iy)=255
bitsBW(1,ix,iy)=255
bitsBW(2,ix,iy)=255
這里設定的閾值為90,可以根據具體測量條件設定為0-255之間的任意值。
本文介紹了基于VB的實時圖像處理系統(tǒng)的主要處理流程和算法,并給出了部分代碼,該系統(tǒng)已經成功在鐵路軌道檢測儀上得到應用,作為該儀器的前期數(shù)據處理核心,將采集到的光斑圖像處理為灰度圖像,便于后期數(shù)據計算。針對1024*768分辨率的圖片,處理速度可以到達每秒2-3張,基本滿足了鐵路軌道檢測儀的檢測需要,結合其他傳感器提供的參數(shù),可以得出全面的檢測數(shù)據,為工務段日常維護線路提供了堅實的保障。
[1] 倪明田,吳良芝,計算機圖形學[M].北京:北京大學出版社,1999.
[2] 劉獨玉,羅彬,基于 VB的圖像處理方法[J].四川輕化工學院學報.2000,13(4):21-29.
[3] 田巖.數(shù)字圖像處理與分析[M].武漢 華中科技大學出版社,2009.