徐興豐,李慶華,2,杜 軍
(1.山東師范大學 物理與電子科學學院,山東 濟南 250014;2.齊魯工業大學 電氣工程與自動化學院,山東 濟南 250353)
基于OpenCV的拍照圖像傳真信息采集處理方法研究*
徐興豐1,李慶華1,2,杜 軍1
(1.山東師范大學 物理與電子科學學院,山東 濟南 250014;2.齊魯工業大學 電氣工程與自動化學院,山東 濟南 250353)
傳統的傳真掃描在封閉的環境下成像條件苛刻——單一的紙質版內容,信息采集不方便,信息表達的形式不夠豐富。在OpenCV平臺上,利用攝像頭直接采集信息,無需進行拆卷處理,也不再局限于紙質載體。對采集到的圖片信息進行灰度化、銳化和閾值分割等操作,然后編碼生成傳真文件進行傳真,方便傳真的信息采集。這種做法解決了攝像頭采集信息后數據量過大、不利于傳輸和傳真格式轉換等問題。
OpenCV;傳真文件;圖像處理;信息采集
如今,通信技術快速發展,一些人口密集的區域都已經有Internet接入,圖像、聲音、視頻等傳輸十分方便,即便是網絡傳真機也可以傳輸文字、圖片的多種格式的文件,傳統的傳真通信受到了很大的沖擊。但是,在某些特殊場合,比如保密性要求較高的軍隊且在只有PSTN網絡的情況下,傳真仍是較為理想的數據通信方式。而對于需要真跡傳遞的政府和企業,傳真通信在其中也扮演者著不可替代的角色[1]。在信息時代的大背景下,傳真通信也需要不斷改進,適應不斷提高的通信需求。在沒有Internet分布的區域,可以連入PSTN的情況下,可以通過傳真機進行數據通信。但是,老式的傳真機體積比較大,信息采集也不方便。目前,要將頁式傳真圖像用傳真機傳輸,圖像信息要經過掃描系統,在控制軟件的控制下進行傳輸。掃描系統由光/電轉換器件、精密齒輪、步進電機、控制邏輯電路和光源系統等組成。該系統的作用就是通過光電耦合器件將光信號轉換為電信號,常用的光電耦合器件有CCD和CIS兩種類型[2]。
掃描成像必須掃描的是紙質內容,任何信息都必須轉化為可以在紙質平面上表達的信息才能被傳真機傳輸給對方。為了優化信息采集,利用攝像頭直接拍攝,采集到的信息可以是二維紙質版內容,也可以是三維事物的本身,比如辦公室的人員座次分布、河流走向等。
攝像頭直接成像方便信息采集,但生成的文件是jpg文件或bmp文件,包含顏色信息,數據量相對于黑白圖像較大,并不適合直接通過PSTN傳真。基于PSTN的傳真多是黑白的TIFF文件(標簽圖像文件格式),有對應的傳真協議規范,不能發送除了通用傳真文件TIFF文件外的其他文件格式[3-4]。由于攝像頭采集的圖像數據量太大,不能傳輸等問題,需要對采集到的信息進行處理轉換,生成適合傳輸的文件。常見的圖像處理庫有ImageStone、GIMP、CxImage和OpenCV等。其中,OpenCV是一個開源的機器視覺庫,它包括圖像處理和視覺算法,MLL統計分類器,HighGui、Gui圖像和視頻輸入輸出,CxCore基本結構和算法,Xml支持繪圖函數。基于OpenCV的程序開發具有跨平臺、可移植性好、獨立性好、源代碼公開、具備強大的圖像和矩陣運算能力、運行速度快等優點[5],所以,可以使用OpenCV類庫,控制攝像頭采集需要的信息,并對采集到的信息進行處理。本文主要研究了在OpenCV平臺之上利用OpenCV的相關函數,配合必要的硬件資源,采集并保存圖像信息。對采集到的圖像信息做進一步的處理壓縮,使之更適合傳真傳輸,且保證信息的相對完整性。在實際工作中,壓縮文件,轉換編碼格式,可以生成可傳真的文件。具體實現流程如圖1所示。

圖1 可傳真文件生成流程
在PSTN網絡上傳真,在沒有傳真機的情況下,可以將傳真Modem與PSTN網絡連接,Modem的控制端連接計算機,計算機就可以控制Modem,實現傳真功能。具體傳真模式如圖2所示。本實驗采用臺式機,Windows7 32位系統,裝有Visual Studio 2010.Modem是D-TECHS的I-56em。計算機與Modem通過串行通訊接口相連,對其進行控制。在軟件方面,需要配置OpenCV。OpenCV開發庫的配置主要是設置預先編譯的頭文件路徑和動態鏈接庫的路徑,將OpenCV的庫文件和頭文件添加到項目的包含目錄中即可[6]。
本實驗使用的攝像頭免驅動安裝,可以自動被操作系統識別。OpenCV庫有攝像頭的類,VideoCapture,利用VideoCapture::open()函數打開攝像頭;用Picture Control控件來顯示圖像,Picture Control可以動態地加載圖像,可以設置大小、顏色等屬性。同時,采用動態加載圖像的方式,可以實時預覽攝像頭拍攝的信息。
定義一個矩陣mat類存儲攝像頭采集到的數據,mat類同時也有將矩陣數據轉換成圖像數據Iplimage的函數,然后可以將Iplimage保存。將保存到內存中的數據通過定時器OnTimer不斷地保存,加載到Picture Control控件中顯示,就可以實現預覽的功能。在實際工作中,需要采集哪幅圖像,只需將圖像通過函數 imwrite(“文件名”,攝像頭數據)保存。如此,圖像的預覽、適時采集和保存工作就可以完成。

圖2 傳真模式圖
攝像頭采集信息生成圖片時可能會產生噪聲,也可能會產生多余的信息,占用過多的存儲空間,不宜傳輸。圖像信息處理的目的就是突出信息的主要內容,減少對存儲空間的占用,保留必要的信息。圖像處理流程如圖3所示。

圖3 圖像信息處理流程
由于攝像頭采集到的原始圖像為彩色圖像數據,圖像中包含大量的彩色信息,在處理中會花費較多的存儲開銷,必將降低系統的處理速度,而且彩色圖像也不能傳真,所以要先對圖像進行灰度化處理[7]。
灰度化常用的處理方法有最大值、平均值和加權平均值方法,OpenCV有自己的灰度化函數,自帶方法和加權平均法的處理效果相當。OpenCV的灰度化處理函數,即cvCvtColor(img,img1,CV_BGR2GRAY),可以將彩色圖像img轉化為灰度圖像img1。
文本旋轉是由于攝像頭在采集圖像時未能按照文本的行列水平采集所導致的現象。在實際應用中,為了方便識別,需要對文本進行幾何矯正。文本圖像有一個明顯的特征,即每行文字之間都有一段空白間隔。文本與空白間隔在頻域之間的頻譜有明顯的差別。當文本旋轉時,頻譜也跟著旋轉,因此,可利用這種時頻特性計算文本圖像的DFT變換。DFT變換后,其低頻部分在邊界的四角,高頻在圖像的中心位置,將高頻和低頻互換實現中心移動,就可以看到文本圖像頻譜有明顯的傾斜直線,然后通過霍夫變換計算出斜線的傾斜角度,利用仿射變換就可以完成文本圖像的矯正[8]。
用攝像頭拍照,由于信息采集者操作不合理和硬件設備的限制,可能伴有較強的隨機干擾和系統噪聲,背景比較復雜。通常情況下,需要使用圖像銳化技術等圖像增強技術抑制圖像的背景噪聲、增強圖像紋理和邊界細節,提升圖像的某些重要信息特征[9]。圖像銳化等圖像增強技術能夠將被處理的圖像轉化為對傳真來說質量和效果更好的圖像。
OpenCV常用的2種用來銳化的算子有sobel和laplacian的二階離散過程,本實驗用sobel算子,函數原型為Void Sobel(InputArray src,OutputArray dst,int depth,int dx,int dy,int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEAFAULT),該函數使用sobel算子計算src中的一幅圖像的二階導數。參數ddepth表示輸出圖像的深度,Ksize表示核的大小,希望的導數階為dx和dy。使用scale可以建立用于計算導數的尺度因子。另外,參數vordeType表示邊界類型。
閾值分割是對圖像信息的進一步壓縮,保留必要的信息,這樣可以使后期生成的文件更小,更能滿足傳輸要求。閾值化操作就是利用像素點分布規律,設定閾值進行像素點的分割,進而得到二值化圖像。常用經典方法有OSTU、固定閾值、自適應閾值、雙閾值半閾值操作,本實驗采用自適應閾值分割的方法進行閾值分割[10]。
在實際應用中,固定閾值很難達到理想的分割效果,目標和背景區域通常是相互依存在圖像塊中,而自適應閾值分割通過像素鄰域塊的分布特征來自適應確定區域的二值化閾值。函數原型如下:VoidAdaptiveThreshold(InputArray src,OutputArray dst,double maxValue,int adaptiveMethod,int thresholdType,int blockSize,double c).在此函數中,參數src表示源圖像數組;dst表示輸出圖像數組;maxvalue表示預設滿足條件的最大值;cvAdaptiveMethod表示自適應閾值算法選擇ADAPTIVE_THRESH_MEAN_CADAPTIVE_THRESH_GAUSSIAN_C;thresholdType表示閾值類型THRESH_BINAY或THRESH_BINARY_INV;blocksize表示鄰域塊大小,用來計算區域閾值,一般選擇為3,5,7……參數c表示從均值或加權均值提取的常數。
攝像頭采集的信息傳真之后,對方可以用網絡傳真機接收,也可以用傳統傳真機接收。如果對方使用的是網絡傳真機,接收到的傳真文件可以在計算機上用圖片瀏覽器打開,也可以進行縮小放大等尺度變換,可以選擇一個方便識別的方式查看。如果對方使用的是傳統傳真機,接收到的傳真文件需要打印之后才可查看。此時,需要在發送傳真之前調整傳真文件的尺寸,使文件打印之后適應A4紙的大小。
利用本文所述程序處理后的圖片,水平和垂直分辨率皆是96(每英寸96個點)。A4紙的大小是8.3×11.7(英寸)。所以A4紙可以放下的像素點約為797×1 124,本實驗設置的圖像像素點為760×1100,實現函數如下:
IplImage*x,*y;
y=cvCreateImage(cvSize(760,1100),8,1);
x=cvLoadImage("源文件",0);
cvResize(x,y,CV_INTER_LINEAR);
Y圖像可以在A4紙上正常打印。
圖片保存成灰度圖像后,需要轉化成傳真的編碼格式,生成可以供傳真發送的文件。傳真文件的編碼格式根據傳真機傳送圖像和記錄方式的不同,有黑白和彩色之分。該實驗采用二值傳真編碼。編碼傳真格式利用的是libtiff的dither函數,該函數利用抖動算法將灰度圖像轉化為二值圖像,同時,可以改變圖像的壓縮編碼格式。在本實驗中,直接調用libtiff下的可執行程序,在dos下運行指令為“tiffdither-c g3‘源文件’‘目標文件’”。生成的目標文件采用CCITT T.4協議壓縮,可以用傳真方式發送。
圖4和圖5為2組實驗的圖像對比和占用存儲空間的概述,第一幅為拍攝的原圖,存儲空間較大,第二幅是經處理程序處理后的圖片,第三幅是經過編碼生成的傳真TIFF文件,第四幅是傳真掃描后生成的文件。從2組實驗所得的結果來分析,攝像頭拍攝后,最終生成的文件和掃描生成的文件效果相差不大,有些細節會更清晰,存儲空間會有20%~30%的增加,但與未處理的圖片比較,文件占用的存儲減少50~70倍,旋轉的文本得到糾正,處理效果明顯,符合傳真的條件。
本文所提出的用OpenCV控制攝像頭采集傳真圖像是一種新的嘗試,它豐富了傳真內容的表達形式,方便了傳真信息的采集。基于OpenCV的程序開發,是在前輩研究的基礎上完成工作,讓編程更加簡單,減少了不必要的工作量,方便可靠、處理效果明顯。
傳真文件的編碼調用了libtiff中的dither程序,讓文件以傳真的編碼格式存儲。在圖像信息的處理方面,圖像信息的處理還可以進一步優化,實現更好的處理效果,這是需要后期繼續研究的。

圖4 實驗一結果

圖5 實驗二結果
[1]劉文柱.數字傳真通信[M].成都:電子科技大學出版社,2000:1-17.
[2]劉立柱.傳真圖像和傳真信號處理原理與技術[M].北京:國防工業出版社,2006:11-22.
[3]趙付強,李允俊.無紙傳真協議的研究與實現[J].科技信息,2012(27):57-58.
[4]陸宗琪.C/C++圖像處理編程[M].北京:清華大學出版社,2005:104-109.
[5]秦小文,溫志芳,喬維維.基于OpenCV的圖像處理[J].電子測試,2011(7):39-41.
[6]蘇慧娟,于正林,張桂林.基于OpenCV的圖像處理[J].科技資訊,2014(8):18-19.
[7]江進.基于灰度化及邊緣檢測算法的車牌識別技術研究[J].電腦與微電子技術,2014(1):38-41.
[8]吳軍,侯德文,劉江.一種快速的文檔圖像傾斜角檢測算法[J].電子技術與軟件工程,2015(2):106-108.
[9]劉軍,龔云祥,金蕾.基于FPGA實現傳真圖像處理算法的方法[J].微電子學與計算機,2013,30(4):79-82.
[10]朱偉,趙春光,歐慶樂,等.OpenCV圖像編程實例[M].北京:電子工業出版社,2016:76-84.
本文部分參考文獻因著錄項目不全被刪除。
TP391.41
A
10.15913/j.cnki.kjycx.2018.01.001
2095-6835(2018)01-0001-04
山東省中青年科學家基金(BS2013DX031)
徐興豐(1993—),男,山東濟寧人,碩士在讀,主要研究電路系統和傳真圖像處理。李慶華(1977—),男,博士,副教授,主要從事機器視覺和信號與信息處理方面的研究。杜軍(1973—),女,通信作者,碩士,副教授,主要研究無線傳感器網絡及信號處理。
〔編輯:白潔〕