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