分水岭边缘提取和hough提取边缘
分水岭边缘提取
分水岭(Watershed)算法是一种常用于图像分割的技术,尤其适用于处理具有相似灰度值但又需要区分开的区域,例如在二值图像中将前景和背景分开或者在灰度图像中将不同对象分开。在Halcon中实现分水岭算法通常涉及以下几个步骤:
1.加载图片并对图片进行高斯平滑操作:
read_image (Image, 'particle')
gauss_filter (Image, ImageGauss, 9)


2.进行灰度值翻转
invert_image (ImageGauss, ImageInvert)

3.分水岭提取边缘
watersheds (ImageInvert, Basins, Watersheds)
* 参数2 盆地
* 参数3 Watersheds 分水岭


4.最后处理使用地形阈值分割
watersheds_threshold (ImageInvert, Basins1, 30)

Hough进行提取边缘
在使用Halcon进行图像处理时,霍夫变换(Hough Transform)是一种常用的技术,用于检测图像中的直线。霍夫变换特别适用于提取边缘,尤其是在边缘不明显或者噪声较多的情况下。下面将介绍如何在Halcon中利用hough变换来提取边缘。
1.加载图片并裁剪区域
read_image (Image, 'fabrik')
rectangle1_domain (Image, ImageReduced, 170, 280, 310, 360)


2.使用sobel_dir提取一个带方向的边缘图
sobel_dir (ImageReduced, EdgeAmplitude, EdgeDirection, 'sum_abs', 3)


3.设置颜色、过滤阈值并裁剪出来带方向图片
dev_set_color ('red')
threshold (EdgeAmplitude, Region, 55, 255)
reduce_domain (EdgeDirection, Region, ImageReduced1)


4.使用hough提取边缘
hough_lines_dir (ImageReduced1, HoughImage, Lines, 4, 2, 'mean', 3, 25, 5, 5, 'true', Angle, Dist)


hough参数介绍:
- 参数1 EdgeDirectionReduced(输入参数):这是一个单通道图像,表示边缘的方向。通常由边缘检测算子(如 sobel_dir 或 edges_dir)生成。
- 参数2 HoughImage(输出参数)
- 参数3 Lines(输出参数):输出检测到的直线,以 [StartRow, StartCol, EndRow, EndCol] 的形式表示每条线的起点和终点坐标。
- 参数4 4(输入参数):Hough 变换的 Rho 分辨率(像素单位):决定霍夫空间的距离分辨率,即直线到原点的距离步长。
- 参数5 2(输入参数): Hough 变换的 Theta 分辨率(角度单位):决定霍夫空间的角度分辨率,即角度步长(通常以度为单位)。
- 参数6 'mean'(输入参数): 边缘方向计算模式: 'mean':使用边缘方向的平均值。'all':考虑所有可能的方向。
- 参数7 3(输入参数): 平滑窗口大小:用于平滑霍夫空间,减少噪声影响。
- 参数8 25(输入参数): 最小投票数(阈值):霍夫空间中,只有投票数超过该值的直线才会被检测出来。值越大,检测到的直线越少(但更可靠)。
- 参数9 5(输入参数):线段之间的最小角度;低于此值,将合并一条线
- 参数10 5(输入参数): 最大线间隙(像素):允许的线段之间的最大间隙,超过此间隙的两条线段不会被合并为同一条直线。
- 参数12 'true'(输入参数):是否考虑边缘方向:'true':仅检测与边缘方向一致的直线。 'false':忽略边缘方向,检测所有可能的直线。
- 参数13 Angle(输出参数): 输出检测到的直线的角度(相对于图像坐标系)。
- 参数14 Dist(输出参数):输出检测到的直线到图像原点(通常是左上角)的距离(像素单位)。
5.绘制霍夫变换提取直线
gen_region_hline (Lines, Angle, Dist)

最终结果如下:
dev_display (Image)
dev_set_draw ('margin')
dev_display (Lines)