李承軒,舒忠
(荊楚理工學(xué)院,荊門(mén)448000)
印刷圖像旋轉(zhuǎn)操作,主要用于印刷頁(yè)面的排版設(shè)計(jì)。在當(dāng)前的排版軟件中,圖像旋轉(zhuǎn)算法多為采用三次卷積算法對(duì)旋轉(zhuǎn)后的圖像進(jìn)行插值補(bǔ)償。而對(duì)于印刷圖像后續(xù)進(jìn)行RIP輸出操作,由于使用了計(jì)算量較大的算法,會(huì)導(dǎo)致輸出時(shí)速度降低。
在數(shù)字圖像處理中,對(duì)圖像進(jìn)行旋轉(zhuǎn)操作,圖像占用的空間位置必定會(huì)變大[1]。這是導(dǎo)致印刷圖像在RIP輸出時(shí)運(yùn)行速度降低的主要原因。圖像旋轉(zhuǎn)基本運(yùn)算過(guò)程包括:矩陣旋轉(zhuǎn)→前向映射→反向映射(包括圖像插值運(yùn)算)三個(gè)主要步驟[2]。圖像旋轉(zhuǎn)需要對(duì)其過(guò)程進(jìn)行描述,并不只對(duì)旋轉(zhuǎn)結(jié)果進(jìn)行運(yùn)算,圖像旋轉(zhuǎn)的過(guò)程中,圖像占用空間的面積隨時(shí)都在發(fā)生變化,運(yùn)算過(guò)程對(duì)此都進(jìn)行了統(tǒng)計(jì),這是圖像旋轉(zhuǎn)運(yùn)算時(shí)需要大量空間的主要原因。同樣,圖像的平移算法也需要對(duì)圖像平移過(guò)程中圖像占用空間的面積進(jìn)行統(tǒng)計(jì),如果排版頁(yè)面不能提供足夠的運(yùn)算占用空間,也是無(wú)法將圖像移動(dòng)到需要地位置,特別是整個(gè)排版區(qū)域的邊緣位置。
圖像旋轉(zhuǎn)的數(shù)學(xué)運(yùn)算實(shí)現(xiàn)是以圖像的中點(diǎn)為原點(diǎn),圍繞原點(diǎn)對(duì)圖像進(jìn)行一定角度的旋轉(zhuǎn)[3-5]。其變換的MATLAB實(shí)現(xiàn)流程為:讀取圖像→構(gòu)建圖像矩陣且對(duì)矩陣進(jìn)行初始化(初始值設(shè)為0,表示為黑色)→設(shè)置該圖像的旋轉(zhuǎn)角度(如:α=-15*3.1415926/180.0,表示為逆時(shí)針旋轉(zhuǎn)15°)→定義旋轉(zhuǎn)變換矩陣(H=[cos(α)-sin(α)0;sin(α)cos(α)0;0 0 1])→使用矩陣乘法計(jì)算旋轉(zhuǎn)坐標(biāo)的位置(雙循環(huán)計(jì)算旋轉(zhuǎn)圖像的每一個(gè)像素位置)→給旋轉(zhuǎn)后的每個(gè)像素進(jìn)行賦值。
三次卷積插值是依據(jù)三次多項(xiàng)式S(x)計(jì)算最佳插值函數(shù) sin(x)/x,其像素(x,y)的灰度值由其周?chē)?16 個(gè)像素點(diǎn)的灰度值加權(quán)后獲取[3]。三次卷積插值的MATLAB實(shí)現(xiàn)流程為:讀圖→轉(zhuǎn)雙精度浮點(diǎn)數(shù)據(jù)類(lèi)型→構(gòu)建圖像矩陣并對(duì)矩陣進(jìn)行初始化→設(shè)置旋轉(zhuǎn)(或放大)參數(shù)→循環(huán)歷遍所有空間像素點(diǎn)為灰度插值運(yùn)算結(jié)果賦灰度值做準(zhǔn)備→計(jì)算u、v值(指需要賦灰度值像素點(diǎn)與相鄰像素點(diǎn)的橫向和縱向距離)并確定起始像素點(diǎn)(指16個(gè)相鄰像素中的第1個(gè))的位置→循環(huán)計(jì)算相鄰像素點(diǎn)(共16個(gè))的插值系數(shù)→計(jì)算16個(gè)相鄰像素點(diǎn)乘以插值系數(shù)后的灰度值和,并賦值于該像素點(diǎn)→使用同樣的計(jì)算方法完成圖像所有像素點(diǎn)的賦值→顯示結(jié)果。
根據(jù)印刷圖像處理的特點(diǎn),在實(shí)際應(yīng)用中,圖像旋轉(zhuǎn)后的插值補(bǔ)償,根本沒(méi)有必要使用三次卷積插值運(yùn)算,使用雙線性插值運(yùn)算所產(chǎn)生的圖像像素灰度值誤差進(jìn)行補(bǔ)償,完全能夠滿(mǎn)足印刷圖像輸出的需要。本文在后面的內(nèi)容中,將對(duì)其原因進(jìn)行分析。
本文設(shè)計(jì)的改進(jìn)算法主要思想是:在變換域中完成圖像的旋轉(zhuǎn)與插值運(yùn)算。
使用變換域(頻域)完成圖像旋轉(zhuǎn)與插值運(yùn)算,可以減輕圖像處理過(guò)程中的復(fù)雜度和計(jì)算量。傅里葉變換是最基礎(chǔ)的頻域變換,其他多數(shù)頻域變換都是由傅里葉變換演化而來(lái),例如:余弦變換和小波變換等。離散余弦變換,取的是傅里葉變換變換的余弦運(yùn)算部分(復(fù)數(shù)的實(shí)部),而小波變換則是利用了短時(shí)傅立葉變換的原理,通過(guò)分窗實(shí)現(xiàn)頻域變換[3]。通過(guò)對(duì)幾個(gè)頻域變換方法的比較,充分考慮運(yùn)算效率和運(yùn)算結(jié)果等因素,選擇余弦變換為最佳頻域變換方式。
圖像旋轉(zhuǎn)屬于基本的圖像幾何變換,通常在空域中完成。本文設(shè)計(jì)采用一體化解決方案,選擇在頻域完成對(duì)圖像的旋轉(zhuǎn)與插值運(yùn)算。
對(duì)圖像旋轉(zhuǎn)后的插值運(yùn)算采用雙線性插值方式。本文研究主要是解決印刷圖像的處理,印刷圖像是通過(guò)4色油墨實(shí)現(xiàn)對(duì)圖像的復(fù)制,與圖像原稿相比,其印刷結(jié)果永遠(yuǎn)追求的是接近原稿,很難實(shí)現(xiàn)超越原稿。從成像方式上看,數(shù)字圖像由可見(jiàn)光組成,產(chǎn)生的顏色千變?nèi)f化,而大多印刷只使用4色油墨去還原數(shù)字圖像的色彩,本身就有一定的難度。因此,圖像處理的過(guò)程,只要在質(zhì)量控制的要求范圍內(nèi),可以對(duì)處理要求進(jìn)行適當(dāng)?shù)恼{(diào)整。在進(jìn)行圖像旋轉(zhuǎn)時(shí),使用雙線性插值方式進(jìn)行灰度值補(bǔ)償,可以滿(mǎn)足圖像對(duì)印刷的要求。
本文設(shè)計(jì)提出的算法實(shí)現(xiàn)步驟:
(1)圖像預(yù)處理:讀取圖像;轉(zhuǎn)雙精度浮點(diǎn)數(shù)據(jù)類(lèi)型,以便于計(jì)算機(jī)實(shí)現(xiàn)在[0,1]以?xún)?nèi)的計(jì)算;將圖像轉(zhuǎn)換為矩陣表示等。如果原始圖像還需要進(jìn)行其他增強(qiáng)處理,可以在空域內(nèi)完成相應(yīng)的變換。
(2)空域轉(zhuǎn)頻域:將空域表示的圖像轉(zhuǎn)換為離散余弦頻域表示,使用前文設(shè)計(jì)的離散余弦正變換函數(shù)完成。
(3)圖像旋轉(zhuǎn):完成設(shè)置圖像的旋轉(zhuǎn)角度、定義旋轉(zhuǎn)變換矩陣、使用矩陣乘法計(jì)算旋轉(zhuǎn)坐標(biāo)位置、旋轉(zhuǎn)后的每個(gè)像素賦值等操作。
(4)圖像插值:循環(huán)歷遍所有空間像素點(diǎn)、計(jì)算u、v值(需要運(yùn)算的像素點(diǎn)與相相鄰像素點(diǎn)之間的橫向和縱向距離)并確定起始像素點(diǎn)(指4個(gè)相鄰像素中的第1個(gè))的位置、使用計(jì)算公式完成灰度值計(jì)算并對(duì)所有像素點(diǎn)賦灰度值等操作。
(5)余弦逆變換:使用MATLAB提供的idct2()函數(shù)完成圖像從頻域向空域的轉(zhuǎn)換。
(6)顯示運(yùn)算結(jié)果:使用MATLAB中的imshow()函數(shù)顯示進(jìn)行變換后的結(jié)果。
其中:
對(duì)于雙線性插值計(jì)算,將選取4個(gè)鄰域像素點(diǎn)進(jìn)行賦值的計(jì)算模板。雙線性插值的MATLAB實(shí)現(xiàn)流程為:讀圖→構(gòu)建圖像矩陣并對(duì)矩陣進(jìn)行初始化→設(shè)置旋轉(zhuǎn)(或放大)參數(shù)→循環(huán)歷遍所有空間像素點(diǎn)為灰度插值運(yùn)算結(jié)果賦灰度值做準(zhǔn)備→計(jì)算u、v值(需要運(yùn)算的像素點(diǎn)與相相鄰像素點(diǎn)之間的橫向和縱向距離)并確定起始像素點(diǎn)(指4個(gè)相鄰像素中的第1個(gè))的位置→使用計(jì)算公式完成灰度值計(jì)算并對(duì)所有像素點(diǎn)賦灰度值→顯示結(jié)果。
另外,對(duì)圖像進(jìn)行旋轉(zhuǎn)有兩種方式:一種是以坐標(biāo)系為基準(zhǔn)的圖像旋轉(zhuǎn),另一種是按圖像中點(diǎn)為基準(zhǔn)的旋轉(zhuǎn)。本文采用以圖像中點(diǎn)為基準(zhǔn)進(jìn)行旋轉(zhuǎn),在進(jìn)行旋轉(zhuǎn)前,先將標(biāo)準(zhǔn)的平面坐標(biāo)(平面坐標(biāo)1,原點(diǎn)為圖像左上角像素點(diǎn))轉(zhuǎn)換為圖像中點(diǎn)平面坐標(biāo)(平面坐標(biāo)2,原點(diǎn)為圖像中心像素點(diǎn)),然后進(jìn)行圖像旋轉(zhuǎn)和插值計(jì)算,完成計(jì)算后再返回標(biāo)準(zhǔn)平面坐標(biāo)中表示該圖像。
算法的核心MATLAB代碼如下:
……
T1=size(M,N,RGB);%將圖像轉(zhuǎn)換為M×N的矩陣表示,圖像模式為RGB。
M1=round(m*abs(cos(JD))+n*abs(sin(JD)));%計(jì)算圖像旋轉(zhuǎn)后的行數(shù),JD為旋轉(zhuǎn)角度,round為四舍五入取整后的計(jì)算結(jié)果的MATLAB函數(shù),abs為取絕對(duì)值后的計(jì)算結(jié)果的MATLAB函數(shù)。
N1=round(m*abs(sin(JD))+n*abs(cos(JD)));%計(jì)算圖像旋轉(zhuǎn)后的列數(shù),round為四舍五入取整后的計(jì)算結(jié)果的MATLAB函數(shù),abs為取絕對(duì)值后的計(jì)算結(jié)果的MATLAB函數(shù)。
T2=zeros[M1,N1,RGB];%定義旋轉(zhuǎn)插值后的輸出圖像矩陣,并且矩陣中所有像素值為初始值0。
ZB1=[1 0 0;0-1 0;-0.5*N1 0.5*M1 1];%定義平面坐標(biāo)1向平面坐標(biāo)2轉(zhuǎn)換的運(yùn)算系數(shù)矩陣ZB1。
ZB2=[1 0 0;0-1 0;0.5*c 0.5*r 1];%定義平面坐標(biāo)2向平面坐標(biāo)1轉(zhuǎn)換的運(yùn)算系數(shù)矩陣ZB2。
K1=[cos(JD)-sin(JD)0;sin(JD)cosd(JD)0;0 0 1];%定義圖像旋轉(zhuǎn)的變換矩陣K1。
K2(i,j,:)=(1-u)*(1-v)*T1(i,j,:)+u*(1-v)*T1(i,j+1,:)+(1-u)*v*T1(i+1,j,:)+u*v*T1(i+1,j+1,:);%進(jìn)行插值運(yùn)算,定義圖像插值運(yùn)算的變換矩陣K2。其中,在圖像轉(zhuǎn)換為雙精度浮點(diǎn)數(shù)據(jù)類(lèi)型后,i、j分別為像素點(diǎn)橫向坐標(biāo)和像素點(diǎn)縱向坐標(biāo)的整數(shù)部分,u、v分別為像素點(diǎn)橫向坐標(biāo)和像素點(diǎn)縱向坐標(biāo)的小數(shù)部分。注意:在需要將圖像轉(zhuǎn)換為雙精度浮點(diǎn)數(shù)據(jù)類(lèi)型進(jìn)行處理時(shí),在頻域完成相應(yīng)的處理不僅可以大大降低處理的復(fù)雜度,還可以提高運(yùn)算速度。
T2=[i j 1]*ZB1*K1*K2*ZB2;%此為主體變換公式,對(duì)原始圖像依次進(jìn)行平面坐標(biāo)1向平面坐標(biāo)2轉(zhuǎn)換、旋轉(zhuǎn)變換、插值運(yùn)算和平面坐標(biāo)2向平面坐標(biāo)1轉(zhuǎn)換(注意是依次),將運(yùn)算結(jié)果圖像的矩陣定義T2。
可以在K2和T2的計(jì)算過(guò)程中,使用離散余弦變換。
……
通過(guò)對(duì)方正飛騰(選用的一種國(guó)產(chǎn)排版軟件,用于比較分析)中的旋轉(zhuǎn)插值算法進(jìn)行仿真,與本文設(shè)計(jì)的仿真算法進(jìn)行比較,驗(yàn)證本文設(shè)計(jì)的算法與方正飛騰旋轉(zhuǎn)插值算法結(jié)果相近,但本文設(shè)計(jì)的算法運(yùn)算量小。對(duì)實(shí)驗(yàn)結(jié)果的評(píng)價(jià)以客觀評(píng)價(jià)為主,采用峰值信噪比作為比較參數(shù)[6]。由于本實(shí)驗(yàn)驗(yàn)證的是低層次算法挑戰(zhàn)高層次算法的結(jié)果,因此,實(shí)驗(yàn)結(jié)果方面,只求接近,不求超越,但在算法運(yùn)算復(fù)雜度和運(yùn)算量方面,要求占有絕對(duì)優(yōu)勢(shì)。
通過(guò)對(duì)實(shí)驗(yàn)圖像進(jìn)行測(cè)試,使用本本文提出的圖像旋轉(zhuǎn)方法得到的變換后的圖像如圖1所示,圖像旋轉(zhuǎn)角度分別為-30°和-90°。使用方正飛騰的圖像旋轉(zhuǎn)方法(其圖像旋轉(zhuǎn)是在二維離散傅里葉頻域采用三次卷積插值實(shí)現(xiàn))的變換后的圖像如圖2所示,圖像旋轉(zhuǎn)角度也分別為-30°和-90°。
圖1 本文設(shè)計(jì)的圖像旋轉(zhuǎn)插值算法測(cè)試結(jié)果
圖2 方正飛騰的圖像旋轉(zhuǎn)插值算法仿真測(cè)試結(jié)果
兩幅圖像峰值信噪比計(jì)算的MATLAB實(shí)現(xiàn)流程為:讀取圖像→圖像轉(zhuǎn)為雙精度浮點(diǎn)數(shù)據(jù)類(lèi)型表示→分離R、G、B三色通道,每個(gè)通道都視為單個(gè)灰度圖像→計(jì)算兩幅圖像各通道的灰度均值差→所有通道圖像轉(zhuǎn)換為矩陣表示→計(jì)算兩幅圖像R、G、B三色通道的峰值信噪比→取兩幅圖像的R、G、B三色通道峰值信噪比的平均值為兩幅圖像進(jìn)行比較的峰值信噪比。
對(duì)兩種方法分別進(jìn)行-30°和-90°測(cè)試的結(jié)果如圖3、圖 4所示。
圖3 使用兩種方法旋轉(zhuǎn)-30°進(jìn)行測(cè)試的結(jié)果
圖4 使用兩種方法旋轉(zhuǎn)-90°進(jìn)行測(cè)試的結(jié)果
實(shí)驗(yàn)中使用的兩種旋轉(zhuǎn)插值算法的主要區(qū)別在于:方正飛騰的圖像旋轉(zhuǎn)插值算法使用的頻域轉(zhuǎn)換平臺(tái)為二維離散傅里葉變換,使用的插值方式為三次卷積插值;本文設(shè)計(jì)的圖像旋轉(zhuǎn)插值算法使用的頻域轉(zhuǎn)換平臺(tái)為二維離散余弦變換,使用的插值方式為雙線性插值。
二維離散傅里葉變換[7]的關(guān)鍵在于對(duì)復(fù)數(shù)進(jìn)行計(jì)算,圖像通過(guò)在復(fù)數(shù)平面內(nèi)進(jìn)行表示,對(duì)復(fù)數(shù)的實(shí)部與虛部進(jìn)行運(yùn)算,其基本函數(shù)為:ck[i]=cos(2πki/N),sk[i]=sin(2πki/N),ck[j]=cos(2πkj/N),sk[j]=sin(2πkj/N),通過(guò)歐拉等式進(jìn)行變換后的復(fù)數(shù)的形式:
cos(x)=1/2ej(-x)+1/2ejx(復(fù)數(shù)實(shí)部)
sin(x)=j(1/2ej(-x)-1/2ejx)(復(fù)數(shù)虛部)
cos(y)=1/2ej(-y)+1/2ejy(復(fù)數(shù)實(shí)部)
sin(y)=j(1/2ej(-y)-1/2ejy)(復(fù)數(shù)虛部)
在以上基本上,最終形成二維離散傅里葉變換。
而二維離散余弦變換[8]則只需要進(jìn)行二維離散傅里葉變換中的復(fù)數(shù)實(shí)部運(yùn)算,因此,二維離散余弦變換的運(yùn)算量是二維離散傅里葉變換一半,因此,本文提出的圖像旋轉(zhuǎn)插值方法,在計(jì)算復(fù)雜度和計(jì)算量上具有較強(qiáng)的優(yōu)勢(shì)。
根據(jù)前文論述,雙線性插值選擇了運(yùn)算像素點(diǎn)周?chē)?個(gè)像素點(diǎn)作為參考值,進(jìn)行補(bǔ)償運(yùn)算,而三次卷積插值則選擇了運(yùn)算像素點(diǎn)周?chē)?6個(gè)像素點(diǎn)作為參考值,并使用卷積補(bǔ)償運(yùn)算。因此,本文提出的圖像旋轉(zhuǎn)雙線性插值方法,同樣在計(jì)算復(fù)雜度和計(jì)算量上具有較強(qiáng)的優(yōu)勢(shì)。
本次實(shí)驗(yàn)收集的數(shù)據(jù)主要是將兩個(gè)圖像的峰值信噪比作為客觀比較的分析參數(shù),兩幅圖像的峰值信噪比越高,說(shuō)明兩者的相似度越大,且標(biāo)準(zhǔn)衡量值在30dB左右。通常情況下,峰值信噪比主要用于一幅圖像處理前后的對(duì)比,用于評(píng)價(jià)圖像的相似度。在對(duì)一幅圖像的處理前后進(jìn)行比較時(shí),相似度不高,才能說(shuō)明圖像處理的結(jié)果越明顯,是圖像處理的理想取值。但是,本實(shí)驗(yàn)是為了比較兩種圖像旋轉(zhuǎn)后的結(jié)果是否相近,因此,其峰值信噪比理想取值是越高越好。通過(guò)與標(biāo)準(zhǔn)衡量值在30dB相比,采用方正排版軟件的旋轉(zhuǎn)插值和本文設(shè)計(jì)的旋轉(zhuǎn)插值算法,在旋轉(zhuǎn)-30°和-90°時(shí),其結(jié)果都接近標(biāo)準(zhǔn)衡量值,且旋轉(zhuǎn)-30°的結(jié)果要好于旋轉(zhuǎn)-90°的結(jié)果。因此,研究結(jié)果與目標(biāo)要求基本一致。此項(xiàng)實(shí)驗(yàn)結(jié)果獲取的客觀數(shù)據(jù)說(shuō)明本文設(shè)計(jì)的旋轉(zhuǎn)插值算法有效。
本文設(shè)計(jì)的印刷排版圖像旋轉(zhuǎn)改進(jìn)仿真算法,主要解決了印刷圖像在制版輸出時(shí)的速度緩慢問(wèn)題,解決問(wèn)題的關(guān)鍵來(lái)自?xún)蓚€(gè)方面:一是使用離散余弦變換替換廣泛使用的離散傅里葉變換作為變換平臺(tái);二是使用雙線性插值算法替換三次卷積插值。另外,在圖像旋轉(zhuǎn)時(shí),使用以圖像中點(diǎn)為基準(zhǔn)進(jìn)行旋轉(zhuǎn)。以上這些改進(jìn)手段的使用,大大降低了運(yùn)算量。通過(guò)選用國(guó)內(nèi)常用的方正飛騰排版軟件與本文提出的算法進(jìn)行仿真實(shí)驗(yàn)表明,本文提出的算法在大大減少了運(yùn)行時(shí)間的同時(shí),圖像旋轉(zhuǎn)效果與方正飛騰排版軟件處理結(jié)果相近。