Halcon之典型的图像处理问题

本章展示了 HALCON 系统为寻找图像处理问题的解决方案所提供的强大功能。 一些典型问题与示例解决方案一起介绍。

1、对图像进行阈值处理

一些最常见的 HALCON 运算符序列可能如下所示:

HImage Image("E:/Images/Display/renwu1.jpg");
HRegion Threshold = Image.Threshold(0, 120);
HRegion ConnectedRegions = Threshold.Connection();
HRegion ResultingRegions = ConnectedRegions.SelectShape("area", "and", 10, 100000);

这个简短的程序执行以下操作:
• 选择所有像素的灰度值介于 0 和 120 之间。也可以使用等效调用:
HRegion Threshold = (Image <= 120);
• 执行连通分量分析。
• 仅选择大小至少为 10 像素的区域。 这一步可以看作是从图像中去除一些噪声的步骤。

2、 边缘检测

对于边缘检测,可以应用以下 HALCON/C++ 运算符序列:

HImage Image("file_xyz");
HImage Sobel = Image.SobelAmp("sum_abs", 3);
HRegion Max = Sobel.Threshold(30, 255); 
HRegion Edges = Max.Skeleton();

一些注意事项:

  • 在应用sobel 算子之前,首先对图像应用低通滤波器以抑制噪声可能很有用。
  • 除了sobel 算子,您还可以使用EdgesImage、PrewittAmp、RobinsonAmp、KirschAmp、Roberts、BandpassImage 或Laplace 等过滤器。
  • 必须根据数据适当地选择阈值(在我们的情况下30)。
  • 结果区域由骨架操作符细化。 这导致像素宽度为 1的区域。

3、 动态阈值

另一种检测边缘的方法是以下序列:

HImage Image("file_xyz");
HImage Mean = Image.MeanImage(11, 11);
HRegion Threshold = Image.DynThreshold(Mean, 5, "light");

再补充几点:

  • 过滤器掩码的大小(在我们的例子中为 11×11)与必须在图像中找到的对象的大小相关。 事实上,大小是成比例的。
  • 动态阈值选择比局部环境(mask 11×11)具有大于5(更亮)的正灰度值差的像素。

4 、Texture Transformation

纹理变换对于获得图像中的特定频带很有用。 因此,纹理过滤器检测图像中的特定结构。 在以下情况下,此结构取决于所选的过滤器; 16 个可用于操作员 TextureLaws。

HImage Image("file_xyz");
HImage TT = Image.TextureLaws("ee", 2, 5);
HImage Mean = TT.MeanImage(71, 71);
HRegion Reg = Mean.Threshold(30, 255);

  • 均值滤波器MeanImage 应用了较大的遮罩尺寸,以平滑“频率”图像。
  • 您还可以应用多个纹理变换并使用运算符 AddImage 和 MultImage 组合结果。

5、 消除小物体

形态算子 Opening 消除了小物体并平滑了区域的轮廓。

... segmentation(Image, &Seg);
	HRegion Circle(100, 100, 3.5);
	HRegion Res = Seg.Opening(Circle);

  • 术语segmentation() 是产生区域数组(Seg) 的任意分割步骤。
  • 遮罩的大小(在这种情况下,半径为 3.5)决定了生成对象的大小。
  • 您可以选择任意遮罩形状。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值