当前位置: 首页 > news >正文

Halcon区域分割之分水岭分割法

        现实中我们见到过有山有湖的景象,那么一定是水绕山、山围水的情形。当然可在需要的时候人工构筑分水岭,以防集水盆之间的互相穿透。而区分高山与水的界线以及湖与湖之间的间隔,就是分水岭。
       分水岭分割法是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看做是地形学上的拓扑地貌,图像中的每一点像素的灰度值表示该点的海拔高度,高灰度值代表山脉,低灰度值代表盆地,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界形成了分水岭。
      有时直接使用图像灰度值代表高度来实现分水岭算法太困难,需要进行距离变换,下面简单介绍距离变换。
      距离变换是针对二值图像的一种变换。在二维空间中,一幅二值图像可以认为仅仅包括目标和背景两种像素,目标的像素值为1,背景的像素值为0。距离变换的结果不是另一幅二值图像,而是一幅灰度值图像,即距离图像,图像中每个像素的灰度值为该像素与距其最近的背景像素间的距离,距离变换也就是此点的灰度值,代表此点到边界的距离。距离边界越近,灰度值越小;距离边界越远,灰度值越大。中心像素的灰度值最大,边界为零。
      最常见的距离变换算法是通过连续的腐蚀操作来实现的,腐蚀操作的停止条件是所有前景像素都被完全腐蚀。因此,根据腐蚀的先后顺序,可以得到各个前景像素点到前景中心骨架像素点的距离。根据各个像素点的距离值,设置不同的灰度值。这样就完成了二值
      下面简单介绍使用分水岭分割法时可能用到的算子。

      1):distance _ transform ( Region ; DistanceImage : Metric . Foreground . Width , Height )
      功能:对区域作距离变换,获得距离变换图。
      Region :距离变换目标区域。
      Distancelmage :获得距离信息图。
      Metric :度量距离类型,包括' City - block ',' chessboard ',' euclidean '
      Foreground :为' true ',则针对前景区域( Region )作距离变换;为" false ',则针对背景区域(整个区域减去 Region )作距离变换。
      Width 、 Height :输出图像的宽、高。
      2):watersheds ( Image : Basins . Watersheds )
      功能:直接提取图像的盆地区域和分水岭区域。
      Image :需要分割的图像(图像类型只能是 byte 、uint2、 real )。
      Basins :盆地区域。
      Watersheds :分水岭区域(至少一个像素宽)。
      3):watersheds _ threshold ( Image : Basins ; threshold )
      功能:阈值化提取分水岭盆地区域。
      Image :需要分割的图像(图像类型只能是 byte 、uint2、 real )。
      Basins :分割后得到的盆地区域。
      Threshold :分割时的阈值。
      应用分水岭分割法的算子时分为两步:第一步计算分水岭不使用阈值,如用算子 watersheds ;第二步使用阈值,此阈值是合并相邻两个盆地区域时使用的,如果两个盆地的最小灰度值与分水岭上最小灰度值的差的最大值都小于此阈值,那么这两个盆地区域就会合并。假设B1、B2分别表示相邻盆地区域的最小灰度值, W 表示两盆地的分水岭最小灰度值,若满足式(5-47),则分水岭操作会被取消。 Max ( W - BI , W -B2)< Threshold

案例分析

目标:获取圆形区域内矩形区域

疑难点:目标区域连通

   

  解决方案:

1):开运算分割

2):分水岭分割

代码

read_image (Image1, 'E:/数据/资源图片/截图/2.png')
rgb1_to_gray (Image1, GrayImage)
scale_image_max (GrayImage, ImageScaleMax)
threshold (ImageScaleMax, Region, 0, 120)
gauss_filter (ImageScaleMax, ImageGauss1, 7)
watersheds (ImageGauss1, Basins1, Watersheds1)
intersection (Basins1, Region, SegmentedPellets)
region_features (SegmentedPellets, 'area', Value)
select_shape (SegmentedPellets, SelectedRegions, 'area', 'and', 1500, 4999)
region_features (SelectedRegions, 'row', RowValue)
select_shape (SegmentedPellets, SelectedRegions, 'row', 'and', min(RowValue)-5, min(RowValue)+5)
dev_display (Image1)
dev_display (SelectedRegions)


http://www.mrgr.cn/news/64552.html

相关文章:

  • python中应该使用while 1吗?按位运算符可以代替逻辑运算符使用吗?
  • 针对解决前后端BUG的个人笔记
  • json和pb的比较
  • 使用 pytorch 运行预训练模型的框架
  • 3674矢量网络分析仪-003噪声系数测量选件
  • 报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • APP的设置页面,应该怎样尽可能减少用户的输入操作呢
  • Python 一维列表基础语法
  • HashMap的实现原理
  • 十四届蓝桥杯STEMA考试Python真题试卷第二套第二题
  • 【热门主题】000024 探索人工智能学习框架:开启智能未来之门
  • JDBC学习笔记
  • Maven随笔
  • C#数组基础:声明、初始化与访问指南
  • InsuranceclaimsController
  • 【k8s】-运维技巧-1
  • ngxin系列--(二)--stream模块的加载、accept、read/write
  • 利士策分享,青年心向新潮,未来可期
  • 大模型入门(二)—— PEFT
  • 【JavaEE初阶 — 多线程】Thread的常见构造方法&属性
  • 【Python】全面解析Python中的GIL(全局解释器锁):多线程与多进程的实战与抉择
  • asrpro 库制作
  • 样本不均衡与异常点检测处理|SMOTE|LOF|IForest
  • SVN 提交操作
  • 【语义分割|代码解析】CMTFNet-4: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!
  • 非线性数据结构之图