一種對(duì)圖像進(jìn)行二維傅立葉變換或反變換的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及TFT-LCD面板自動(dòng)光學(xué)檢測(cè)技術(shù)領(lǐng)域,具體涉及一種對(duì)圖像進(jìn)行二維傅立葉變換或反變換的方法及裝置。
【背景技術(shù)】
[0002]在圖像處理過(guò)程中,經(jīng)常需要進(jìn)行借助于傅立葉變換進(jìn)行頻域?yàn)V波的操作。經(jīng)常采用的方式是二維快速傅立葉變換(二維FFT),將圖像變換到頻域,進(jìn)行濾波處理后,再通過(guò)二維快速傅立葉反變換(二維IFFT)到時(shí)域,從而得到濾波處理后的圖像。
[0003]圖像處理領(lǐng)域往往對(duì)處理的實(shí)時(shí)性要求很高,而二維FFT/IFFT運(yùn)算這種運(yùn)算量大的模塊,經(jīng)常是系統(tǒng)速度的瓶頸所在。目前二維FFT/IFFT運(yùn)算在FPGA(現(xiàn)場(chǎng)可編程門陣列)、DSP(數(shù)字信號(hào)處理)、GPU(圖形處理器)、CPU等硬件平臺(tái)上都有實(shí)現(xiàn)。
[0004]如圖1所示,由于二維FFT在結(jié)果上等效于分別沿圖片的行方向和列方向做一維FFT運(yùn)算,因此其常用處理方法是:
[0005]1、對(duì)圖片每行做一次一維FFT運(yùn)算
[0006]2、將圖片沿對(duì)角線進(jìn)行翻轉(zhuǎn)
[0007]3、再次對(duì)圖片每行做一次一維FFT運(yùn)算
[0008]4、再次將圖片沿對(duì)角線進(jìn)行翻轉(zhuǎn)
[0009]由于圖片在外部存儲(chǔ)器(DDR)中存儲(chǔ)時(shí),整張圖片的像素存儲(chǔ)地址是連續(xù)遞增的,即第n+1行的第一個(gè)像素緊挨著第η行最后一個(gè)像素存儲(chǔ)。所以在DDR里面進(jìn)行行列轉(zhuǎn)換時(shí),如果按行讀取圖片,則讀地址連續(xù)遞增;如果按列寫圖片,則寫地址時(shí),每寫一個(gè)數(shù)據(jù)其變化量為一行數(shù)據(jù)的長(zhǎng)度,這樣一來(lái)DDR訪問(wèn)效率就會(huì)非常低。
[0010]因此,對(duì)于比較大的圖片,如4ΚΧ4Κ像素的圖片,在兼顧資源和速度的前提下,如何實(shí)現(xiàn)高速的二維FFT/IFFT處理是一個(gè)難題。
【發(fā)明內(nèi)容】
[0011]為解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種可兼顧資源和速度的對(duì)圖像進(jìn)行二維傅立葉變換或反變換的方法及裝置。
[0012]對(duì)于本發(fā)明一種對(duì)圖像進(jìn)行二維傅立葉變換或反變換的方法,其技術(shù)方案為:
[0013]從外部存儲(chǔ)器的Α區(qū)域中一次取一行圖片數(shù)據(jù),做一維傅立葉變換或反變換,并將每行圖片數(shù)據(jù)變換后的結(jié)果按行順序存儲(chǔ)至外部存儲(chǔ)器的B區(qū)域,直至完成整張圖片的一維傅立葉變換或反變換;
[0014]對(duì)外部存儲(chǔ)器的B區(qū)域內(nèi)的圖像數(shù)據(jù)進(jìn)行分塊,按行方向每次從外部存儲(chǔ)器的域取一個(gè)圖像塊存入隨機(jī)存儲(chǔ)器中;
[0015]讀取隨機(jī)存儲(chǔ)器中的各個(gè)圖像塊數(shù)據(jù),并將讀取出的各個(gè)圖像塊之間按列的方向依次寫回外部存儲(chǔ)器的A區(qū)域;
[0016]從外部存儲(chǔ)器的A區(qū)域中一次取一行圖片數(shù)據(jù),做第二次一維傅立葉變換或反變換,并將每行圖片數(shù)據(jù)變換后的結(jié)果按行順序存儲(chǔ)至外部存儲(chǔ)器的B區(qū)域,直至完成整張圖片的二維傅立葉變換或反變換;
[0017]對(duì)外部存儲(chǔ)器的B區(qū)域內(nèi)的圖像數(shù)據(jù)進(jìn)行分塊,按行方向每次從外部存儲(chǔ)器的域取一個(gè)圖像塊存入隨機(jī)存儲(chǔ)器中;
[0018]讀取隨機(jī)存儲(chǔ)器中的各個(gè)圖像塊數(shù)據(jù),并將讀取出的各個(gè)圖像塊之間按列的方向依次寫回外部存儲(chǔ)器的A區(qū)域,即完成整張圖片的二維傅立葉變換或反變換;
[0019]其中,單個(gè)圖像塊內(nèi)部的數(shù)據(jù)從隨機(jī)存儲(chǔ)器中讀出的方向相對(duì)于存入隨機(jī)存儲(chǔ)器的方向進(jìn)行了一次翻轉(zhuǎn)。
[0020]進(jìn)一步的,所述單個(gè)圖像塊內(nèi)部的數(shù)據(jù)從隨機(jī)存儲(chǔ)器中讀出的方向相對(duì)于存入隨機(jī)存儲(chǔ)器的方向進(jìn)行一次翻轉(zhuǎn)的方式為:單個(gè)圖像塊內(nèi)部的數(shù)據(jù)按行方向從外部存儲(chǔ)器的B區(qū)域讀出,同時(shí)按行方向存入隨機(jī)存儲(chǔ)器中,然后按列方向從隨機(jī)存儲(chǔ)器中讀出,同時(shí)按行方向?qū)懟赝獠看鎯?chǔ)器的A區(qū)域。
[0021]進(jìn)一步的,所述單個(gè)圖像塊內(nèi)部的數(shù)據(jù)從隨機(jī)存儲(chǔ)器中讀出的方向相對(duì)于存入隨機(jī)存儲(chǔ)器的方向進(jìn)行一次翻轉(zhuǎn)的方式為:單個(gè)圖像塊內(nèi)部的數(shù)據(jù)按行方向從外部存儲(chǔ)器的B區(qū)域讀出,同時(shí)按列方向存入隨機(jī)存儲(chǔ)器中,然后按行方向從隨機(jī)存儲(chǔ)器中讀出,同時(shí)按行方向?qū)懟赝獠看鎯?chǔ)器的A區(qū)域。
[0022]進(jìn)一步的,所述外部存儲(chǔ)器包括第一外部存儲(chǔ)器和第二外部存儲(chǔ)器,兩個(gè)外部存儲(chǔ)器對(duì)圖像數(shù)據(jù)進(jìn)行交替讀寫;
[0023]所述交替讀寫即從第一外部存儲(chǔ)器中讀取數(shù)據(jù),做傅立葉變換或反變換后的結(jié)果存入第二外部存儲(chǔ)器,從第二外部存儲(chǔ)器中取出數(shù)據(jù)經(jīng)所述隨機(jī)存儲(chǔ)器翻轉(zhuǎn)后寫回第一外部存儲(chǔ)器。
[0024]進(jìn)一步的,將所述隨機(jī)存儲(chǔ)器中的第η-1個(gè)圖像塊數(shù)據(jù)寫回至外部存儲(chǔ)器完成后,再將所述隨機(jī)存儲(chǔ)器中的第η個(gè)圖像塊數(shù)據(jù)寫回至外部存儲(chǔ)器,同時(shí)從外部存儲(chǔ)器中讀取第n+1個(gè)圖像塊數(shù)據(jù)。
[0025]進(jìn)一步的,多個(gè)所述隨機(jī)存儲(chǔ)器對(duì)外部存儲(chǔ)器內(nèi)的多個(gè)圖像塊進(jìn)行并行讀取和并行寫回處理。
[0026]進(jìn)一步的,所述圖像塊為圖片按行方向和列方向等分而成,所述圖像塊的大小根據(jù)等分的數(shù)量進(jìn)行確定。
[0027]進(jìn)一步的,所述隨機(jī)存儲(chǔ)器的大小為外部存儲(chǔ)器的1/1000?1/10,每個(gè)所述隨機(jī)存儲(chǔ)器的大小不小于一個(gè)圖像塊的大小。
[0028]對(duì)于本發(fā)明一種對(duì)圖像進(jìn)行二維傅立葉變換或反變換的裝置,其技術(shù)方案為,包括:
[0029]外部存儲(chǔ)器:用于對(duì)圖像數(shù)據(jù)進(jìn)行存儲(chǔ);
[0030]隨機(jī)存儲(chǔ)器:用于暫存外部存儲(chǔ)器中讀出的圖像塊數(shù)據(jù);
[0031 ]傅立葉運(yùn)算模塊:用于實(shí)現(xiàn)一維傅立葉運(yùn)算;
[0032]傅立葉運(yùn)算模塊讀DDR接口模塊:用于將圖像數(shù)據(jù)以行為單位從外部存儲(chǔ)器中取出,并送入傅立葉運(yùn)算模塊;
[0033]傅立葉運(yùn)算模塊寫DDR接口模塊:用于將圖像數(shù)據(jù)以行為單位從傅立葉運(yùn)算模塊取出,并存入外部存儲(chǔ)器中;
[0034]分塊內(nèi)部翻轉(zhuǎn)模塊:以隨機(jī)存儲(chǔ)器為媒介,實(shí)現(xiàn)分塊內(nèi)部圖像數(shù)據(jù)的翻轉(zhuǎn);
[0035]圖片分塊翻轉(zhuǎn)讀DDR接口模塊:用于將圖片分成多個(gè)大小相同的圖像塊,并按行方向從DDR取圖像塊,順序送入分塊內(nèi)部翻轉(zhuǎn)模塊;
[0036]圖片分塊翻轉(zhuǎn)寫DDR接口模塊:用于將分塊內(nèi)部翻轉(zhuǎn)模塊輸出的,已經(jīng)完成了分塊內(nèi)部翻轉(zhuǎn)的圖像塊,按列方向?qū)懟赝獠看鎯?chǔ)器。
[0037]進(jìn)一步的,所述隨機(jī)存儲(chǔ)器的大小為外部存儲(chǔ)器的1/1000?1/10,每個(gè)所述隨機(jī)存儲(chǔ)器的大小不小于一個(gè)圖像塊的大小。
[0038]本發(fā)明的有益效果:使用外部存儲(chǔ)器存儲(chǔ)數(shù)據(jù),使用隨機(jī)存儲(chǔ)器對(duì)圖片進(jìn)行翻轉(zhuǎn),F(xiàn)PGA資源消耗少,支持大的圖像數(shù)據(jù),存儲(chǔ)容量?jī)H受限于外部存儲(chǔ)器。對(duì)圖片進(jìn)行分塊讀寫,圖像塊間和圖像塊內(nèi)部均進(jìn)行翻轉(zhuǎn),DDR地址僅在圖像塊內(nèi)部行與行之間,圖像塊與圖像塊之間才進(jìn)行跳變,從而大大提升了 DDR圖片讀寫的效率。采用兩片外部存儲(chǔ)器進(jìn)行交替讀寫,可以充分利用每個(gè)外部存儲(chǔ)器的帶寬。采用乒乓機(jī)制和并行機(jī)制,進(jìn)一步提升了處理速度。
【附圖說(shuō)明】
[0039]圖1為沿圖片的行方向和列方向做一維FFT運(yùn)算,并沿對(duì)角線進(jìn)行翻轉(zhuǎn)的示意圖;
[0040]圖2為從外部存儲(chǔ)器A中讀取圖片數(shù)據(jù),進(jìn)行一維FFT運(yùn)算后存儲(chǔ)至外部存儲(chǔ)器B的示意圖;
[0041 ]圖3為外部存儲(chǔ)器B中圖像塊讀的順序;
[0042]圖4為外部存儲(chǔ)器A中圖像塊寫的順序;
[0043]圖5為圖像塊內(nèi)部翻轉(zhuǎn)的第一種實(shí)施方式示意圖;
[0044]圖6為圖像塊內(nèi)部翻轉(zhuǎn)的第二種實(shí)施方式示意圖。
【具體實(shí)施方式】
[0045]以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明:
[0046]首先將圖片數(shù)據(jù)從整型轉(zhuǎn)化為浮點(diǎn)型復(fù)數(shù),包括實(shí)部和虛部,然后按行方向(先存圖片第一行,再存圖片第二行……)存儲(chǔ)在FPGA外接的DDR里面,DDR的存儲(chǔ)地址從起始存儲(chǔ)地址開(kāi)始連續(xù)遞增。
[0047]對(duì)圖像數(shù)據(jù)進(jìn)行二維傅立葉變換或反變換運(yùn)算的過(guò)程如下:
[0048]如圖2所示,從外部存儲(chǔ)器的A區(qū)域中一次取一行圖片數(shù)據(jù),做一維傅立葉變換或反變換,并將每行圖片數(shù)據(jù)變換后的結(jié)果按行順序存儲(chǔ)至外部存儲(chǔ)器的B區(qū)域,直至完成整張圖片的一維傅立葉變換或反變換。
[0049]對(duì)外部存儲(chǔ)器的B區(qū)域內(nèi)的圖像數(shù)據(jù)進(jìn)行分塊,按行方向每次從外部存儲(chǔ)器的域取一個(gè)圖像塊存入隨機(jī)存儲(chǔ)器RAM中,其中隨機(jī)存儲(chǔ)器的大小為外部存儲(chǔ)器的1/1000?1/10,且其存儲(chǔ)空間應(yīng)不小于一個(gè)圖像塊的大小。本實(shí)施例以大小為4096*4096像素的圖片、將圖片等分成16塊為例進(jìn)行說(shuō)明。如圖3所示,每個(gè)圖像塊的大小即為4096/16 = 256行,4096/16 = 256列。每次從外部存儲(chǔ)器的B區(qū)域取一個(gè)圖像塊存入隨機(jī)存儲(chǔ)器中,即首先從外部存儲(chǔ)器的B區(qū)域中讀取圖像塊0,利用隨機(jī)存儲(chǔ)器RAM進(jìn)行翻轉(zhuǎn)后,存入外部存儲(chǔ)器的A區(qū)域中;然后從外部存儲(chǔ)器的B區(qū)域中讀取圖像塊1,利用RAM進(jìn)行翻轉(zhuǎn)后,存入外部存儲(chǔ)器的A區(qū)域中……依次進(jìn)行,直到完成全部16個(gè)圖像塊,這樣就完成了圖像塊間的翻轉(zhuǎn)操作。實(shí)際運(yùn)行時(shí),系統(tǒng)可以讓幾個(gè)圖像塊的翻轉(zhuǎn)同時(shí)進(jìn)行,加快整張圖片翻轉(zhuǎn)的速度,代價(jià)是消耗更多的RAM資源。
[0050]讀取隨機(jī)存儲(chǔ)器中的各個(gè)圖像塊數(shù)據(jù),并將讀取出的各個(gè)圖像塊之間按列的方向依次寫回外部存儲(chǔ)器的A區(qū)域。如圖4所示,圖像塊按編號(hào)0?15的順序依次從隨機(jī)存儲(chǔ)器寫回外部存儲(chǔ)器的A區(qū)域。
[0051]從外部存儲(chǔ)器的A區(qū)域中一次取一行圖片數(shù)據(jù),做第二次一維傅立葉變換或反變換,并將每行圖片數(shù)據(jù)變換后的結(jié)果按行順序存儲(chǔ)至外部存儲(chǔ)器的B區(qū)域,直至完成整張圖