【傅立叶变换来确定网格的旋转角度】

该示例详细介绍了如何通过傅立叶变换来确定图像中网格的旋转角度。首先,创建一个无旋转的参考图像的边缘方向频谱。接着,对比任意旋转的网格图像的频谱与参考频谱,通过相关性分析来确定旋转角度。该过程涉及计算边缘方向的直方图、FFT变换以及找到最佳相关性的角度。
摘要由CSDN通过智能技术生成

文章目录


*此示例显示了如何使用傅立叶变换来确定网格的旋转角度。
*首先,参考图像(旋转角度0°)用于创建边缘方向的参考光谱。
*通过将任意旋转栅格的边缘方向的频谱与参考频谱相关联,可以确定栅格的旋转角度。

*此示例显示了如何使用傅立叶变换来确定网格的旋转角度。
*首先,参考图像(旋转角度0°)用于创建边缘方向的参考光谱。
*通过将任意旋转栅格的边缘方向的频谱与参考频谱相关联,可以确定栅格的旋转角度。

dev_close_window ()
dev_update_off ()
read_image (ImagePattern, 'grid/grid_01')
get_image_size (ImagePattern, Width, Height)
Scale := .7
HistoBorder := .15
dev_open_window (0, 0, Width * Scale, Height * Scale, 'black', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_open_window (0, (Width * Scale) + 12, Width * Scale, Height * Scale, 'white', WindowHisto)
set_display_font (WindowHisto, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
Row := gen_tuple_const(180,0)
Column := [0:179]
***计算参考方向的直方图
optimize_fft_speed (180, 1, 'standard')
compute_edge_direction_histogram (ImagePattern, ImageDirRef, HistogramDirRef)
rft_generic (ImageDirRef, ImageFFTRef, 'to_freq', 'none', 'complex', 180)
dev_set_window (WindowHandle)
dev_display (ImagePattern)
disp_message (WindowHandle, 'Reference image', 'window', 10, 10, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
dev_set_window (WindowHisto)
dev_clear_window ()
ValueYMax := max(HistogramDirRef)
dev_set_part (0, 0, Height - 1, Width - 1)
plot_histo_scale (HistogramDirRef, WindowHisto, 'Angle [°]', 0, 359, 0, ValueYMax, 'black', 'blue', HistoBorder)
disp_message (WindowHisto, 'Distribution of edge orientation', 'window', 12, 70, 'black', 'false')
disp_message (WindowHisto, 'Reference image', 'window', 50, 280, 'black', 'false')
dev_set_color ('blue')
disp_line (WindowHisto, 85, 355, 85, 390)
stop ()
***确定要处理的图像的方向
NumImages := 7
for Index := 1 to 7 by 1
    read_image (Image, 'grid/grid_' + Index$'.2d')
***旋转物体的FFT图像
    compute_edge_direction_histogram (Image, ImageTest, HistogramDirTest)
    rft_generic (ImageTest, ImageFFTTest, 'to_freq', 'none', 'complex', 180)
***旋转物体的FFT图像与参考FFT的比较
    correlation_fft (ImageFFTRef, ImageFFTTest, ImageCorrelation)
    rft_generic (ImageCorrelation, ImageFFT, 'from_freq', 'none', 'real', 180)
    get_grayval (ImageFFT, Row, Column, Grayval)
    create_funct_1d_array ([Grayval[179],Grayval,Grayval[0]], Function)
***找到目标和参考FFT之间的最佳相关性
    determine_max_correlation (Function, Angle)
***显示结果
    dev_set_window (WindowHandle)
    dev_display (Image)
    disp_message (WindowHandle, 'Grid is rotated by ' + Angle$'.2f' + '°', 'window', 10, 10, 'black', 'true')
    dev_set_window (WindowHisto)
    dev_clear_window ()
    ValueYMax := max([HistogramDirRef,HistogramDirTest])
    dev_set_part (0, 0, Height - 1, Width - 1)
    plot_histo_scale (HistogramDirRef, WindowHisto, '', 0, 359, 0, ValueYMax, 'black', 'blue', HistoBorder)
    plot_histo_scale (HistogramDirTest, WindowHisto, 'Angle [°]', 0, 359, 0, ValueYMax, 'black', 'red', HistoBorder)
    disp_message (WindowHisto, 'Distribution of edge orientation', 'window', 12, 70, 'black', 'false')
    disp_message (WindowHisto, 'Reference image', 'window', 50, 280, 'black', 'false')
    disp_message (WindowHisto, 'Current image', 'window', 65, 280, 'black', 'false')
    dev_set_color ('blue')
    disp_line (WindowHisto, 85, 355, 85, 390)
    dev_set_color ('red')
    disp_line (WindowHisto, 105, 355, 105, 390)
    if (Index != NumImages)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【网络星空】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值