python实现3D连通域后处理

本文介绍了如何使用Python的skimage库进行3D连通域处理,特别是在计算机视觉任务的后处理中去除小面积的独立轮廓。主要利用skimage.measure.label和skimage.measure.regionprops函数,通过连通域标记和测量区域属性来优化分割结果。
摘要由CSDN通过智能技术生成

skimage 实现3D数组连通域处理

在一些计算机视觉任务中,需要对模型的输出做一些后处理以优化视觉效果,连通域就是一种常见的后处理方式。尤其对于分割任务,有时的输出mask会存在一些假阳(小的无用轮廓),通过3D连通域找出面积较小的独立轮廓并去除可以有效地提升视觉效果。skimage是python的一个图像处理库,功能强大并且使用方便。这里主要使用了skimage里的measure模块,官方也提供了相关方法的说明及使用

1. 任务说明

模型输出了一个n*w*h的三维数组,数组中包含了模型对某一类(或几类)的分割结果,从形态学角度看在3D上每一类分割结果都应该是连续的,因此可以使用3D连通域去除那些不连通的小区域。

1.1 连通域

连通域(Connected Component)指的是图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Region)。连通域一般有两种,分别为4连通和8连通,下面借用skimage的示意图。

1-connectivity     2-connectivity     diagonal connection close-up

     [ ]           [ ]  [ ]  [ ]             [ ]
      |               \  |  /                 |  <- hop 2
[ ]--[x]--[ ]      [ ]--[x]--[ ]        [x]--[ ]
      |               /  |  \             hop 1
     [ ]           [ ]  [ ]  [ ]

连通域的实现有两种方式,一是two-pass算法,通过并查集(union-find)实现;二是Seed-Filling 算法,基于图形学中的区域生长,可以递归实现。

1.2 measure方法

skimage.measure.label
  • 函数功能:把输入的整数数组进行连通域标记
  • 函数定义:skimage.measure.label(input, neighbors=None, background=None, return_num=False, connectivity=None)
  • 参数说明:

input: int类型的ndarray,需要标记的图像;
neighbors: 废弃的参数,被connectivity替代;
background: int类型,可选,将像素为该值的视为背景并设置为0,默认为0;
return_num: bool,可选,是否返回标记的区域数量;
connectivity: int,可选,最大为输入的ndims,选择是几连通(对于输入为2D来说,1即为4连通,2为8连通)。

  • 返回值:

labels: 形状和类型与input一致,连通的区域使用相同的整数标记
nums: 标签数,等于最大标签索引,仅在return_num为True时返

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值