3

试图分割出肺部区域,我遇到了很多麻烦。传入的图像是这样的:(这本质上是一个jpg转换,每个像素是8位。) 在此处输入图像描述

I = dicomread('000019.dcm');
I8 = uint8(I / 256);
B = im2bw(I8, 0.007);
segmented = imclearborder(B);

上面的脚本生成: 在此处输入图像描述

Q-1

我也对带有白质的整个内部黑色部分感兴趣。我matlab几天前就开始了,所以不太明白我该怎么做。如果你不清楚我想要什么样的输出,请告诉我——我会上传一张图片。但我认为没有必要。

Q-2

B = im2bw(I8, 0.007);为什么我需要给出这么低的门槛?阈值越高,一切都是白色或黑色。我已阅读文档,据我了解,值小于 0.007 的像素被标记为黑色,上面的所有内容都是白色的。是因为我的 16 到 8 位转换吗?

4

2 回答 2

2

这是使用 OpenCV 在 python 中的工作解决方案:

import cv2 #openCV
import numpy as np

filename = 'zFrkx.jpg' #name of file in quotations here... assumes file is in same dir as .py file
img_gray = cv2.imread(filename, 0) #converts jpg image to grayscale representation
min_val = 100 #try shifting these around to expand or collapse area of interest
max_val = 150
ret, lung_mask = cv2.threshold(img_gray, min_val, max_val, cv2.THRESH_BINARY_INV) #fixed threshold uses values you'll def above
lung_layer = cv2.bitwise_and(img_gray, img_gray, mask = lung_mask)
cv2.imwrite('cake.tif', lung_layer) #outputs desired layer to current working dir

我尝试使用任意设置为 100,150 的阈值运行脚本并得到以下结果,您可以从中选择使用膨胀和分割技术的最大连续元素(http://docs.opencv.org/master/d3/db4/tutorial_py_watershed .html#gsc.tab=0)。

由于上传问题,LUNG 保存为 jpg

另外,我建议您裁剪底部和顶部 X 像素以剪切文本,因为没有肺会填充图片的顶部或底部。

使用 tif 代替 jpg 格式以避免压缩相关的伪影。

我知道你注意到你也想要髓质(?)白质。很乐意提供帮助,但您能先用简单的英语解释一下您的共享 matlab 代码是如何工作的吗?似乎对 WM 工作得很好。

希望这可以帮助!

于 2015-09-10T03:46:00.047 回答
2

我使用 ImageJ 快速完成的另一个自动解决方案(在 MatLab 中有相同的算法):

  1. 在您选择的颜色空间中使用 Huang 或 Li 进行自动阈值处理(所有这些都有效)
  2. 使用磁盘类型的结构元素打开(删除小组件)
  3. 连接的组件标签。
  4. 删除触及图像边界的组件。
  5. 填充孔。

你有一个干净的结果。

于 2015-09-10T08:07:48.713 回答