我目前正在处理 MRI 图像,每个数据集都包含一系列图像。我需要做的就是根据提供的固定图像的细节,严格使用图像配准方法来分割部分运动图像。
我已经尝试了一些可用的代码并做了一些调整,但我得到的只是一个基于固定图像特征的扭曲变换移动图像,这是正确的,但与我预期的不同。
为了帮助理解这个想法,这里有一些 MRI 图像1:
固定图像:
动态图像:
计划是根据固定图像的细节只分割运动图像的总区域(股四头肌、内部和外部骨骼部分),即根据固定图像边界在形态学上扭曲运动图像的边界。
关于如何做到这一点有什么想法/建议吗?
<子>1。作为新用户,我无法发布/附加超过 2 个链接/图像,但如果您需要更多图像,请告诉我。
最佳答案
'我需要做的就是分割一部分运动图像',这当然不是一件微不足道的事情。它被称为通过可变形模型进行分割,并且有很多关于该主题的文献。此外,您的固定图像与移动图像有很大不同,这无济于事。
这里有几个想法可以开始,但您可能需要深入了解您的应用程序的更多细节。
I1=imread('fixed.png');
I2=imread('moving.png');
model=im2bw(I1,0.54);
imshowpair(I1,Model);
这是一个简单的阈值分割,用于隔离图像中间的 Blob 。值 0.54 是通过摆弄获得的,您当然可以在分割固定图像方面做得更好。
这是分割后的固定图像,紫色在里面,绿色在外面。
现在,让我们变形此蒙版以适合移动的图像:
masked = activecontour(I2,model, 20, 'Chan-Vese');
imshowpair(I2,masked);
结果:
您可以在所有图像的循环中自动执行此操作,将每个后续蒙版变形为下一帧。也可以尝试 activecontour
的不同参数。
在这里编辑是我能想到的另一种方式:
在下面的代码中,Istart
是原始固定图像,Mask
是该图像上的分割区域(您在问题中称为“固定”的区域)和Istep
是移动的图像。
我首先将分割区域变成了二进制掩码,这不是绝对必要的:
t=graythresh(Mask);
BWmask=im2bw(Mask, t);
让我们显示蒙版的原始图像:
imshowpair(BWmask, Istart)
下一步是计算开始图像和步骤图像之间基于强度的配准:
[optimizer, metric] = imregconfig('monomodal');
optimizer.MaximumIterations = 300;
Tform=imregtform(Istart, Istep, 'affine', optimizer, metric);
然后根据这个变换扭曲蒙版:
WarpedMask=imwarp(BWmask, Tform, 'bicubic', 'Outputview', imref2d(size(Istart)));
现在让我们看看结果:
imshowpair(WarpedMask, Istep);
它并不完美,但它是一个开始。我认为你的主要问题是你的面具包含彼此不同的元素(中间的 Blob 与中间较暗的软组织)如果我在你那里,我会尝试分别分割这些结构。
祝你好运!
关于image - 如何在 MATLAB 中根据固定图像的细节分割运动图像的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090541/