赞
踩
本程序演示了如何通过频域滤波检测非均匀照明表面的缺陷(划痕)。
首先,创建一个合适的带通滤波器。然后对输入图像进行傅里叶变换,在频域中进行滤波,增强高频信息。最后将其转化为空间域,对增强后的缺陷进行形态学后处理。
* 关闭更新 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) * * 优化快速傅里叶变换的速度 * Message := 'Optimize the speed of the fast fourier transform.' * 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 () * * 在频率域通过滤波实现图像划伤增强 * 生成正弦带通滤波器 gen_sin_bandpass (ImageBandpass, 0.4, 'none', 'rft', Width, Height) * 快速傅里叶变换 rft_generic (ImageInverted, ImageFFT, 'to_freq', 'none', 'complex', Width) * 图像卷积 convol_fft (ImageFFT, ImageBandpass, ImageConvol) * 快速傅里叶变换,转换图像到空间域及byte类型 rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width) * * 通过形态学实现划伤分割 threshold (Lines, Region, 5, 255) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 5000) 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') select_shape_xld (UnionContours, SelectedXLD, 'contlength', 'and', 15, 1000) 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)
invert_image(Image : ImageInvert : : )对图像进行反转
gen_sin_bandpass( : ImageFilter : Frequency, Norm, Mode, Width, Height : )生成正弦带通滤波器
该函数生成一个在频率域具有旋转不变性的正弦带通滤波器。该sin函数的最大值由Frequency决定。Norm指定滤波归一化的参数,以实现滤波效率的最大化。fft_generic和Norm = ‘n’ 的应用,FFT将避免归一化。Mode用来确定滤波器中的DC项或者是否应该在实数值FFT中应用滤波。若应用 fft_generic ,‘dc_edge’ 将有更好的效率。若应用fft_image 和fft_image_inv进行滤波,则必须应用Norm = ‘none’ 和Mode =‘dc_center’ 。若应用rft_generic ,则Mode必须为Mode = ‘rft’。滤波值,对于DC项始终为0,在sin函数值达到Frequency前一直增加,当高于Frequency时下降。sin函数值范围为0到pi。其他点都设置为0.(该段为自己翻译,若有误或理解不透,请留言指正!谢谢
connection(Region : ConnectedRegions : : )计算区域的连通域
例:
read_image(Image,'clip')
dev_set_colored(12)
threshold(Image,Dark,0,150)
count_obj(Dark,NumThresholded)
dev_display (Dark)
connection(Dark,ConnectedRegions)
count_obj(ConnectedRegions,NumConnected)
dev_display (ConnectedRegions)
lines_gauss(Image : Lines : Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions : )计算直线及其宽度
union_collinear_contours_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, MaxShift, MaxAngle, Mode : )合并近似共线的直线
select_shape_xld(XLD : SelectedXLD : Features, Operation, Min, Max : )根据特征选取亚像素进度的轮廓
gen_region_contour_xld(Contour : Region : Mode : )由亚像素精度的轮廓生成区域
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。