?

基于背景融合的機載字符生成

2015-12-08 03:28沈夢杰周建江韋小杰
電子技術應用 2015年4期
關鍵詞:字符調用像素點

沈夢杰,周建江,韋小杰,葉 明

(南京航空航天大學 電子信息工程學院,江蘇 南京210016)

基于背景融合的機載字符生成

沈夢杰,周建江,韋小杰,葉 明

(南京航空航天大學 電子信息工程學院,江蘇 南京210016)

分析了在VxWorks操作系統下,如何利用FreeType字體引擎提取高質量字符并不失真地進行字形變換。另外,為了讓飛行員能在復雜的視頻背景中識別出字符,提出了一種字符描邊方法和一種視頻背景融合算法。實驗證明,新的解決方案既保證了顯示效果,又符合實時系統對傳輸速度的要求。

背景融合;描邊;FreeType;VxWorks

0 引言

目前機載字符顯示主要分為點陣字符顯示與矢量字符顯示。兩種顯示方式各有優缺點,點陣字符大小固定,輸出簡單;矢量字符大小可調,輸出靈活,但依賴于反走樣直線與反走樣圓弧的實現效果,實現較為復雜。另外,通常字符的旋轉、縮放等變換是對字符像素點進行復數乘法運算,計算坐標時存在小數的四舍五入,因此會出現明顯的走樣現象。

本文綜合考慮點陣字符與矢量字符的優缺點,首先在VxWorks[1]操作系統下利用 FreeType字體引擎實時提取矢量字形并利用其自帶的API函數完成旋轉、描邊等字形變換,接著再渲染成高質量、抗鋸齒的256級灰度值位圖,然后通過PCI-E總線將灰度值點陣傳輸至底層FPGA,最后由FPGA根據優化后的融合算法完成字符與外部視頻的疊加并顯示。

上述字符生成流程既能靈活實時提取各種尺寸的字符,又可以簡單地輸出,不失真地旋轉,同時還具有優良的描邊效果。通過反復驗證提出一種背景融合算法,成功解決了字符與視頻背景疊加時出現的邊緣灰度值突變問題,實現了字符與視頻背景的高質量疊加。

1 機載平顯系統組成

本文所研究的內容為“新一代機載綜合平視顯示系統”的重要組成部分,旨在研制擁有自主知識產權、靈活可重構的機載視頻處理與圖形字符生成系統,形成包括底層硬件平臺、系統軟件平臺、圖形字符繪制接口以及底層圖形繪制IP核的核心解決方案。

圖1為機載平視顯示系統的組成框圖,它由三大部分組成,其中核心部分機載字符顯示系統由4個模塊組成,圖中各組成部分與模塊的功能如下:

(1)字符繪制接口:運行在 VxWorks操作系統上[2],根據上層應用程序中有關繪制字符指令中的參數,實時提取出相應字符信息,以特定的指令格式交由 PCI-E設備,實現頂層應用程序與底層硬件的無障礙通信。

(2)FIFO(First In First Out,先入先出隊列):用于暫

存PCI-E設備發送的繪制指令,供底層IP核讀取。

(3)繪制IP核取指令:作為底層硬件平臺的核心,IP核從FIFO中讀取字符繪制的指令,包括字符繪制參數及字符灰度值信息。

(4)視頻背景融合:IP核同時讀取視頻背景的RGB值與加黑邊字符的灰度值,按特定算法進行融合處理。

圖1 機載平視顯示系統組成

2 字符生成及字形變換

2.1 TrueType字庫及FreeType字體引擎

TrueType[3]是蘋果公司和微軟公司合作開發的一種新型數字化矢量字體格式,采用幾何學中的二次B樣條曲線及直線來描述字體外形輪廓。本系統暫定需要95個字符,包括26個英文字符的大小寫、10個阿拉伯數字和33個標點符號。所以選用Arial.ttf存儲在非易失存儲器中,上電再調入內存,供字體引擎提取。

FreeType是使用ANSI C開發的開源字體引擎,利用它可以不用關心 TrueType字庫文件格式,僅需調用FreeType的應用程序接口(Application Programming Interface,API)函數完成大部分的工作,而且FreeType可以在包括VxWorks的多種操作系統平臺下編譯運行。

針對嵌入式系統存儲容量相對較小以及機載平臺對代碼運行速度的要求,需要對 FreeType這個高度可定制的字體引擎進行定制和裁剪[4]。通過對字體引擎的定制和裁剪,有效減小了庫文件的體積,加快了代碼的運行速度。

2.2 嵌入式矢量字符顯示

圖2為嵌入式矢量字符顯示流程,圖中各個模塊的功能具體如下:

圖2 嵌入式矢量字符顯示流程

(1)初始化庫并裝載字體文件

調用FT_Init_FreeType初始化庫,先創建一個FreeType庫的新實例,并且設置句柄 library為它,然后裝載庫中的每一個模塊。調用 FT_New_Face裝載字體文件,創建一個新的face對象用來描述一個特定的字樣和風格,本系統裝載的是Arial.ttf。

(2)設置當前像素尺寸

調用FT_Set_Pixel_Size設置像素尺寸,設置的大小以像素為單位。按照本項目的相關技術協議,字符的尺寸為16×16~32×32范圍內的任意值。

(3)裝載字形圖像

調用FT_Cet_Char_Index得到字符索引,進行相應的字形變換后,再調用 FT_Load_Glyph將字符輪廓信息讀取到字形槽中。

(4)設置渲染模式獲取字符位圖

調用FT_Render_Glyph將字符槽中的字形圖像轉換成一個256級灰度的抗鋸齒位圖。

2.3 字形變換

調用FT_Set_Transform對其進行仿射變換,完成字形的旋轉、傾斜、縮放等操作。本系統要求完成字符的0°~ 360°順時針旋轉,且是否旋轉由上層控制。根據上層給出旋轉的角度,對2×2的仿射矩陣賦值。

上一代平顯系統中的旋轉由底層FPGA實現,但FPGA在計算字符像素點坐標時存在四舍五入,且旋轉可能導致的維數變化會造成像素空洞,直接影響顯示的效果。利用FreeType字體引擎完成旋轉屬于對字形圖像的變換,基于字符的描述信息而不是字模數據,通過這種方式進行旋轉后再提取位圖并顯示,效果得到明顯的改善。圖3為兩種不同旋轉方法得到的效果圖。

圖3 不同旋轉方式顯示效果比較

3 強背景識別技術

在顯示機載畫面時,由于字符疊加在視頻背景上,當字符與背景的顏色相近或視頻背景亮度較大時,往往會出現字符看不清楚的情況,給飛行員的駕駛帶來潛在的隱患。所以為了在強背景環境下有效識別出字符信息,需要對字符進行描邊處理。

3.1 傳統字符描邊方法

3.1.1 一位二進制字符加一位二進制描邊

在上一代平顯系統中,字符部分與描邊部分每個像素點都使用一位二進制數來表示。當代表像素點的數為1時,表示字符經過此位置,則將該位置的像素設置為字符顏色;當代表像素點的數為0時,表示字符不經過此位置,則將此位置的像素設置為背景顏色。因為每個像素點僅用一個二進制位表示,所以顯示在屏幕上時字符鋸齒化明顯,邊緣不夠圓潤,且旋轉后整體較為模糊。

上述二值點陣字符描邊方法較為簡單,直接在點陣

字符的邊緣加上黑色邊框即可,但是顯示效果極為粗糙,如圖4(a)所示。

圖4 不同加黑邊方法效果比較

3.1.2 灰度值(256級)字符加一位二進制描邊

256級灰度值字符由FreeType提取,并采用傳統描邊的方法:通過掃描字符點陣的每一個像素點,對每個灰度值不為零的像素點進行判斷,若判斷為邊界點則將該像素點周圍四個鄰域或八個鄰域內灰度值非零的像素點置為描邊點。

雖然這種描邊方法簡單易行,但是實際顯示效果并不理想。在初始大小下,可以看到原始字符部分由于使用 FreeType提取,效果較一位二進制字符有明顯改善,描邊部分雖清晰可見,但較為生硬。放大若干倍后,可以發現描邊毛刺棱角較多,走樣明顯,不適于飛行員長期觀察,如圖4(b)所示。

3.2 FreeType描邊

鑒于使用鄰域掃描描邊方法的顯示效果不佳,所以需要尋找另一種顯示效果好的描邊方法。研究發現調用FreeType自帶的 API函數對字符進行描邊處理效果較好,如圖4(c)所示,具體步驟如下:

(1)在進行完字形變化并將字形讀取到字符槽后,調用 FT_Get_Glyph把字形槽中的字形圖像復制到新的glyph1對象中,然后調用 FT_Stroker_New創建一個筆觸,并調用FT_Stroker_Set設置筆觸為描邊;

(2)對 glyph1的字形調用 FT_Glyph_StrokeBorder設置為描邊渲染,設置渲染參數,調用 FT_Outline_Render渲染這個描邊的字形圖像glyph1,如圖5(a);

(3)調用 FT_Glyph_Get_Cbox檢索 glyph字形圖像,獲取該描邊字形的寬度、高度等信息;

(4)再次調用FT_Get_Glyph把字形槽中的字形圖像復制到新的 glyph2對象中,重新設置渲染參數,調用 FT_ Outline_Render渲染這個字符本身的glyph2,如圖5(b);

(5)開辟一個緩存,存放glyph1與 glyph2疊加后的像素信息。

圖5 FreeType描邊示意圖

4 背景融合技術

與傳統加一位二進制描邊不同,使用FreeType為字符加上的描邊同樣具有256級灰度,所以描邊顯得光滑圓潤,但同時也帶來了新的問題。由于FreeType中生成的描邊信息的邊緣基于純白背景,灰度值會有向255漸變的趨勢,所以在黑色背景下邊緣灰度值與背景灰度值相差過大,嚴重影響顯示效果,因此需要對描邊與周圍視頻背景作相應的融合處理。

圖6為未進行背景融合的數字3在不同灰度值背景下顯示的效果。

圖6 不同灰度值背景下未進行背景融合的描邊效果

除在純白背景下,黑邊外都會有與背景不協調的白邊,特別在純黑背景下描邊效果最差。圖6(a)、(b)、(c)、(d)中背景灰度值分別為:0、127、255、隨機灰度值。

將描邊的灰度值與背景以一定比例進行融合,使得黑色描邊與背景線性相關,可以有效減少描邊外圍白色邊框的產生。目前項目僅要求顯示黑白灰度值字符,所以字符RGB 3個分量都等于其灰度值。但是考慮到背景的RGB分量并不一定相等,所以在融合時需要將底層IP核分開計算。

(1)如果為描邊:

(2)如果不是描邊:

其中 x、y為字符在屏幕上的繪制坐標,r、c為當前灰度值點在提取字符中的行號與列號,gray[][]為當前像素點的灰度值,bg_R[][]、bg_G[][]、bg_B[][]依次為背景的RGB 3個分量值。

圖7為進行了背景融合后的字符顯示效果,其中(a) ~(d)背景灰度值為127,(e)為隨機彩色背景。

圖7 背景融合后幾個字符顯示效果

5 繪制指令傳輸

5.1 上位機繪制接口

為方便上層用戶調用繪制字符指令,系統自定義字

符繪制接口函數如下:

void WriteChar(int CharSize,int CharCode,int Angle,int X,int Y);

其中X、Y為字符輪廓左上角的橫縱坐標;Angle為字符旋轉弧度值,范圍是 0~2π;CharCode為字符 ASCII碼,范圍是33~127;CharSize為字符大小。

5.2 寫入FIFO的指令格式

繪制字符指令格式如表1所示。

表1 繪制字符指令格式

(1)命令字:五位二進制數,用以確定繪制指令的類型。

(2)字符X坐標、Y坐標:同5.1中X、Y坐標。

(3)總行數、總列數:發送字符數組的行列數。由底層 FPGA根據總行數、總列數計算出總點數,用來判斷傳輸某個字符的最后一個32位數是否寫滿 (當總點數不是3的整數倍時)。

(4)灰度值 1、2、3:3個連續點的灰度值信息,灰度值為0~255,需要8位二進制數表示。

(5)描邊點標志1、2、3:用來判斷相應點是否為描邊點,如果為描邊點則進行背景融合。

5.3 實時性分析

在給定的標準測試畫面中,除字符外還有點、線、圓等基本圖元。經統計,標準測試畫面中3種大小字符平均所需命令數分別為88、196、347。3種大小字符的個數分別為7、89、32。

一幀需要傳輸的32位長整形數(包括字符和圖形指令)約為29 669個,其中字符29 164個,約占98%。

以每秒24幀計,計算后得到的指令吞吐量約為6.79 MB/s。若考慮字符旋轉后像素點增加20%,則吞吐量最大約為8.12 MB/s,遠小于PCI-E總線的單向數據傳輸速率2.5 Gb/s,所以字符的傳輸滿足系統的實時性要求。

6 結論

上述在VxWorks中字符的顯示方案已經成功應用于機載座艙信息顯示系統中,不僅滿足機載設備的實時性要求,而且字符生成靈活、顯示效果優良,具有相當廣闊的應用前景。

[1]VxWorks programmer′s guide 5.5 edition 1[Z].Wind River Systems Inc.,2000.

[2]孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境[M].北京:中國電力出版社,2002.

[3]孫楓,陳業夫,郭勇鵬.在VxWorks系統中使用TrueType字庫[J].應用科技,2003,30(11):53-55.

[4]陳文文,奚宏生.嵌入式系統中的TrueType字體驅動[J].計算機工程,2010,36(7):257-259.

Airborne character generation based on background fusion

Shen Mengjie,Zhou Jianjiang,Wei Xiaojie,Ye Ming
(College of Electronics and Information Engineering,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)

This paper analyzes how to use the FreeType font engine to extract high-quality characters as well as glyph transformation without any distortion based on the VxWorks operating system.Besides,in order to allow the pilot to identify characters in the complex video background,this paper proposes a method of character stroke and an algorithm of video background fusion. Experiments show that new solutions not only ensure the display effect,but also meet the real-time system requirements on the transmission speed.

background fusion;stroke;FreeType;VxWorks

TP391

A

0258-7998(2015)04-0025-04

10.16157/j.issn.0258-7998.2015.04.003

2014-12-13)

沈夢杰(1989-),男,碩士研究生,主要研究方向:機載電子信息系統。

周建江(1962-),男,博士,教授,博導,主要研究方向:雷達目標特性分析、機載電子信息系統、射頻隱身。

韋小杰(1992-),女,碩士研究生,主要研究方向:雷達目標特性分析。

猜你喜歡
字符調用像素點
基于局部相似性的特征匹配篩選算法
字符代表幾
核電項目物項調用管理的應用研究
一種USB接口字符液晶控制器設計
圖片輕松變身ASCⅡ藝術畫
HBM電子稱與西門子S7-200系列PLC自由口通訊
LabWindows/CVI下基于ActiveX技術的Excel調用
基于5×5鄰域像素點相關性的劃痕修復算法
基于canvas的前端數據加密
基于逐像素點深度卷積網絡分割模型的上皮和間質組織分割
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合