欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度学习,分割后处理之连通成分分析-Connected-Components

程序员文章站 2024-01-17 11:59:52
...

背景:用深度学习方法得到的分割结果,会有一些假阳性区域。比如说做肾分割,大家都知道,肾只有左右两边有,如果分割结果出现了三个区域,则可以根据常识,去除那个假阳性区域。用到的方法就是连通成分分析Connected-Components。

我也是刚接触,只知道OpenCV提供了这样的一个函数

cv2.connectedComponents  以及 进阶版 cv2.connectedComponentsWithStats

1.cv2.connectedComponents

实例:

import cv2
import numpy as np
img = np.array([[0, 255, 0, 0],
                [0, 0, 255, 255],
                [0, 0, 0, 255],
                [255, 0, 0, 0]], np.uint8)
res, labels = cv2.connectedComponents(img, connectivity=4)
res
Out[5]: 4
labels
Out[6]: 
array([[0, 1, 0, 0],
       [0, 0, 2, 2],
       [0, 0, 0, 2],
       [3, 0, 0, 0]], dtype=int32)

假设img是分割结果,值为255的是目标区域,可以发现,目标区域有3块。res代表区域的数量(0,1,2,3),labels为经过连通区域分析后的标记,把不同区域的相同值标记为不同的类别(有点绕口)。这样标记后,如果我们觉得3那个区域是假阳性,那我们就可以把3那个区域的值变为0, 其余区域的值标记为255, 这样就消除掉3这个区域的阳性值了。

label = np.where(labels > 2, 0, labels)
# 把labels中,大于2的值,赋值为0, 其余的就是labels原来的值。这样就剩下了两个区域
print(label)

结果如下: 

[[0 1 0 0]
 [0 0 2 2]
 [0 0 0 2]
 [0 0 0 0]]

上述例子例子中,参数connectivity =4 表示在4邻域(上下左右)范围内查找元素,也是可以改成8邻域对比一下

 

2. cv2.connectedComponentsWithStats

深度学习,分割后处理之连通成分分析-Connected-Components

stats 是bounding box的信息,N*5的矩阵,行对应每个label,五列分别为[x0, y0, width, height, area]

以上内容参考 https://www.jianshu.com/p/a9cc11af270c

总结:该方法对二维图像去除假阳性区域很好用,但是无法对三维图像进行操作。

相关标签: 分割后处理