设置首页收藏本站
开启左侧

halcon低对比度污点图像处理,这个方法不太好

[复制链接]
bjlcx125 发表于 2025-11-11 15:55:53 | 显示全部楼层 |阅读模式
halcon低对比度污点图像处理。这个方法不太好,结果不准,有没有好一点的方法?求大神帮忙看下

结果

结果

原图

原图

代码

代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
大凡光学,专注标定板提供
y6f7ghuijop 发表于 2025-11-12 10:01:21 | 显示全部楼层
如何添加预处理让图中9个类似椭圆的轮廓更清晰,求指导
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
moonwell0106 发表于 2025-11-12 10:05:43 | 显示全部楼层
  1. read_image (Image10, 'E:/download/10.png')
  2. rgb1_to_gray (Image10, GrayImage)

  3. texture_laws(GrayImage, ImageTexture, 'ss', 1, 7)

  4. median_image (ImageTexture, ImageMedian, 'circle', 21, 'mirrored')
  5. watersheds_threshold(ImageMedian, Basins, 20)
  6. cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)
  7. Mask := Energy [<=] 0.03
  8. select_mask_obj (Basins, Defects, Mask)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| bjlcx125 发表于 2025-11-13 08:28:06 | 显示全部楼层
moonwell0106 发表于 2025-11-12 10:05
read_image (Image10, 'E:/download/10.png')
rgb1_to_gray (Image10, GrayImage)

确实比我的简单
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
holybang 发表于 2025-11-14 10:07:18 | 显示全部楼层
  1. * 1. 读取彩色图片
  2. read_image (Image, '你的图.png')

  3. * 2. 简单降噪一下并转换为HSV颜色空间并提取亮度通道
  4. gauss_filter (Image, ImageGaussed, 5)
  5. decompose3(ImageGaussed, ImageR, ImageG, ImageB)
  6. trans_from_rgb (ImageB, ImageG, ImageB, ImageH, ImageS, ImageV, 'cielab')

  7. * 3. 获得频谱图
  8. fft_generic (ImageH, VFFT, 'to_freq', -1, 'none', 'dc_center', 'complex')
  9. power_ln (VFFT, VFFT_ln)

  10. * 4. 将频谱图最大最小归一化到0-255,方便后续用图像处理算法处理它
  11. get_image_size(Image, Width, Height)
  12. gen_rectangle1(ImageEntireReg, 0, 0, Width, Height)
  13. min_max_gray(ImageEntireReg, VFFT_ln, 0, Min, Max, Range)
  14. scale_image_range(VFFT_ln, VFFT_ln_scaled, Min, Max)
  15. convert_image_type (VFFT_ln_scaled, VFFT_ln_8u, 'byte')

  16. * 5. 对频谱图简单降噪一下
  17. gauss_filter (VFFT_ln_8u, GaussFiltered, 3)

  18. * 6. 自适应阈值处理,得到频谱局部极值点的region,因为图中要增强的网格特征是一种重复纹理,所以频谱图上一定会表现为距离相等的一些极值点
  19. local_threshold (GaussFiltered, img_thresh, 'adapted_std_deviation', 'light', ['mask_size', 'scale'], [11, 0.05])

  20. * 7. 对频谱极值点区域进行形态学膨胀
  21. dilation_circle (img_thresh, Dilated, 1.5)

  22. * 8. 将区域转换成real类型的蒙版图像,因为后续要将区域作为频域滤波器使用,所以也得做最大最小归一化
  23. region_to_bin(Dilated, ImageMaskFiltered, 255, 0, Width, Height)
  24. invert_image(ImageMaskFiltered, ImageMaskFiltered)
  25. convert_image_type(ImageMaskFiltered, ImageMaskFiltered, 'real')
  26. scale_image(ImageMaskFiltered, ImageMaskFiltered, 1.0/255, 0)

  27. * 9. 应用自定义蒙版图像作为滤波器
  28. convol_fft (VFFT, ImageMaskFiltered, ImageComplex)

  29. * 10. 逆傅里叶变换得到消除芯片之后的亮度通道
  30. fft_generic(ImageComplex, ImageResult, 'from_freq', 1, 'none', 'dc_center', 'real')

  31. * 11. 将傅里叶变换的结果转换回byte格式的图
  32. min_max_gray(ImageEntireReg, ImageResult, 0, Min, Max, Range)
  33. scale_image_range(ImageResult, ImageResult_scaled, Min/3, Max)
  34. convert_image_type (ImageResult_scaled, ImageResult_8u, 'byte')

  35. * 12. 执行高帽和底帽形态学,并分别进行独立的灰度拉伸,过滤掉比较暗的像素
  36. gen_disc_se (SE, 'byte', 11, 11, 0)
  37. gray_bothat (ImageResult_8u, SE, ImageBotHat)
  38. gray_tophat (ImageResult_8u, SE, ImageTopHat)

  39. scale_image_range(ImageBotHat, ImageBotHat_scaled, 20, 100)
  40. scale_image_range(ImageTopHat, ImageTopHat_scaled, 30, 100)

  41. * 13. 将高帽和低帽形态学的结果加起来,再过滤一次比较暗的像素
  42. add_image (ImageBotHat_scaled, ImageTopHat_scaled, ImageMoprhAdded, 1, 0)
  43. scale_image_range(ImageMoprhAdded, ImageMoprhAdded_scaled, 25, 255)

  44. * 14. 闭操作连接分离的缺陷区域
  45. gen_disc_se (SE, 'byte', 11, 11, 0)
  46. gray_closing (ImageMoprhAdded_scaled, SE, ImageClosing)

  47. * 15. 图像边界附近,傅里叶变换消除芯片图案的时候,有很多残留,所以这里只能通过roi来过滤
  48. gen_rectangle1(Rectangle, 24, 96, 355, 600)
  49. reduce_domain (ImageClosing, Rectangle, ImageClosingReduced)

  50. * 16. 执行经典的半点分析套路,按照面积过滤得到最终结果
  51. threshold (ImageClosingReduced, Region, 25, 255)
  52. connection(Region, ConnectedRegions)
  53. select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 99999)
复制代码



halcon_result.png

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| bjlcx125 发表于 2025-11-15 14:57:30 | 显示全部楼层

谢谢,不过我把你的代码复制进去了,运行的结果大不一样。而且代码最后的筛选在裁剪区,裁剪区怎么会筛选到油污区域呢
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
ld3696 发表于 2025-11-15 17:39:49 | 显示全部楼层

原来靠阈值筛选就可以了,牛的!!!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
holybang 发表于 2025-11-16 12:45:32 | 显示全部楼层
bjlcx125 发表于 2025-11-15 14:57
谢谢,不过我把你的代码复制进去了,运行的结果大不一样。而且代码最后的筛选在裁剪区,裁剪区怎么会筛选 ...

153843ytzltrdwkmy7mwzr.png

这是输入的你的原图,我又测试了一下,结果还是和我上面贴的一样。

imageclosingreduced.png
这是ImageClosingReduced,是基于裁剪区域和对图片reduce得到的结果图,reduce_domain的结果可以不实际裁剪图片,所以这个图看起来和reduce前一样。之后再做threshold,进行shape筛选,实际就是在reduce_domain的时候收入的rectangle里面进行了。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表