蘭林濤,桂 彥,鄭鎮(zhèn)潮,柳鄧一漫,羅 京,王 朦
(長(zhǎng)沙理工大學(xué)計(jì)算機(jī)與通信工程學(xué)院,湖南 長(zhǎng)沙 410114)
基于Qt開(kāi)源框架的跨平臺(tái)圖像修復(fù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
蘭林濤,桂彥,鄭鎮(zhèn)潮,柳鄧一漫,羅京,王朦
(長(zhǎng)沙理工大學(xué)計(jì)算機(jī)與通信工程學(xué)院,湖南 長(zhǎng)沙410114)
目前,圖像修復(fù)技術(shù)已經(jīng)在數(shù)字圖像處理領(lǐng)域中具有了實(shí)際的應(yīng)用價(jià)值,尤其在部分受損圖像還原、去除圖像中遮擋物等方面可以取得良好的效果。本文著力于結(jié)合現(xiàn)有圖像修復(fù)技術(shù)的功能需求,實(shí)現(xiàn)能夠運(yùn)行于主流操作系統(tǒng)平臺(tái)的、且具有良好用戶體驗(yàn)的跨平臺(tái)圖像修復(fù)系統(tǒng)。在設(shè)計(jì)圖像修復(fù)系統(tǒng)的過(guò)程中,考慮到多平臺(tái)編譯使用的需求,我們采用了Qt開(kāi)源框架用于用戶交互界面的處理,實(shí)現(xiàn)了Windows、Linux和MacOS三大主流操作系統(tǒng)的覆蓋。本文的研究?jī)?nèi)容主要包括以下兩個(gè)方面:(1)圖像修復(fù)算法實(shí)現(xiàn)。(2)用戶交互界面的設(shè)計(jì)與實(shí)現(xiàn)。通過(guò)良好的用戶交互設(shè)計(jì)實(shí)現(xiàn)了圖像修復(fù)系統(tǒng)。
Qt框架;跨平臺(tái);圖像修復(fù)系統(tǒng)
本文著錄格式:蘭林濤,桂彥,鄭鎮(zhèn)潮,等. 基于Qt開(kāi)源框架的跨平臺(tái)圖像修復(fù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件,2016,37(8):47-50
圖像修補(bǔ)(Image Inpainting)是計(jì)算機(jī)圖形學(xué)與計(jì)算機(jī)視覺(jué)領(lǐng)域內(nèi)一項(xiàng)具有挑戰(zhàn)性的難題[1],其主要目的是利用已有的圖像信息,將圖像中缺失區(qū)域部分的信息進(jìn)行還原。在實(shí)際應(yīng)用方面,圖像修復(fù)系統(tǒng)可應(yīng)用于受損圖像的復(fù)原、去除圖像水印日期等。本文采用了一種交互式的快速圖像修補(bǔ)方法[1],通過(guò)先由用戶交互確定圖像的結(jié)構(gòu)信息[2]進(jìn)行結(jié)構(gòu)化修補(bǔ),而后再采用紋理合成方法[3-4]進(jìn)行紋理區(qū)域填充,以達(dá)成實(shí)現(xiàn)圖像修復(fù)的目的。
Qt是一個(gè)跨平臺(tái)的C++應(yīng)用程序開(kāi)發(fā)框架,擁有GNU LGPL v. 2.1、GNU GPL v. 3.0以及商業(yè)授權(quán)三種授權(quán)方式,其跨平臺(tái)的特性使得它支持包括Windows、Linux、Mac OS在內(nèi)的多種操作系統(tǒng)。目前,包括LG、Panasonic、Navico在內(nèi)的多家企業(yè)均采用了Qt平臺(tái)作為開(kāi)發(fā)框架,體現(xiàn)了Qt作為開(kāi)發(fā)框架具有的廣泛應(yīng)用價(jià)值。
為了使系統(tǒng)能夠?qū)崿F(xiàn)跨平臺(tái)目標(biāo)以及具有高效率的圖像修復(fù)能力,我們采用了C++作為主要編程語(yǔ)言,Qt平臺(tái)作為用戶界面框架,實(shí)現(xiàn)了高效、可應(yīng)用于多平臺(tái)的圖像修復(fù)系統(tǒng)。
2.1整體架構(gòu)
基于Qt開(kāi)源框架的跨平臺(tái)圖像修復(fù)系統(tǒng)總體上分為兩個(gè)子系統(tǒng),分別為以圖像修復(fù)算法為主體的圖像修復(fù)系統(tǒng)和以用戶操作為主體的交互系統(tǒng),這兩部分系統(tǒng)如圖1所示。
圖1 系統(tǒng)整體架構(gòu)圖Fig. 1 Overall system architecture
2.2系統(tǒng)運(yùn)行環(huán)境及框架版本要求
基于Qt開(kāi)源框架的跨平臺(tái)圖像修復(fù)系統(tǒng)主要通過(guò)結(jié)構(gòu)修補(bǔ)與紋理修補(bǔ)算法實(shí)現(xiàn)預(yù)期目標(biāo)。在修復(fù)過(guò)程中,主要性能開(kāi)銷在于頻繁對(duì)像素進(jìn)行讀寫與使用CPU資源進(jìn)行紋理修復(fù)計(jì)算所耗費(fèi)的時(shí)間。系統(tǒng)實(shí)現(xiàn)所采用的QImage本身提供了高效的像素讀取與設(shè)定接口,但由于其運(yùn)行時(shí)存儲(chǔ)圖像數(shù)據(jù)會(huì)占用較大的內(nèi)存空間,過(guò)小的運(yùn)行內(nèi)存會(huì)導(dǎo)致程序發(fā)生虛擬內(nèi)存交換從而降低其I/O性能,因此推薦使用擁有更高運(yùn)行頻率的CPU與更大內(nèi)存空間的計(jì)算平臺(tái)運(yùn)行本系統(tǒng)。
本系統(tǒng)設(shè)計(jì)的另一個(gè)目標(biāo)為跨平臺(tái),即還可編譯運(yùn)行在Linux、Mac OS平臺(tái)上,系統(tǒng)配置要求與Windows平臺(tái)要求相同。為了實(shí)現(xiàn)良好的運(yùn)行效果,在系統(tǒng)編寫階段便要求所有功能函數(shù)均實(shí)用Qt框架提供的庫(kù)函數(shù),不直接調(diào)用系統(tǒng)提供的API,以保證兼容性。由于Qt框架本身具有跨平臺(tái)特性,因而在框架所支持的操作系統(tǒng)范圍內(nèi),只要代碼調(diào)用的功能不涉及某一系統(tǒng)專有的特性與功能函數(shù)即可實(shí)現(xiàn)跨平臺(tái)的目標(biāo)。本系統(tǒng)采用的Qt版本為5.5.1。
3.1系統(tǒng)總體流程圖
系統(tǒng)采用單界面操作方式,通過(guò)點(diǎn)按功能按鈕與鼠標(biāo)交互實(shí)現(xiàn)對(duì)應(yīng)功能。系統(tǒng)總的工作流程如圖2所示。
3.2圖像修復(fù)算法流程圖
圖像修復(fù)算法的過(guò)程依次分為用戶繪制修補(bǔ)區(qū)域與結(jié)構(gòu)曲線、結(jié)構(gòu)修補(bǔ)和圖像紋理修補(bǔ)三個(gè)部分,圖像修復(fù)流程如圖3所示。在打開(kāi)待修復(fù)的圖像之后,用戶首先交互指定待修復(fù)區(qū)域;然后,用戶在待修復(fù)區(qū)域中繪制結(jié)構(gòu)信息,其中,結(jié)構(gòu)信息主要指的是圖像中直線型的結(jié)構(gòu)。我們將從已繪制結(jié)構(gòu)曲線的延長(zhǎng)線上選取候選圖像子塊進(jìn)行結(jié)構(gòu)修補(bǔ)。最后是在大面積紋理區(qū)域的修補(bǔ)。當(dāng)系統(tǒng)在掃描到任意一個(gè)待修補(bǔ)像素點(diǎn)時(shí),則采用紋理合成方法[3-4]進(jìn)行修復(fù),直至圖像修復(fù)完畢。
圖2 系統(tǒng)工作流程圖Fig. 2 Work flowchart for image inpainting system
圖3 圖像修復(fù)算法流程圖[1]Fig. 3 Flowchart of Image inpainting algorithm[1]
4.1顯示界面模塊
4.1.1圖像縮放模塊設(shè)計(jì)思路
圖像縮放模塊兼具圖像顯示功能,主要作用為將待修復(fù)圖像信息顯示在GUI界面上,通過(guò)對(duì)顯示圖像內(nèi)容進(jìn)行縮放可兼顧高分辨率圖像的精準(zhǔn)選區(qū)與繪制結(jié)構(gòu)功能,提高繪制的準(zhǔn)確性。程序默認(rèn)縮放大小為100%,可根據(jù)用戶需要在10%~300%間自由縮放。
Qt平臺(tái)顯示圖像的控件為QGraphicsView,運(yùn)行時(shí)可讀入QImage內(nèi)容進(jìn)行顯示。系統(tǒng)的圖像處理信息存儲(chǔ)在QImage內(nèi),每次顯示均使用獨(dú)立的QImage進(jìn)行縮放處理[5],保證圖像數(shù)據(jù)不受顯示縮放干擾。
4.1.2指針響應(yīng)模塊設(shè)計(jì)思路
考慮到傳統(tǒng)的鼠標(biāo)樣式(箭頭)不適用于圖像區(qū)域選取的定位,通過(guò)QCursor的setCursor函數(shù)動(dòng)態(tài)改變鼠標(biāo)樣式,以實(shí)現(xiàn)更好的指示效果。在QGraphicsView顯示范圍內(nèi),鼠標(biāo)指針樣式為十字形,保證精準(zhǔn)定位,在顯示外部則恢復(fù)為箭頭形。
4.1.3界面元素響應(yīng)模塊設(shè)計(jì)思路
Qt提供了QHBoxLayout、QVBoxLayout、QGridLayout等的基本布局管理,分別是水平排列布局、垂直排列布局和網(wǎng)格排列布局[6]。布局之間可以相互嵌套實(shí)現(xiàn)自適應(yīng)窗口大小的效果,在本系中主要采用了QHBoxLayout與QVBoxLayout相互嵌套的形式實(shí)現(xiàn)自適應(yīng)窗口大小功能,其中界面布局設(shè)計(jì)如圖4(a)所示,以及程序界面布局效果如圖4(b)所示。
4.2輔助功能模塊
4.2.1坐標(biāo)系轉(zhuǎn)換模塊設(shè)計(jì)思路
在使用圖像縮放功能、載入高分辨率圖片時(shí),QGraphicsView會(huì)自動(dòng)調(diào)用滾動(dòng)塊進(jìn)行圖片顯示,此時(shí)用戶操作獲取的鼠標(biāo)坐標(biāo)仍然為以QGraphicsView模塊左上角為原點(diǎn)的坐標(biāo),需要進(jìn)行坐標(biāo)系轉(zhuǎn)換為基于圖像的坐標(biāo)系以保證未知區(qū)域選取與圖像結(jié)構(gòu)曲線繪制的準(zhǔn)確[7]。
圖4 用戶交互界面實(shí)現(xiàn)Fig. 4 User interface implementation
4.2.2文件存儲(chǔ)模塊設(shè)計(jì)思路
Qt原生提供了多個(gè)可操作圖像的類,其中QImage可在具有文件讀取、存儲(chǔ)功能的同時(shí)提供了可對(duì)單個(gè)像素進(jìn)行編輯的接口,為簡(jiǎn)化程序提供了可能。QImage支持的文件包括BMP、JPG、JPEG、PNG等常用圖像格式的讀取與保存。
在QImage中,開(kāi)發(fā)者可通過(guò)setPixel函數(shù)對(duì)圖像中單個(gè)像素點(diǎn)的RGB值進(jìn)行設(shè)定,該函數(shù)可接收三個(gè)參數(shù),分別為需要操作像素的坐標(biāo)和需要設(shè)置的顏色值。在32-bit下的像素操作如圖5所示。
4.2.3撤銷恢復(fù)模塊設(shè)計(jì)思路
系統(tǒng)采用QImage存儲(chǔ)運(yùn)行時(shí)的圖像信息,使用Stack來(lái)實(shí)現(xiàn)撤銷/恢復(fù)功能,在每個(gè)用戶操作前自動(dòng)將保存當(dāng)前圖像信息的指針至Stack中,在需要時(shí)返回。由于QImage在打開(kāi)圖像時(shí)對(duì)內(nèi)存占用較高,當(dāng)程序?qū)嵗龑?duì)圖像操作次數(shù)過(guò)多時(shí),會(huì)因保存撤銷信息而占用較大的內(nèi)存,這是接下來(lái)需要解決的一個(gè)問(wèn)題。
圖5 QImage在32-bit下的像素操作Fig. 5 QImage pixel operation under 32-bit
4.2.4加速鍵模塊設(shè)計(jì)思路
系統(tǒng)用戶操作方式采用了鼠標(biāo)交互與鍵盤輸入相結(jié)合的方式,用戶可通過(guò)鼠標(biāo)實(shí)現(xiàn)所有系統(tǒng)功能,也可以通過(guò)鍵盤的加速鍵加速操作。
Qt對(duì)每個(gè)界面元素均提供了keypressevent[7]函數(shù)用于響應(yīng)用戶的鍵盤操作。每當(dāng)用戶操作鍵盤時(shí),系統(tǒng)將發(fā)射一個(gè)信號(hào)通知程序,并傳入一個(gè)QKeyEvent作為具體按鍵的載體。QKeyEvent類中有函數(shù)key和modifier,key函數(shù)返回的是發(fā)生時(shí)間的按鍵值,modifier返回的是修飾鍵[8],通過(guò)重載keypressevent函數(shù)即可實(shí)現(xiàn)加速鍵功能。
我們開(kāi)發(fā)的基于QT開(kāi)源框架的跨平臺(tái)圖像修復(fù)系統(tǒng),首先在Windows環(huán)境下進(jìn)行了功能實(shí)現(xiàn)與交互設(shè)計(jì),實(shí)現(xiàn)了預(yù)期的圖像修復(fù)功能。圖6中測(cè)試用圖展示了系統(tǒng)在對(duì)圖像目標(biāo)移除(水印處理)的應(yīng)用場(chǎng)景,圖6(a)的“Think”字樣經(jīng)過(guò)處理后被抹去,修復(fù)后的效果如圖6(b)所示。圖6中的(c)、(d)為在對(duì)具有破損圖像修復(fù)后的結(jié)果。另外,還采用了Ubuntu系統(tǒng)作為L(zhǎng)inux平臺(tái)的測(cè)試環(huán)境。
圖6 圖像修復(fù)效果圖Fig. 6 Image inpainting results
利用上述的圖像修復(fù)算法與用戶交互設(shè)計(jì)完成的圖像修復(fù)系統(tǒng),可運(yùn)行于Windows、Linux、MacOS等多個(gè)平臺(tái),通過(guò)用戶選定修補(bǔ)區(qū)域與繪制結(jié)構(gòu)信息完成修補(bǔ)工作。經(jīng)過(guò)多次代碼調(diào)試與界面美化,上述功能都能夠?qū)崿F(xiàn)并達(dá)到了預(yù)期設(shè)計(jì)目標(biāo)。當(dāng)然,本圖像修復(fù)系統(tǒng)還是需要繼續(xù)優(yōu)化的,通過(guò)優(yōu)化修復(fù)算法、簡(jiǎn)化用戶操作流程、改變運(yùn)行時(shí)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)更高的修復(fù)效率與更低的計(jì)算機(jī)性能要求,我們將在以后的研究中繼續(xù)優(yōu)化改進(jìn)。
[1] 路平. 快速結(jié)構(gòu)化圖像修補(bǔ)[J]. 中國(guó)圖象圖形學(xué)報(bào), 2010, (6): 931-935. Lu P.Fast Structural Image Completion[J]. Journal of Image and Graphics, 2010, (6):931-935. (in Chinese)
[2] Sun J, Shum H Y. Image completion with structure propagation: ACM, US7502521[P]. 2009.
[3] Michael Ashikhmin. Synthesizing Natural Textures. 2001 ACM Symposium on Interactive 3D Graphics, 217–226, March 2001.
[4] 胡云康, 姜 蘇, 吳志榮, 等. 基于改進(jìn)的紋理合成圖像修復(fù)算法[J]. 軟件, 2016, 37(4): 60-63. Hun Y K, Jiang S, Wu Z L, An Improved Image Restoration Algorithm Based on Texture Synthesis[J]. Software, 2016, 37(4): 60-63.
[5] 薩默菲爾德. Qt高級(jí)編程[M]. 電子工業(yè)出版社, 2011. SummerfieldM. Qt advanced programming[M]. Beijing: Electronic Industry Press, 2011. (in Chinese)
[6] 徐睿, 韋璐. 基于QT 的數(shù)字邏輯虛擬實(shí)驗(yàn)平臺(tái)設(shè)計(jì)[J].軟件, 2016, 37(01): 101-104. Xu R, Wei L. Design of Digital Logic Virtual Experiment Platform Based on QT[J]. Software, 2016,37(01):101-104.
[7] 何建倉(cāng), 侯澤民. 嵌入式Qt環(huán)境下繪圖軟件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2014, 35(5): 45-47. He J C, Hou Z M. The design and implementation of drawing software under the embedded Qt environment[J]. Software, 2016, 35(5): 45-47.
[8] 曹素娥, 楊澤民. 基于Qt的ATM機(jī)系統(tǒng)的分析與設(shè)計(jì)[J].軟件, 2014, 35(1): 1-3, 31. Cao S E, Yang Z M. Analysis and Design of ATM System Based on Qt[J]. Software, 2014, 35(1): 1-3, 31.
Design and Implementation of Image Inpainting System Based on Qt Open Source Framework
LAN Lin-tao, GUI Yan, ZHENG Zhen-chao, LIU Deng-yi-mang, LUO Jing, WANG Meng
(School of Computer and Communication Engineering, Changsha University of Science and Technology, Changsha 410114, China)
At present, image inpainting technology has practical application in the field of digital image processing, especially region filling and object removal in the image. In this paper, we focus on the functional requirements of the existing image inpainting technology, which devote to develop an image inpainting system with a good user experience. During image inpainting system design, taking into account the multi-platform compiler use demanded, we use Qt for the user interface, which is compatible with Windows, Linux and Mac OS. The research content of this paper mainly includes the following two aspects: (1) the realization of image inpainting algorithm. (2) the design and implementation of user interface. The image inpainting system is realized through the good user interaction design.
Qt open source framework; Cross-platform; Image inpainting system
TP311
A
10.3969/j.issn.1003-6970.2016.08.010
2016年長(zhǎng)沙理工大學(xué)教學(xué)改革研究項(xiàng)目(項(xiàng)目編號(hào):JG1660);2016年長(zhǎng)沙理工大學(xué)大學(xué)生研究性學(xué)習(xí)和創(chuàng)新性實(shí)驗(yàn)計(jì)劃項(xiàng)目(長(zhǎng)理工大教[2016]7號(hào)-133)。
蘭林濤(1996-),男,本科生,主要研究方向:模式識(shí)別與圖像處理。
通訊聯(lián)系人: 桂彥,講師,碩士生導(dǎo)師,博士,主要研究方向:圖像處理、模式識(shí)別。