* 关闭所有窗口
dev_close_window ()
* 1. 采集图像
read_image (Image, 'D:/训练照片/6.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
* 根据具体宽高,优化该图像的傅里叶变换速度(有此函数)
optimize_rft_speed (Width, Height, 'standard')
*修改以下两个值调整滤波器的带宽
Sigma1 := 15.0
Sigma2 := 3.0
* 形成高斯滤波器
gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'dc_center', Width, Height)
gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'dc_center', Width, Height)
* 第一个滤波器减去第二个滤波器(形成带通滤波器)
sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0)
* 2. 进行频域滤波
rgb1_to_gray (Image, Image)
* 转到频域
fft_generic (Image, ImageFFT, 'to_freq', -1, 'none', 'dc_center', 'complex')
* 滤波
convol_fft (ImageFFT, Filter, ImageConvol)
* 返回空间域(实部)
fft_generic (ImageConvol, ImageFiltered, 'from_freq', 1, 'n', 'dc_center', 'real')
* 3. 空间域上的blob图像分割
* 原图矩形内的灰度值范围(max - min)作为输出图像像素值,扩大了亮的部分
*调整gray_range_rect的最后两个参数,数值小会检测不到
gray_range_rect (ImageFiltered, ImageResult, 20, 20)
* 获得图像最大灰度值和最小灰度值
min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)
* 二值化提取( 5.55是经验值,在调试中得到)
threshold (ImageResult, RegionDynThresh, max([5.55,Max * 0.8]), 255)
select_shape (RegionDynThresh, SelectedRegions, 'area', 'and', 1, 99999)
connection (SelectedRegions, ConnectedRegions)
* 合并相邻的连通区域,避免一个凸点被分割成多个区域
dilation_circle (ConnectedRegions, DilatedRegions, 5) // 适当调整膨胀半径
connection (DilatedRegions, MergedRegions)
* 显示原始图像
dev_display (Image)
* 统计连通区域数量
count_obj (MergedRegions, Number)
* 遍历每个连通区域,计算外接圆并绘制
for Index1 := 1 to Number by 1
select_obj (MergedRegions, ObjectSelected, Index1)
* 计算连通区域的外接圆参数
smallest_circle (ObjectSelected, Row, Column, Radius)
* 设置绘制颜色
dev_set_color ('green') // 你可以选择其他颜色
* 绘制外接圆
gen_circle (Circle, Row, Column, Radius)
dev_display (Circle)
endfor
haclon检测表面凸起
于 2025-02-27 17:32:54 首次发布