失败笔记本--HALCON--001--202406

失败笔记本-HALCON篇-001

项目场景:

这里是正式学习HALCON的第一课,从安装HALCON到打开第一张图片遇到了各种各样的问题。在失败笔记本系列文章中将会记录这些问题的出现原因和解决方案。
参考视频:halcon例子:实现基恩士视觉的sobel瑕疵检测
基恩士源连接:预处理功能介绍
在这里插入图片描述


1.安装后出现掉License

描述:在安装软件后,下载最新License文件拷贝到HALCON更目录下License文件夹,启动软件仍然报错:Halcon许可错误(Hdevelop错误代码:21010)

原因分析:

回忆安装过程中存在失败后重新安装的步骤,在重新安装时更改了安装路径。这一步操作导致系统环境变量和实际安装文件目录的不匹配,就找不到保存好的License了。

参考大神回答解决:关于“Halcon许可错误(Hdevelop错误代码:21010)Halcon错误#2036”全网最全最有效解决方法

解决方案:

修改环境变量为正确的路径:
手动配置环境:根据安装路径配置好后确认即可


2.打开JPG格式的图片报错

描述:在基恩士官网将要处理的缺陷图保存下来,保存格式为jpg格式。新建HALCON程序,使用read_image()算子打开图片报错:JPEG:Error in input image(HALCON错误代码5576)

原因分析:

最开始怀疑是图片路径问题,但是更改绝对路径后仍然报错。查找资料得知这可能是图片格式的错误导致的,图片的格式应该是不对的。

参考大神回答解决:[HALCON文档] Halcon使用read_image读取图片错误?

解决方案:

更改图片格式为png格式后,成功打开。


3.算法学习和细节调整

成功打开图片,万里长征迈出了第一步!终于可以开始算法的学习了,先梳理一遍算法结构:
打开图片–转换灰度–Sobel–二值化–膨胀放大
再跟着大佬视频教程一步一步来:

  • 首先就是打开图片和转换颜色空间为灰度:
read_image (Image, '1.png')
rgb1_to_gray (Image, GrayImage)
  • 转换之后呢,可以打开灰度直方图观察是否可以用阈值调节
    紧接着就是使用Sobel算子:
sobel_amp (GrayImage, EdgeAmplitude, 'sum_abs', 3)
scale_image_max (EdgeAmplitude, ImageScaleMax)

**sobel_amp()算子主要用于图像的边缘检测,作用是检测图像中的边缘和细节等灰度值变化剧烈的地方。
其第三个参数是滤波器类型,不同的滤波器类型会影响掩码的使用方式。常见的滤波器类型包括“sum_abs”、“sum_sqrt”、“x”和“y”。
其第四个参数是掩码大小,决定了滤波器的范围。较大的Size可以更好地检测粗边缘,而较小的Size则更适合检测细边缘。
参考链接:sobel_amp[HALCON算子参考手册]

scale_image_max()算子的作用呢是将图像的灰度值缩放到0-255范围内。具体来说,该算子计算原始图像灰度值的最小值和最大值,并将这些灰度值缩放到0-255的范围内,从而最大化图像的对比度和视觉效果。例如,在字符识别和缺陷检测等应用场景中,使用scale_image_max()可以改善图像的对比度,使字符或缺陷区域更加清晰。

  • 接下来就是二值化:
binary_threshold (ImageScaleMax, Region, 'smooth_histo', 'dark', UsedThreshold)
get_image_pointer1 (ImageScaleMax, Pointer, Type, Width, Height)
gen_rectangle1 (Rectangle, 0, 0, Height-5, Width-5)
difference (Rectangle, Region, RegionDifference)

binary_threshold()算子在Halcon图像处理中用于自动全局阈值分割。其主要作用是根据图像的灰度直方图自动确定一个全局阈值,并将图像分割为两个部分:亮区域和暗区域。
其第三个参数Method:阈值计算方法,目前提供两种方法:
max_separability:最大可分离性法,适用于灰度直方图有两个波峰的图像。
smooth_histo:平滑直方图法,同样适用于灰度直方图有两个波峰的图像。
使用两个不同参数的效果如下:
左图为最大可分离性法,右图为平滑直方图法

  • 观察右图平滑直方图法可以发现,需要进行一步腐蚀,后膨胀:
erosion_circle (RegionDifference, RegionErosion, 1)
dilation_circle (RegionErosion, RegionDilation, 2)
fill_up (RegionDilation, RegionFillUp)
  • 最后的效果如下:

最后效果

  • 最后是完整的代码:
read_image (Image, '1.png')
rgb1_to_gray (Image, GrayImage)

sobel_amp (GrayImage, EdgeAmplitude, 'sum_abs', 3)
scale_image_max (EdgeAmplitude, ImageScaleMax)

binary_threshold (ImageScaleMax, Region, 'smooth_histo', 'dark', UsedThreshold)
get_image_pointer1 (ImageScaleMax, Pointer, Type, Width, Height)
gen_rectangle1 (Rectangle, 0, 0, Height-5, Width-5)
difference (Rectangle, Region, RegionDifference)

erosion_circle (RegionDifference, RegionErosion, 1)
dilation_circle (RegionErosion, RegionDilation, 2)
fill_up (RegionDilation, RegionFillUp)

总结:

在001中,用到了以下算子:

  1. read_image()
  2. rgb1_to_gray()
  3. sobel_amp()
  4. binary_threshold()
  5. erosion_circle()
  6. dilation_circle()

遇到的主要问题还是对算子的效果作用不了解,这个需要积累经验,不知道在什么步骤需要用什么算子。另外就是体会到了大佬的成熟解决思路非常厉害,要多看多练。

  • 40
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值