halcon学习实战系列—如何提取牛奶包装盒上的吸管之Contour截取算子crop_contours_xld_region(三)

本文介绍了如何使用Halcon的动态阈值和滞后阈值方法改进Blob预选取区域,以更准确地提取牛奶包装盒上的吸管。通过分析dyn_threshold算子和hysteresis_threshold算子的效果,讨论了两种方法的优缺点,并提出尝试使用笔画宽度分割(SWT)算法进一步提升分割效果。

本着精益求精的态度,觉得牛奶吸管提取算法做的不够完善,对于Contour提取和Contour截取算子crop_contours_xld_region还凑合,但是对于前面的Blob预选取区域不很满意,这节完善它

 

一、Blob预选取区域之动态阈值方法

dyn_threshold(OrigImageThresholdImage : RegionDynThresh : OffsetLightDark : )

下面简单描述一下局部动态阈值的Description

1、OrigImage最好是小平滑图像,这样可以使RegionDynThresh更圆滑,当然会损失精度

2、ThresholdImage是大平滑的图像,平滑的基元大小一般为分割对象直径的两倍,吸管宽度为22个像素,那么Mask我们选择44左右,这里选择50

3、O

### Halcon中使用 `crop_domain` 后的仿射变换操作方法及实现步骤 在Halcon中,`crop_domain` 是一种用于裁剪图像感兴趣区域(ROI)的操作。当对局部图像进行复杂处理后,可能需要将结果还原到原始图像上并执行进一步的仿射变换。以下详细说明如何实现这一过程: #### 1. 使用 `crop_domain` 裁剪图像 首先,通过 `crop_domain` 函数将图像裁剪到特定的感兴趣区域(ROI)。此操作会限制后续处理仅在指定区域内进行,从而提高效率[^3]。 ```hdevelop * 输入图像和ROI read_image(Image, 'path_to_image') gen_circle(Region, 200, 200, 50) * 生成一个圆形ROI crop_domain(Image, Region, ImageCropped) ``` #### 2. 在裁剪后的图像上执行处理 在裁剪后的图像上执行所需的图像处理操作,例如边缘检测、模板匹配等。这些操作的结果通常以区域或轮廓的形式返回。 ```hdevelop * 示例:在裁剪后的图像上检测边缘 edges_sub_pix(ImageCropped, Edges, 'canny', 1, 20, 40) ``` #### 3. 将结果还原到原始图像 处理完成后,需将结果(如边缘、区域等)映射回原始图像坐标系。这一步可通过 `affine_trans_region` 或其他相关函数完成[^2]。 ```hdevelop * 还原边缘到原始图像 reduce_domain(Image, Region, ImageReduced) dev_display(ImageReduced) dev_display(Edges) ``` #### 4. 生成仿射变换矩阵 为了对还原后的结果进行仿射变换,需要先生成一个合适的变换矩阵 `HomMat2D`。可以使用 `hom_mat2d_identity` 创建初始矩阵,并结合旋转、缩放和平移等操作调整矩阵参数[^1]。 ```hdevelop * 创建初始变换矩阵 hom_mat2d_identity(HomMat2DIdentity) * 添加平移 hom_mat2d_translate(HomMat2DIdentity, 50, 50, HomMat2DTranslate) * 添加旋转 hom_mat2d_rotate(HomMat2DTranslate, rad(45), 200, 200, HomMat2DRotate) ``` #### 5. 对图像、区域或轮廓执行仿射变换 根据实际需,选择适当的函数对图像、区域或轮廓进行仿射变换。以下是几种常见操作的示例代码: - **对图像进行仿射变换**: ```hdevelop affine_trans_image(Image, ImageAffinTrans, HomMat2DRotate, 'constant', 'true') dev_display(ImageAffinTrans) ``` - **对区域进行仿射变换**: ```hdevelop affine_trans_region(Edges, EdgesTransformed, HomMat2DRotate, 'nearest_neighbor') dev_display(EdgesTransformed) ``` - **对XLD轮廓进行仿射变换**: ```hdevelop affine_trans_contour_xld(Contours, ContoursTransformed, HomMat2DRotate) dev_display(ContoursTransformed) ``` #### 6. 注意事项 - 如果仿射变换后图像超出边界,建议将 `AdaptImageSize` 参数设置为 `'true'`,以确保整个变换结果可见。 - 当旋转角度超过90度时,可能需要对角度进行修正,避免图像翻转[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷棵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值