python - 计算机视觉:改进兴趣区域分割
问题描述
我在 X 射线上运行一个用于肺区域分割的 unet 模型,该模型似乎运行良好,但我的数据集不是很好看,我正在获得一些缺失部分的结果,如下所示:
我的问题是:是否有任何 cv 运算符我可以执行以使其更平滑以获得如下内容:
谢谢。
解决方案
您所描述的可以通过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
)的第二个操作数,它选择形状的已定义子区域中的像素。有不同种类的SE
s。最常见的一种是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)
这是结果:
推荐阅读
- python - 为什么我的神经网络预测在应用于 MNIST 手绘图像时是正确的,但在应用于我自己的手绘图像时却不正确?
- microservices - 用于构建微服务的先验图形工具
- apache-kafka - Kafka Connect 将相同的任务分配给多个工作人员
- node.js - 从主机为构建服务器设置节点的环境变量
- c++ - 不使用新的动态二维数组
- sql - 合并多个表时如何复制列或记录
- python - Python re.sub():仅尝试替换转义字符
- arrays - 如何求解 y = |Sin(x^x)/2^((((x^x)-pi/2)/pi)| 在 MATLAB 中
- python-3.x - Python - 如何使用 .format() 方法调用变量内容而不是其名称?
- testing - adonis 测试返回消息:“superagent:启用实验功能 http2”