Halcon 傅里葉變換


計算一個與矩形31x31濾波器相同大小的圓形均值濾波器。為此,我們必須將圓的直徑設置為31*sqrt(4/pi) = 34.97975。

 

* 由於相位相關是循環的,負平移會導致圖像的右下方出現峰值。
* 如果平移在一個或兩個方向上接近於0,那么local_max_sub_pix中的插值表達式將因此訪問錯誤的值,因為它的邊界處理(不是循環的)。
* 為了獲得在所有情況下都正確的平移,我們周期性地移動相位相關,使零平移對應於圖像的中心。
* 然后修改local_max_sub_pix返回的坐標。
* 最后計算出來的結果才是平移的正確值。

RowOffset := Height / 2
ColumnOffset := Width / 2

get_image_size (ImagePhaseCorrelation, Width, Height)
concat_obj (ImagePhaseCorrelation, ImagePhaseCorrelation, Images2)
concat_obj (Images2, Images2, Images)
tile_images_offset (Images, ImageCyclicShift, [RowOffset - Height,RowOffset - Height,Height / 2,Height / 2], [ColumnOffset- Width,Width / 2,ColumnOffset- Width,Width / 2], [-1,-1,-1,-1], [-1,-1,-1,-1], [-1,-1,-1,-1], [-1,-1,-1,-1], Width, Height)

* 最終計算出來的水平偏移值

Row := RowShifted - RowOffset
Column := ColumnShifted - ColumnOffset

 

 

 

 

 

 

 

*傅里葉變換是將空間域圖像轉換為頻域圖像
*圖像處理作用:
*1.圖像增強與圖像去噪,絕對大部分噪音都是圖像高頻分量,通過低通濾波器可以濾除高頻——噪聲
*2.邊緣檢測——提取圖像高頻分量
*3.圖像壓縮可以直接通過傅里葉系數來壓縮數據(大部分能量分布在低頻譜段,對壓縮傳輸有利,運算次數減少,節省時間)
dev_close_window ()
read_image(lena,'E:/MyHalcon/lena.jpg')
dev_open_window_fit_image (lena, 0, 0, -1, -1, WindowHandle)
dev_display(lena)

*快速傅里葉變換空間域圖到頻域圖
fft_image (lena, ImageFFT)
*Direction:to_freq空間域到頻域,from_freq頻域到空間域
*Exponent:指數符號 一般向前變換采用-1,向后變換采用1
*Mode:‘dc_center’頻域圖中心頻率為0,‘dc_edge’頻域圖邊角點頻率為0
fft_generic (lena, ImageFFT, 'to_freq', -1, 'n', 'dc_center', 'complex')

*快速傅里葉逆變換頻域圖到空間域圖
fft_image_inv (ImageFFT, ImageFFTInv)
fft_generic (ImageFFT, ImageFFTInv, 'from_freq', 1,'sqrt', 'dc_center', 'complex')

*返回復雜圖像的功率譜
power_real (ImageFFT, ImageResult)

*生成理想的低通濾波器圖像,Frequency決定白色橢圓區域大小(行方向直徑=Frequency*圖像高 列方向直徑=Frequency*圖像寬)
gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', 512, 512)
*生成理想的高通濾波器圖像
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', 512, 512)

*頻域里卷積圖像
convol_fft (ImageFFT, ImageHighpass, ImageConvol)

*檢測圖像中所有局部最大值(鄰域最大值,與聯通數有關)
local_max (lena, LocalMaxima)

*使用二項式濾波光滑處理圖像,與高斯濾波相近但速度更快
binomial_filter (lena, ImageBinomial, 5, 5)

*提取圖像的高頻部分,效果圖就是原圖減去平滑處理的圖
highpass_image (lena, Highpass, 3, 3)

*使用濾波對圖像進行卷積,FilterMask可以自己建模板
convol_image (lena, ImageResult1, 'sobel', 'mirrored')


************以下有關低通濾波*************
dev_clear_window ()
read_image(lena,'E:/myhalcon/lena.jpg')
rgb1_to_gray (lena, lena)
get_image_size (lena, Width, Height)

gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', Width, Height)
fft_generic (lena, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
*低通濾波卷積,消除高頻區域,獲得低頻區域
convol_fft (ImageFFT, ImageLowpass, ImageConvol)
*傅里葉逆轉換,相當於光滑處理效果
fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')

***********以下有關高通濾波
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', 512, 512)
fft_generic (lena, ImageFFT2, 'to_freq', 1, 'sqrt', 'dc_center', 'complex')
convol_fft (ImageFFT2, ImageHighpass, ImageConvol1)
fft_generic (ImageConvol1, ImageFFT3, 'from_freq', -1, 'sqrt', 'dc_center', 'byte')

*提取高頻部分
highpass_image (lena, Highpass1, 19, 19)
*原圖減去高通濾波就是平滑灰度圖結果
sub_image (lena, Highpass1, ImageSub, 1, 128)

mean_image (lena, ImageMean, 19, 19)
*原圖減去平滑就是高通濾波后灰度圖結果
sub_image(lena,ImageMean,ImageSubm,1,128)


stop()
*********消除周期性噪聲
* 包含周期性噪聲的圖像在傅里葉變換后的頻域圖像有多個中心(亮點),表現為高能量點
* 消除這些不在頻域圖像中心的其他小亮點,就是在空間域中消除周期性噪聲
read_image (zouqi,'E:/myhalcon/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')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM