Matlab分割CT扫描

时间:2013-08-07 20:19:29

标签: matlab

我的图像类似于:this 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排除其余部分,但我不确定如何实现它,我找不到任何解释如何的好例子。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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);