计算机视觉:改进兴趣区域分割

Computer Vision: Improving Region of Interests segmentation

我是 运行 用于肺部区域分割的 x 射线 unet 模型,该模型似乎运行良好,但我的数据集不太好看,我得到的结果有一些缺失的部分如此处:

我的问题是:是否有任何 cv 运算符我可以预制以使其更平滑一点以获得类似这样的结果:

谢谢。

你描述的可以通过morphology实现。形态学操作是一组影响图像整体形状的(逻辑)操作。它可以“扩大”或“缩小”形状区域,以及许多其他 cool operations.

让我们使用膨胀来扩大图像的形状:

# Imports
import cv2
import numpy as np

# Read image
imagePath = "D://opencvImages//"
inputImage = cv2.imread(imagePath+"lungs.png")

# Convert BGR back to grayscale:
grayInput = cv2.cvtColor(inputImage, cv2.COLOR_BGR2GRAY)

# Threshold via Otsu + bias adjustment:
threshValue, binaryImage = cv2.threshold(grayInput, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

第一位将您发布的图像转换为二值图像,因为形态学操作只能在单通道图像(也是灰度图像)上执行,但由于我们将应用基本膨胀,二值图像将够了。这是上述片段的结果:

让我们申请 dilation。该操作可以连续应用,因此您可以指定多个iterations。既然你想要稍微强一点的效果,那就试试10 iterations。该操作需要一个名为“Structuring Element”(SE)的第二个操作数,它选择形状的已定义子区域中的像素。有不同种类的 SE。最常见的一种是 3 x 3 rectangular SE:

# Set morph operation iterations:
opIterations = 10
# Set Structuring Element size:
structuringElementSize = (3, 3)
# Set Structuring element shape:
structuringElementShape = cv2.MORPH_RECT
# Get the Structuring Element:
structuringElement = cv2.getStructuringElement(structuringElementShape, structuringElementSize)

# Perform Dilate:
dilateImg = cv2.morphologyEx(binaryImage, cv2.MORPH_DILATE, structuringElement, None, None, opIterations, cv2.BORDER_REFLECT101)

# Show the image:
cv2.imshow("dilateImg", dilateImg)
cv2.waitKey(0)

这是结果: