CT影像寻找皮肤轮廓预处理

注意此方法处理的是CT影像。

问题是:原来对于CT影像寻找轮廓之前的预处理不合适,导致轮廓向体内偏移严重:

其实原因就是分割阈值过大。

主要处理步骤如下:

复制代码
 
python 复制代码
img = all_ds[i].pixel_array
 # 归一化
 norm = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
 ​
 # 开运算
 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
 opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
 ​
 # 使用Otsu阈值分割 
 ret, binary = cv2.threshold(opening, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
 _, final = cv2.threshold(opening, ret, 255, cv2.THRESH_BINARY)
 ​
 contours, _ = cv2.findContours(final, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
 # 提取最大轮廓,这是我们要的最大外围轮廓
 ctr = max(contours, key=cv2.contourArea).squeeze()

根据手头上几个CT影像的测试结果,自认为经过上面的处理得到的结果是较好的。

此前,在otsu阈值分割之前采用的是闭运算而不是开运算,实验结果是采用闭运算轮廓会出现"不规则锯齿"问题。而开运算则避免了这个问题。我认为,闭运算先膨胀再腐蚀,填补内部小空洞,对物体边缘的作用是更"模糊化",即使得前景和背景过度更平滑,区别更不明显;而开运算先腐蚀再膨胀,去除噪声小白点,对物体边缘的作用是更"清晰化",即使得前景和背景区分的更明显。

同时,在otsu之前一般会有高斯模糊处理,最初我也这个操作。但是,在这个任务中我们目的是更清晰的找出身体的最外围轮廓,让前景、背景区别更明显,模糊化不利于这个效果,所以去掉,实验结果显示去掉后效果也会变好。

缺点:

采用开运算之后偶尔几张影像会出现"内凹"现象,推测原因是开运算腐蚀过于严重,但总体来看,采用开运算利大于弊。

相关推荐
小静AI工程实验室3 分钟前
robots.txt 不是门禁:RFC 9309 规则、缓存与 Python 爬虫的 10 个边界
爬虫·python·缓存
沉下心来学鲁班8 分钟前
DeepAgents 记忆机制:让 AI Agent 拥有“跨对话“的记忆
服务器·人工智能·python
Helix25010 分钟前
Python与其他编程语言优劣势对比:2026初学者选型指南
java·python·教程·编程语言·入门·初学者编程选型
零基础12340 分钟前
深度强化学习驱动的 Agent 后训练:原理、实践与前沿路线
人工智能·python·机器学习
I Am a robert girl42 分钟前
PhysStream 源码级拆解:流式视频生成如何做到“边生成边控制“
python·音视频·源码解析·视频生成·可控生成·流式生成·物理控制
高洁011 小时前
数字孪生驱动大模型工业知识库
人工智能·python·深度学习·机器学习·transformer
RS迷途小书童1 小时前
Python+FFmpeg提取大疆无人机MP4内嵌mov_text遥测SRT字幕并做完整性校验
python·ffmpeg·大疆·srt字幕·dji
幻影123!1 小时前
AlphaZero 五子棋实战(番外二):白棋专项训练的一种方案
python·机器学习·强化学习·五子棋·alpha zero
头发够用的程序员1 小时前
TensorRT 自定义算子插件实战(三):手搓 2×2 最大池化 customMaxpool
人工智能·pytorch·python·深度学习·神经网络·边缘计算·jetson