傅里葉變換
一個恰當的比喻是將傅里葉變換比作一個玻璃棱鏡。棱鏡是可以將光分解為不同顏色的物理儀器,每個成分的顏色由波長(或頻率)來決定。
傅里葉變換可以看做數學上的棱鏡,將函數基於頻率分解為不同的成分。當我們考慮關時,討論它的光譜或頻率譜。同樣,傅里葉變換使我們能夠通過頻率成分來分析一個函數。
圖像的頻率是表征圖像中灰度變化劇烈程度的指標,是灰度在平面空間上的梯度。
傅里葉變換在圖像處理中可以做到圖像增強與圖像去噪、圖像分割之邊緣檢測、圖像特征提取、圖像壓縮等。
如果對一幅精細的圖像使用低通濾波器,那么濾波后的結果就只剩下輪廓了。
高頻成分:圖像細節紋理屬於高頻分量,是圖像灰度值變化劇烈的部分。
低頻成分:圖像背景與輪廓屬於低頻分量,是圖像灰度值變化緩慢的部分。
低通濾波器:gen_lowpass 對空間域圖像進行平滑處理,抑制高頻分量。
高通濾波器:gen_highpass 對空間域圖像進行銳化處理,抑制低頻分量。
帶通濾波器:gen_bandpass 使圖像在某一部分的頻率信息通過,其他過高或過低的頻率信息抑制。
帶阻濾波器:使圖像過低或過高的頻率信息通過,某一部分頻率信息抑制。
相關算子
gen_gauss_filter( : ImageGauss : Sigma1, Sigma2, Phi, Norm, Mode, Width, Height : ) * 在頻域產生一個高斯濾波器 * 2.高斯分布在濾波器主方向上的空間域標准差,Sigma越大,高斯濾波器的頻帶就越寬,對圖像平滑程度越高。 * 3.垂直於濾波器主方向的高斯分布在空間域的標准差。 * 4.濾波器在空間域的主要方向 * 5.濾波器的歸一化因子。'n' 避免在FFT中歸一化 * 6.直流項在頻域的位置。 * 如果使用fft_generic,可以使用'dc_edge'來提高效率。 * 如果使用fft_image和fft_image_inv進行濾波,則必須使用Norm = 'none'和Mode = 'dc_center'。 * 如果使用rft_generic,則必須使用Mode = 'rft'。
derivate_gauss (Image, ImageGauss, 3, 'none') * 將一個圖像與高斯函數的導數進行卷積。效果與FFT進行高斯濾波差不多。 主要的區別是邊界處理:FFT的定義假設信號是周期性的,因此邊界處理是循環的延續。與此相反,derivate_gauss在圖像邊界使用灰度值的鏡像。 通過FFT進行過濾的速度已經快於在Sigma=3(排除創建過濾器的時間)中使用derivate_gauss。這種優勢隨着Simag的增大而變得更加明顯。 'none' 僅使用平滑 'x' 沿X的一階導數
gen_derivative_filter (DerivativeFilter, 'x', 1, 'n', 'rft', Width, Height) * 在頻域內產生一個導數濾波器,導數過濾器沒有使用任何平滑 * 還要注意的是,不經過平滑處理的導數計算通常不會返回有用的結果,因為噪聲會被顯著放大。
gen_sin_bandpass (ImageBandpass, 0.4, 'none', 'rft', Width, Height) * 生成一個正弦形狀的帶通濾波器 2.濾波器與直流項的最大距離 3.濾波器的歸一化因子 4.直流項在頻域的位置 5.圖像寬度 6.圖像高度
rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width) * 計算圖像的實值快速傅里葉變換。在正向轉換(Direction = 'to_freq')中,ResultType必須設置為'complex'。 * 3.'to_freq',輸入圖像必須具有實值類型,即,復雜圖像不可用作輸入。支持所有可以轉換為real類型的圖像的圖像類型。在這種情況下,輸出是一個維數(w/2+1)*h的復雜圖像,其中w和h是輸入圖像的寬度和高度。指數-1。 * 'from_freq',輸入圖像必須是復雜的。在這種情況下,輸入圖像的大小不足以確定輸出圖像的大小。這必須通過將寬度設置為一個有效值來實現,必須為輸入復像寬度的2*w-2或2*w-1。指數1。 * 4.變換的歸一化因子。用戶必須確保參數的一致使用。這意味着用於正向和反向轉換的歸一化因子相乘時必須產生w*h。 * 5.輸出圖像的圖像類型。
fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType : ) * 計算輸入圖像的快速傅里葉變換圖像。 1.輸入圖像 2.傅里葉轉換圖像 3.正向轉換還是反向轉換 'to_freq' 'from_freq' 4.指數的符號. 正向轉換-1,反向轉換1 5.轉換歸一化因子. 'n' 'none' 'sqrt' 6.直流項在頻域的位置 'dc_center' 'dc_edge' 7.輸出圖像的類型 'complex' 'byte' 'real' ....
convol_fft (ImageFFT, ImageFilter, ImageConvol) * 在頻域內對圖像與濾波器進行卷積,將復雜圖像ImageFFT的像素乘以濾波器ImageFilter的相應像素。 首先將圖像在水平(豎直)方向與濾波器進行卷積;然后將卷積后的結果在豎直(水平)方向使用相同的濾波器函數得到的模板進行卷積運算。
gray_range_rect (ImageFiltered, ImageResult, 10, 10) * 確定矩形內的灰度值范圍,每個圖像點在掩膜矩形內的最大和最小灰度值的差值(max - min),掩膜為奇數(偶數-1)
correlation_fft (ImageFFT, ImageFFT, ImageCorrelation) * 計算兩個圖像在頻域的相關性 * 將ImageFFT1與ImageFFT2的共軛復數相乘,計算相關系數。 * 需要注意的是,為了在空間域實現相關性的正確縮放。 * 前向轉換必須使用帶Norm = 'none'的fft_generic或rft_generic操作符。 * 反向轉換必須使用帶Norm = 'n'的fft_generic或rft_generic操作符。 * 例程中使用local_max_sub_pix檢測時前向和反向用的都是'n'
local_max_sub_pix (ImageFFTInv, 'gauss', 3, 0.0001, Row, Column) * 圖像局部極大值的亞像素精確檢測。 1.輸入亞像素圖像 2.偏導數的計算方法 'facet','gauss' 3.'gauss'情況下Sigma確定高斯核的大小 4.海森矩陣特征值的最小絕對值。當海森矩陣的特征值都小於-閾值時,一個點被認為是局部最大值。 5.檢測到的極大值的行坐標 6.檢測到的極大值的列坐標
power_real (ImageFFT, PowerSpectrum)
* 計算complex圖像的功率譜(頻率的模),結果圖像為real類型
binomial_filter (PowerSpectrum, ImageSmooth, 9, 9) * 二項式濾波器是一個非常好的近似高斯濾波器,可以非常有效地實現只用整數操作。因此,binomial_filter非常快。
應用快速傅里葉變換處理圖像
1.使用實值傅里葉變換圖像與組合高斯濾波器卷積,計算濾波圖像的灰度值范圍gray_range_rect,通過灰度閾值檢測塑料表面小凹點。
2.檢測模糊圖像中的不均衡缺陷,使用實值傅里葉變換圖像與高斯濾波器進行卷積,轉換成空間域后將原圖像與濾波后圖像進行sub_image求差值,得到清晰的缺陷圖,應用lines_gauss提取線條。
3.在高紋理圖像中檢測不均衡缺陷,從原始圖像減去預估的背景光照,使得缺陷變得更明顯(實值傅里葉變換+高斯濾波器卷積+圖像相減)
接着使用中值濾波平滑紋理,通過閾值從圖像中提取流域盆地,對盆地區域計算共現矩陣,得出其灰度值特征(灰度能量值),利用能量值篩選缺陷,缺陷對應的暗斑能量非常低。
4.利用頻域內的自相關(correlation_fft)技術,通過檢測自相關圖像中極大值(local_max_sub_pix)的子像素精確位置來確定單個模具的位置。
5.實值傅里葉變換計算參考圖像與檢測圖像的頻域自相關,得到網格與參考圖像相差的旋轉角度。
* 首先,使用參考圖像(旋轉角度為0°)創建邊緣方向的參考頻譜。
* 通過將任意旋轉網格邊緣方向的頻譜與參考頻譜相關聯,可以確定網格的旋轉角度。
* 計算反向傅里葉變換后圖像的灰度值get_grayval
* 根據灰度值創建函數create_funct_1d_array
* 計算函數的局部最大值和最小值local_min_max_funct_1d
* 返回函數在局部最大值位置的Y值get_y_value_funct_1d
* 獲取最大Y值對應的局部最大值,該值-1再乘以2即是角度。Angle := 2 * (InnerMaxPos[MaxPosAbs] - 1)
6.快速傅里葉轉換頻域圖,生成濾波器消除頻域圖垂直方向的干擾,反向傅里葉變換得到消除干擾后的圖像。
fft_generic(Image,ImageFFT,'to_freq',-1,'sqrt','dc_center','complex') gen_rectangle1 (Rectangle1, 0, Width/2-2, Height/2-10, Width/2+2) gen_rectangle1 (Rectangle2, Height/2+10, Width/2-2, Height, Width/2+2) union2 (Rectangle1, Rectangle2, RegionUnion) paint_region (RegionUnion, ImageFFT, ImageResult, 0, 'fill') fft_generic(ImageResult,ImageFFT,'from_freq',1,'sqrt','dc_center','byte')
6.在不均勻照明的表面檢測缺陷(划痕),創建一個合適的正弦帶通濾波器。然后通過在頻域進行濾波來增強划痕。最后,對增強缺陷進行形態學后處理。
7.在頻域濾波下從干擾背景紋理中分離前景信息。
* 首先,對圖像進行快速傅里葉變換fft_generic以獲得其頻譜power_real。
* 然后,我們在頻譜中檢測干擾背景紋理對應的頻率峰值。
* 然后,建立一個濾除這些頻率的濾波器,並應用於頻譜。
* 通過對濾波后的頻譜進行反向傅里葉變換,得到去除背景紋理的濾波圖像。
8.消除周期性噪聲
包含周期性噪聲的圖像在傅里葉變換后的頻域圖像有多個中心(亮點),表現為高能量點。
消除這些不在頻域圖像中心的其他小亮點,就是在空間域中消除周期性噪聲。
read_image (zouqi,'zouqi.jpg') dev_open_window (0, 520, Width, Height, 'black', WindowHandle1) rgb1_to_gray (zouqi, zouqi) fft_image (zouqi, ImageFFT4) power_real (ImageFFT4, PowerSpectrum) *二項式濾波(配合功率譜算子) binomial_filter (PowerSpectrum, ImageSmooth, 9, 9) *閾值化獲得高能量點 threshold (ImageSmooth, Region, 100, 1800) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 100) union1 (SelectedRegions, RegionUnion) *獲得區域內圖像域 reduce_domain (ImageSmooth, RegionUnion, ImageReduced) *獲得局部極大值 local_max (ImageReduced, LocalMaxima1) *膨脹處理區域 dilation_circle (LocalMaxima1, RegionDilation, 9) *在傅里葉變換中繪制對應區域的灰度值為0 paint_region (RegionDilation, ImageFFT4, ImageFFTFiltered, 0, 'fill') *傅里葉逆轉換,獲得去除周期噪聲所在區域的頻率后的圖像 fft_generic (ImageFFTFiltered, ImageFiltered, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')