この章では、私は単純にフーリエ変換が何であるかを、フーリエ変換の原理に入るのではなく、どのような役割を果たすことができる画像処理に変換で探すことにしました。
フーリエ変換します
私はこのコラムを見て:
https://zhuanlan.zhihu.com/p/19763358は、
周波数と時間ドメインを理解しています。
理論的にはビットフーリエ変換がそれを変換理解しています。
フーリエ変換は、あなたが興味の頻度でコンテンツをフィルタリングすることができ、変換します。
画面の表面HALCONの揚げするには余りにも熱い卵を実行している場合。。。私の指は少し暑いタッチします。
ハルコンfind_scratches_bandpass_fft学習ルーチンに従うことによって、この例では、平面不均一にスクライブを見つけることで、周波数領域でフィルタを作製することによって達成されます。
* This program shows how to detect defects (scratches) in
* an inhomogeneously illuminated surface by filtering in
* the frequency domain.
* First, a suitable bandpass filter is created. Then, the
* input image is fourier transformed and filtered in the
* frequency domain, so that high frequency information is
* enhanced. Finally, it is transformed back to the
* spatial domain and the enhanced defects are post-processed
* by morphology
* 这个程序演示了怎样通过在频率域过滤来找不均匀表面上的缺陷。
* 首先,创建一个合适的带通滤波器,
* 然后,对读取的图片做傅里叶变换并且在频率域上做滤波,哪些高频率的信息会得到增强。
* 最后,再将他变换回空间域,被增强的瑕疵通过形态学做后处理。
*
dev_update_off ()
dev_close_window ()
read_image (Image, 'surface_scratch')
* 图像在灰度上反转(灰度上的补集)
invert_image (Image, ImageInverted)
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)
*
* 最优化快速傅里叶变换的速度
* 这段代码被注释掉了,这是为什么呢?
* Optimize the speed of the fast fourier transform
* Message := 'Optimize the speed of the fast fourier transform.'
* 输出在图形窗口时这一行message换行了
* Message[1] := 'Please wait...'
* disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
* 最优化实数快速傅里叶变换的时间
* optimize_rft_speed (Width, Height, 'standard')
* disp_continue_message (WindowHandle, 'black', 'true')
* stop ()
*
* 通过在频率域过滤来增强划痕
* Enhance the scratches by filtering in the frequency domain
* 生成一个正弦波带通滤波器
* gen_sin_bandpass(ImageFilter, 输出值,生成的滤波器
* Frequency, 频率,0-1
* Norm, 因子归一化方式:‘n'或者'none'
* Mode, 决定了过滤器的"DC terms"在哪里或者过滤器是否可以在实数快速傅里叶变换中使用,针对之后不同的变换,需要做不同的配置。使用rft_generic时,需要配置为'rft'
* Width, 图片的宽
* Height) 图片的高
* 之后往往可能跟随着rtf_generic
gen_sin_bandpass (ImageBandpass, 0.4, 'none', 'rft', Width, Height)
* 对图像做实数快速傅里叶变换
* rft_generic(Image, 图像
* ImageFFT, 输出值,变换后的图像
* Direction, 正向变换(to_freq)还是反向变换(from_freq)
* Norm, 因子归一化方式:sqrt,n,none,正反向变换时应使用一致的归一化方式
* ResultType, 输出图像的类型
* Width) 需要最优化时间的图像宽度
* 这里对反转后的图像做了一次傅里叶变换
rft_generic (ImageInverted, ImageFFT, 'to_freq', 'none', 'complex', Width)
* 根据一个滤波器对图像在频率域做卷积
* 这里对傅里叶变换后的图像用上面生成的正弦波滤波器做了一次卷积
convol_fft (ImageFFT, ImageBandpass, ImageConvol)
* 反向傅里叶变换
rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width)
*
* Segment the scratches by using morphology
* 通过形态学分离出划痕
* 过滤出灰度在5-255的区域
threshold (Lines, Region, 5, 255)
* 连通
connection (Region, ConnectedRegions)
* 选择面积在5-5000的区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 5000)
* 使用一个半径为5.5的圆形结构元做膨胀
dilation_circle (SelectedRegions, RegionDilation, 5.5)
* 将这些区域连接起来
union1 (RegionDilation, RegionUnion)
* 缩小图像域
reduce_domain (Image, RegionUnion, ImageReduced)
* 检测线条及宽度
lines_gauss (ImageReduced, LinesXLD, 0.8, 3, 5, 'dark', 'false', 'bar-shaped', 'false')
* 把在一条线上的轮廓连起来
union_collinear_contours_xld (LinesXLD, UnionContours, 40, 3, 3, 0.2, 'attr_keep')
* 根据形状特征筛选线条轮廓,轮廓总长度在15-1000之间的
select_shape_xld (UnionContours, SelectedXLD, 'contlength', 'and', 15, 1000)
* 通过XLD轮廓创建区域
gen_region_contour_xld (SelectedXLD, RegionXLD, 'filled')
union1 (RegionXLD, RegionUnion)
* 膨胀,把有划痕的区域圈出来
dilation_circle (RegionUnion, RegionScratches, 10.5)
*
* Display the results
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_colored (12)
dev_display (Image)
dev_display (RegionScratches)
dilation_circleオペレータ円半径の十分に大きな面積が機能を行うことができ
ハルコンの画像のいくつかのタイプ
- バイト
- コンプレックス
- リアル
- XLD、これは画像の種類ではありません
new演算子ハルコンの概要の使用
- gen_sin_bandpass(のImageFilter、出力値が生成されたフィルタの
周波数、周波数、0-1
ノーム、正規化された方法で因子:「N」または「なし」
モードは、「DC用語」フィルタフィルタかどうかを決定します「RFT」として構成され、形質転換のための異なった後、異なる構成がrft_genericを使用するときに行う必要があり、変換実高速フーリエ変換に使用することができる
幅、画像の幅
、高身長)画像の
正弦波バンドパスフィルタを生成しますデバイス - rft_generic(イメージ、イメージ
ImageFFT、変換された画像の出力値
順方向、(to_freq)を変換または逆変換(from_freq)
ノーム、正規化された方法で因子:SQRT、nは、どれも、変換を逆に使用されるべきですやり方一貫した正規
resultTypeと、出力画像の種類
幅)は、画像の幅を最適化するために時間が必要な
本当の高速フーリエ変換を行うために、画像のを - reduce_domain(画像、画像
領域が所定の領域
ImageReduced)縮小画像領域の出力値
ドメイン縮小画像は、新しいドメインは、元画像所与の交差領域の領域であり、従って、新しいドメインであります元のドメインのサブセット - line_gaussは(イメージ、イメージ
ライン、出力値、行、サブピクセル精度XLD輪郭
シグマ、ガウス平滑度、0.7〜20、より大きな滑らかな
低閾値は、オフライン
高、閾値は、オンライン
LightDarkは、明るい又は暗い抽出しますライン:ライト、ダーク
ExtractWidth、それぞれの幅として抽出されたかどうか:trueに、falseに
非「none」に設定した場合LineModel、それは非対称のライン印象正しい位置と線の幅を補正:バー状、gaussuan、どれも 、 放物線
真、偽:接合するとき増加が抽出できないかどうかをCompleteJunctions)
線幅の検出と
滑らか、高しきい値および低しきい値を小さくします。
サブピクセル:二つの画素間の小さいもの