首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CT扫描的Matlab分割

CT扫描的Matlab分割
EN

Stack Overflow用户
提问于 2013-08-08 04:19:29
回答 2查看 2.7K关注 0票数 2

我有一个与此类似的图像:this http://bjr.birjournals.org/content/84/Special_Issue_3/S338/F9.large.jpg

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

到目前为止,我有这样的想法:

代码语言:javascript
复制
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排除其余部分,但我不确定如何实现,也找不到任何好的例子来解释如何实现。

有人能解释一下如何做到这一点吗?另外,这种策略是实现这一目标的最佳方式吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-08-08 13:52:59

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-08-09 04:46:25

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

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18113048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档