2

我有一个类似于这样的图像:这个 http://bjr.birjournals.org/content/84/Special_Issue_3/S338/F9.large.jpg

我只想分割主动脉(箭头指向的地方)并摆脱其余的解剖结构。我是 matlab 新手,不知道如何开始。

到目前为止,我有这个:

clear all;
img = imread('~/Desktop/aorta.jpg');
img1 = rgb2gray(img);
imgh = histeq(img1);
bw = im2bw(imgh,.9);
remove = bwareaopen(bw,5000);
l = bwlabel(remove);
s = regionprops(l, 'perimeter');

我的想法是使用周长值与圆度进行比较,并使用 ismember 排除其余部分,但我不确定如何实现,也找不到任何好的示例来解释如何实现。

有人可以解释如何做到这一点吗?另外,这个策略是最好的方法吗?谢谢!

4

2 回答 2

2

在医学成像应用中,通常需要非常准确的分割,运行时间不太重要。如果这是您的情况,我建议使用也称为“蛇”的 活动轮廓。

这种分割技术背后的想法是找到满足强边缘(高梯度)和短(或平滑)曲线的最佳分割。在蛇的情况下,这些是内力和外力,问题被提出为优化问题(Mumford-Shah 泛函)。这是一种区域增长分割技术,它是从 CT 图像开始的好地方。以下来自 Matlab 的 filexchange 的代码是一个很棒的演示,它基于一篇很棒的论文Active Contours without Edges

于 2013-08-08T05:52:59.350 回答
0

对于任何好奇的人,这就是我发现的工作。我首先对图像进行阈值化,删除任何小于 4000 像素的小对象,在剩下的任何对象周围创建边界,获取对象的周长和面积,设置要比较的阈值(1 将是一个完美的圆),计算圆度对象是,将根据阈值圆形的项目添加到数组中,最后摆脱非圆形对象。感谢所有提交链接的人,他们真的帮助我更多地了解了这个过程!

clear all;
img = imread('~/Desktop/aorta.jpg');
img1 = rgb2gray(img);
bw = im2bw(img,.5);
less = bwareaopen(bw, 4000);
[b,l] = bwboundaries(less,'noholes');
stats = regionprops(l,'area','perimeter');
threshold = .80;
perimeter = (4 * pi * [stats.Area]) ./ ([stats.Perimeter] .^ 2);
idx = find(perimeter>threshold);
bw2 = ismember(l,idx);
imshow(bw2);
于 2013-08-08T20:46:24.937 回答