首页 > 解决方案 > 计算机视觉:改进兴趣区域分割

问题描述

我在 X 射线上运行一个用于肺区域分割的 unet 模型,该模型似乎运行良好,但我的数据集不是很好看,我正在获得一些缺失部分的结果,如下所示:

在此处输入图像描述

我的问题是:是否有任何 cv 运算符我可以执行以使其更平滑以获得如下内容:

在此处输入图像描述

谢谢。

标签: pythonnumpyopencvcomputer-visionimage-segmentation

解决方案


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

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

# 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)

第一位将您发布的图像转换为二进制图像,因为形态学运算只能在 1 通道图像(也是灰度)上执行,但由于我们将应用基本膨胀,因此二进制图像就足够了。这是上述代码段的结果:

在此处输入图像描述

让我们应用dilation. 该操作可以连续应用,因此您可以指定多个iterations. 既然你想要一个有点强烈的效果,那就试试吧10 iterations。该操作需要名为“ Structuring Element ”(SE)的第二个操作数,它选择形状的已定义子区域中的像素。有不同种类的SEs。最常见的一种是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)

这是结果:

在此处输入图像描述


推荐阅读