我目前正在研究MRI图像,每个数据集都包含一系列图像。我需要做的就是根据提供的固定图像中的细节来分割部分运动图像,严格地使用图像配准方法。
我已经尝试了一些可用的代码并做了一些调整,但我得到的是基于固定图像的特征的扭曲变换运动图像,这是正确的但不是我预期的。
为了帮助实现这个想法,这里有一些MRI图像 1 :
修正图片:
动态影像:
计划是根据来自固定图像的细节仅分割运动图像的总面积(四头肌,内骨和外骨部分),即根据固定图像边界在形态学上扭曲运动图像的边界。
关于如何做到这一点的任何想法/建议?
<子> 1。作为新用户,我无法发布/附加超过2个链接/图像,但如果您需要更多图像,请告诉我。
答案 0 :(得分:4)
'我需要做的就是分割部分运动图像',这当然不是一件小事。它被称为可变形模型的分割,并且有很多关于该主题的文献。此外,您的固定图像与移动的图像非常不同,这无济于事。
以下是一些想法,但您可能需要了解应用程序的更多详细信息。
I1=imread('fixed.png');
I2=imread('moving.png');
model=im2bw(I1,0.54);
imshowpair(I1,Model);
这是一个简单的阈值分割,用于隔离图像中间的斑点。通过摆弄获得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);
这不是完美的,但它是一个开始。我认为你的主要问题是你的面具包含彼此不同的元素(中间斑点与中间较暗的软组织)如果我在哪里,我会尝试将这些结构分开。
祝你好运!