我有大约200张来自患者的CT幻灯片,需要重建它们并分割出眼睛轨道。在Matlab中,我读取了原始的DICOM图像,使用imbinarize(I,T)将它们更改为二进制图像,然后将它们堆叠起来形成3D轨道图像(参见下面的附图)。
原始DICOM enter image description here
二进制图像enter image description here
然而,正如你所看到的,轨道内有许多洞。为了解决这个问题,我使用bwmorph()来加厚'和'桥接',然后使用imclose()和'磁盘'参数:
for i = 30 : 160
info = dicominfo(dirOutput(i).name,'UseDictionaryVR',true);
imgTemp = dicomread(info);
imgCropped = imcrop(imgTemp,bboxCrop);
imgCroppedBin = imbinarize(imgCropped,0.51728);
img_thick = bwmorph(imgCroppedBin,'thicken');
img_bridge = bwmorph(img_thick,'bridge',Inf);
se = strel('disk',1);
I(:,:,i) = imclose(img_bridge,se);
end;
I(:,:,i)是生成的3D数组。然后我使用fv = isosurface(I,ISOVALUE)和patch()将3D数组重建为3D图像(如上所述)。
生成的3D图像仍有许多未填充的孔。增加STREL元素尺寸或降低ISOVALUE将使最终模型变粗和粗糙(例如,内部有楼梯盒)。
请问如何在3D模型中填充生成的孔并仍然保留图像的原始平滑度?我应该在3D图像中执行此操作还是在重建之前在2D二进制图像中执行此操作?
我也尝试使用alphaShape填充孔,结果比isosurface()和patch()更令人满意并且更容易控制。但是具有大的#alpha; alpha值"例如8,输出模型变得丢失细节,例如"下眶裂"也被平滑了。
感谢任何人都可以提出解决方案。谢谢!