学习内容:
请在虚拟实验平台完成以下肺实质分割任务:
一、腐蚀操作
使用 skimage 中 morphology 模块的 binary_erosion() 函数实现腐蚀操作。该函数的传入参数为二进制图像数组和一个结构元素,结构元素用于设定邻域的形状和大小。
morphology 模块的 disk() 函数用于生成一个扁平的、盘状的结构元素,传入参数为半径。到原点的欧式距离不大于半径的像素都包含在内,返回的数据结构为数组,其中邻域的元素为1,其余为0。
1. 请生成一个半径为2的结构元素,并保存为变量 selem 。
2. 请对之前的结果 new_binary 进行腐蚀操作,保存为变量 erosioned 。
二、闭合运算
形态学的闭合运算被定义为先膨胀后腐蚀。闭合可以填补肺实质内细小的孔洞,平滑肺实质边界的同时并不明显改变其面积。闭合运算同样需要结构元素的辅助,可利用 skimage.morphology.binary_closing() 函数实现闭合操作,传入参数为数组和一个结构元素。
1. 请生成一个半径为10的结构元素,并保存为变量 selem 。
2. 请对上面的结果 erosioned 进行闭合操作,保存为变量 closed 。
三、孔洞填充
前面我们已将肺实质内细小的孔洞进行了填充,但仍遗留有残余孔洞。所以我们需要将肺内部的孔洞进行填充,得到最终的掩膜。
首先,我们需要使用 skimage.filters.roberts() 进行边缘检测,找到肺实质的外部轮廓,再将轮廓内部填充为1。 二值图像填充孔洞主要利用 scipy.ndimage.binary_fill_holes() 函数实现,直接传入需要填充孔洞的数组即可。
1. 请使用上面的结果 closed 进行边缘检测,保存为变量 edges 。
2. 请根据检测到的肺实质轮廓进行孔洞填充,保存为变量 filled 。
四、掩膜叠加
在得到掩膜之后,我们最后需要进行掩膜叠加,即将上面得到的掩膜叠加到原CT图像切片上,实现在切片上分割出肺实质。
1. 请获取掩膜 filled 中数值为0的布尔索引,保存为数组对象 get_high_vals 。
2. 请使用 get_high_vals 在原切片 scan 中找到相应位置,将该区域数值设置为-1000。
实践操作:
在虚拟实验平台完成对应实验,并截图上传实验结果。




评论0