摘要:MATLAB是一種廣泛應(yīng)用于工程計(jì)算及數(shù)值分析領(lǐng)域的新型高級(jí)語言,有著強(qiáng)大的數(shù)值計(jì)算功能和繪圖功能,且具有豐富的圖像處理函數(shù)。目前Matlab已被廣泛的應(yīng)用于研究和解決各種工程問題。利用泊松圖像編輯方法,在Matlab環(huán)境下實(shí)現(xiàn)了圖像無縫拼合系統(tǒng)。該系統(tǒng)能夠?qū)崿F(xiàn)彩色圖像的無縫拼合,且可以改變待處理區(qū)域內(nèi)景物的色彩、光照等因素,使拼合后的圖像更加真實(shí)、自然。
關(guān)鍵詞:Matlab;圖像無縫拼合;泊松方程
中圖分類號(hào):TP18 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)11-0167-02
Research and Implementation of Seamless Image Mosaic System Based on MATLAB
YIN Zhen-he
(Jiangsu Lianhe Technical Institute Xuzhou Finance and Economics Branch, Xuzhou 221000, China)
Abstract: MATLAB is a widely used in engineering calculation and numerical analysis in the field of advanced language, has a powerful calculation function and drawing numerical, and has rich image processing functions. At present, Matlab has been widely applied to research and solve all kinds of problems in engineering. By using the Poisson image editing method, image seamless splicing system in Matlab environment. The system can realize the seamless combination of color image, and can change the region scenery color, light and other factors to make the image mosaic, the more real, natural.
Key words: Matlab; seamless image mosaic; Poisson's equation
1系統(tǒng)的總體結(jié)構(gòu)
本系統(tǒng)主要包含四個(gè)步驟:
步驟1,將待處理區(qū)域圖像選取并拷貝到所要求的目標(biāo)圖像上,直接拼合后得到的圖像存在明顯的拼接贗像;
步驟2,求指導(dǎo)矢量場V的散度值;
步驟3,建立泊松方程,并求泊松方程的解向量;
步驟4,進(jìn)行拉普拉斯插值。
1)在步驟1中會(huì)用到getrect( )函數(shù)和getpts( )函數(shù),均是Matlab中自帶的系統(tǒng)函數(shù),分別完成選取一個(gè)矩形區(qū)域和一個(gè)點(diǎn)的功能。
2)求指導(dǎo)矢量場散度的流程如圖1所示:
圖1 求指導(dǎo)矢量場散度值
在圖1中,pad_image( )函數(shù)是系統(tǒng)中的pad_image.m文件所完成的功能。在數(shù)字圖像處理中,微分由差分方程來取代。在取差分時(shí),為了不丟失圖像的邊緣信息,建立pad_image( )函數(shù),對(duì)提取出的源圖像矩形區(qū)域和提取出的目標(biāo)圖像區(qū)域加一黑色邊框,邊框的大小由padding_factor參數(shù)決定。
3)求泊松方程步驟如下:
Step1:由五點(diǎn)差分法建立拉普拉斯方程;
Step2:建立可進(jìn)行邏輯運(yùn)算的模板矩陣mask,令其邊界元素為1,其余元素為0;
Step3:mask矩陣與拉普拉斯方程矩陣進(jìn)行邏輯與運(yùn)算,得到拉普拉斯線性方程的系數(shù)矩陣A_dash_dash;
Step4:提取出的目標(biāo)圖像矩陣與mask進(jìn)行與運(yùn)算,得到拉普拉斯線性方程的解向量x_dash_dash,系數(shù)矩陣與解向量相乘得到拉普拉斯方程的常數(shù)向量b_dash_dash;
Step5:泊松方程的常數(shù)向量b_dash=divV-d_dash_dash;
Step6:拉普拉斯方程矩陣與~mask矩陣進(jìn)行邏輯與運(yùn)算,得到泊松方程的系數(shù)矩陣;
Step7:進(jìn)行矩陣除法運(yùn)算得到泊松方程的解向量x_dash;
4)拉普拉斯插值:
所謂拉普拉斯插值是指插值區(qū)域內(nèi)部滿足拉普拉斯方程。因此,僅需要將拉普拉斯方程的解向量賦值給插值區(qū)域內(nèi)部,泊松方程的解向量賦值給其邊界即可。
2選取景物
2.1讀入圖像
在本系統(tǒng)中,為對(duì)多幅源圖像和目標(biāo)圖像進(jìn)行操作,引入變量fore_num和back_num來分別表示每一幅源圖像和目標(biāo)圖像的序號(hào)。每次執(zhí)行系統(tǒng)時(shí)使用者需要通過輸入序號(hào)來選擇源圖像和目標(biāo)圖像,為實(shí)現(xiàn)交互式操作,系統(tǒng)使用了Matlab自帶的disp( )函數(shù)來顯示圖像的信息。
在Matlab環(huán)境中,通過imread( )函數(shù)來讀入圖像,源圖像信息存儲(chǔ)在fore_img矩陣中,目標(biāo)圖像信息存儲(chǔ)在back_img矩陣中。
2.2選擇源圖像的待處理區(qū)域
Matlab中的getrect( )函數(shù)可以實(shí)現(xiàn)用鼠標(biāo)選取矩形區(qū)域的功能,本系統(tǒng)采用此函數(shù)來選取景物所在的矩形區(qū)域。getrect( )函數(shù)的返回值是一個(gè)含有四個(gè)元素的矢量,且這四個(gè)元素分別是矩形區(qū)域左頂點(diǎn)像素所在源圖像矩陣中的行數(shù)、列數(shù)、矩形區(qū)域的寬、矩形區(qū)域的高。
為得到矩形區(qū)域內(nèi)圖像的信息,采用Matlab系統(tǒng)中的round( )函數(shù)來取得這四個(gè)參數(shù)的整數(shù)值。因此,為不丟失圖像像素信息,在用鼠標(biāo)選取區(qū)域時(shí),矩形區(qū)域的應(yīng)比目標(biāo)景物要大。將獲得的參數(shù)值分別賦給fore_st_x、fore_st_y、img_width和img_height。這樣便可以得到矩形區(qū)域在源圖像矩陣中所在的行數(shù)和列數(shù)。
2.3拷貝矩形區(qū)域到目標(biāo)圖像
在將源圖像矩形區(qū)域拷貝到目標(biāo)圖像之前,首先應(yīng)該選擇圖像的拼合區(qū)域。這一區(qū)域的大小與源圖像矩形區(qū)域大小相等。由2.2節(jié)可知已經(jīng)獲得矩形區(qū)域的寬和高,因此只要選定目標(biāo)圖像中的一點(diǎn)作為拼合區(qū)域的左頂點(diǎn)即可。
Matlab中的getpts( )函數(shù)可以確定一個(gè)像素點(diǎn),且其返回值是這一像素點(diǎn)在圖像矩陣中的行數(shù)和列數(shù)。由拼合區(qū)域左頂點(diǎn)的行數(shù)和列數(shù),以及矩形區(qū)域的寬和高,可以得到這一部分目標(biāo)圖像的像素信息。將這一部分的元素取出賦值給extracted_back_img矩陣。接著將源圖像矩形區(qū)域的像素賦值給這一區(qū)域即可得到直接拼合后的圖像。這種直接拼合的圖像存在明顯的拼接贗像。
3消除拼接贗像
3.1求指導(dǎo)矢量場V散度值
在本課題中,本文令引導(dǎo)矢量場為穩(wěn)定場,即取它為函數(shù)
為保證所得差分不會(huì)丟失邊界信息,在本文中引入padding_factor參數(shù),并令其值為10(可以為大于0的任意數(shù))。系統(tǒng)中pad_image.m文件主要功能就是對(duì)提取出的待處理矩形區(qū)域和相對(duì)應(yīng)的目標(biāo)圖像中的矩形區(qū)域加一黑色邊框。將結(jié)果保存在padded_fore_img矩陣和padded_back_img矩陣中,上述的求差分均是對(duì)這兩個(gè)矩陣進(jìn)行的。具體程序如下(僅以源圖像為例):
rws = size(fore_img,1);
cls = size(fore_img,2);
temp = zeros(rws,padding_factor);
fore_img_temp_1 = zeros(rws,cls + (2*padding_factor),3);
fore_img_temp_1(:,:,1) = [temp fore_img(:,:,1) temp];
fore_img_temp_1(:,:,2) = [temp fore_img(:,:,2) temp];
fore_img_temp_1(:,:,3) = [temp fore_img(:,:,3) temp];
3.2建立拉普拉斯方程
在系統(tǒng)中采用五點(diǎn)差分法建立拉普拉斯方程,存儲(chǔ)拉普拉斯方程的矩陣是大型的稀疏矩陣。設(shè)矩陣元素為N,為減少存儲(chǔ)量,本系統(tǒng)中引入三個(gè)5N維的列向量index、irow、icol分別來標(biāo)注矩陣中的非零元素所在的序號(hào)(按列的順序由左至右)、所在的行數(shù)和列數(shù),其初始化值均為0。
在進(jìn)行編程時(shí)首先要確保中心像素不是位于邊界上的,即它一定含有四鄰域像素,可以進(jìn)行正常的五點(diǎn)差分。根據(jù)Matlab中自帶的sparse( )函數(shù)可以由這些列向量產(chǎn)生相應(yīng)的滿足拉普拉斯方程的矩陣。
3.3解泊松方程
在本系統(tǒng)中,通過拉普拉斯方程來構(gòu)建泊松方程。由數(shù)學(xué)知識(shí)可知,拉普拉斯方程如下:?2u?x2+?2u?y2=0 ,則相應(yīng)的泊松方程表達(dá)式為:?2u?x2+?2u?y2=φ(x,y) 。其中,
結(jié)合邊界條件,把定解問題轉(zhuǎn)化為以未知函數(shù)
3.4拉普拉斯插值
所謂拉普拉斯插值是指插值區(qū)域內(nèi)部滿足拉普拉斯方程,區(qū)域邊界滿足泊松方程。通過3.3節(jié)已經(jīng)取得泊松方程和拉普拉斯方程的邊界條件。設(shè)結(jié)果矩陣result是
4 總結(jié)
在本系統(tǒng)中,若選擇的矩形區(qū)域目標(biāo)過大,會(huì)超過內(nèi)存的容量,使得程序運(yùn)行出錯(cuò)。因此,有必要縮減Matlab對(duì)于矩陣信息的存儲(chǔ)。
在泊松圖像編輯算法是對(duì)彩色圖像的三個(gè)顏色通道分別解泊松方程得到最后的結(jié)果。作者聲稱這三個(gè)通道是相互獨(dú)立的,但是未給出嚴(yán)格的數(shù)學(xué)證明。作為一種廣泛應(yīng)用的理論,對(duì)這一點(diǎn)給出嚴(yán)格的數(shù)學(xué)證明是必要的。
參考文獻(xiàn):
[1] 孫鑫,余安萍.VC++深入詳解.北京:電子工業(yè)出版社,2006.
[2] 劉曉艷.微分方程數(shù)值分析基礎(chǔ)教程.北京:清華大學(xué)出版社, 2005.
[3] 項(xiàng)志鋼.計(jì)算機(jī)圖形學(xué).北京:清華大學(xué)出版社,2008.
[4] 馮有前.數(shù)值分析.北京:清華大學(xué)出版社,2008.
[5] 尹振鶴.云計(jì)算的特點(diǎn)及應(yīng)用分析[J].硅谷.2014(12):126.
[6] 鄒鈺.AutoCAD動(dòng)態(tài)塊在室內(nèi)設(shè)計(jì)制圖中的應(yīng)用[J].硅谷.2014(12):126.
[7] 楊翠芳.平面設(shè)計(jì)數(shù)字手段上的表達(dá)分析[J].電腦知識(shí)與技術(shù).2011(3):2148-2150.