霍夫变换可以用来识别几何形状。如圆,随圆,直线等等
*读取一张图像
read_image (Image, 'D:/BaiduNetdiskDownload/026Halcon视频资料学习/3.Halcon 视频教程/视频/Halcon视频配套资料/Halcon算子视频配套资料/根据霍夫变换在图像中寻找直线/矩形')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*剪切指定矩形的图像
*将图像的域(ROI)缩小到矩形。
*Image 输入的图像
*ImageReduced 剪切后输出的区域
*Row1, Column1 指定矩形左上角坐标
*Row2, Column2 指定矩形右下角坐标
rectangle1_domain (Image, ImageReduced, 76, 120.938, 464.875, 966.813)
* 寻找图像中矩形的边缘,检测边缘(幅度)
*ImageReduced 输入参数,在哪里找矩形
*EdgeAmplitude 输出参数 返回找到的矩形
*FilterType 滤波器方式 默认值:‘sum_abs’
*值列表:‘sum_abs’,‘sum_abs_binomial’,‘sum_sqrt’,‘sum_sqrt_binomial’,‘thin_max_abs’,‘thin_max_abs_binomial’,‘thin_sum_abs’,‘thin_sum_abs_binomial’,‘x’,‘x_binomial’,‘y’,'y_binomial “
*原文链接:https://blog.csdn.net/WarGames_dc/article/details/96270252
*Size 滤波掩膜的大小,默认值:3,值列表:3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
sobel_amp (ImageReduced, EdgeAmplitude, 'thin_sum_abs', 3)
* 设置输出对象颜色
dev_set_color ('red')
*对上面获取的边缘图像进行阈值操作
*全局阈值,固定阈值
threshold (EdgeAmplitude, Region, 10, 255)
* 对阈值后的区域进行连通处理
connection (Region, ConnectedRegions)
*根据面积过滤出图像中 外矩形区域
*选择区域 根据面试选择了2500, 99999范围的矩形
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 2500, 99999)
*霍夫变换来寻找区域中的直线
*借助Hough变换检测边缘图像中的线条
*参数说明
*RegionIn 输入参数 要检测线条的区域,二值化边缘图像
*AngleResolution 调整角度区域的分辨率,角度的步进,步进大小。 默认值:4 值列表:1,2,4,8
*Threshold 霍夫图像中的阈值,要寻找的直线的阈值。 默认值:100 典型值范围:2≤阈值
*AngleGap 霍夫图像中两个最大值的最小距离(方向:角度)默认值:5 典型值范围:0≤AngarGap
*DistGap 霍夫图像中两个最大值的最小距离(方向:距离)默认值:5 典型值范围:0≤DistGap
*Angle (输出参数)检测到的线的角度(以弧度表示)典型值范围:-1.5707963≤角度≤3.1415927
*Dist (输出参数)检测到的线与原点的距离 元素数量:Dist == Angle 典型值范围:0≤Dist
hough_lines (SelectedRegions, 4, 50, 5, 5, Angle, Dist)
*设置输出对象的颜色
dev_set_color ('blue')
*将直线转换为区域
*绘制霍夫变换提取直线
*将霍夫变换提取直线以普通形式描述的输入行存储为区域
*参数说明
*Regions (输出)创建的区域
*Angle (输入)霍夫变换输出的角度
*Dist (输入)线与原点的距离
gen_region_hline (Regions, Angle, Dist)
* 根据方向特征来过滤想要的直线
*
select_shape (Regions, SelectedRegions1, 'orientation', 'and', 1.5, 1.6)
*上下两行线 是平行线,所以值X轴的角度在0-0.1之间
select_shape (Regions, SelectedRegions2, 'orientation', 'and', 0, 0.1)
* 显示图像和结果直线
dev_display (Image)
dev_display (SelectedRegions1)
dev_display (SelectedRegions2)