文件交换的选择

我们最好的用户提交

两个我最喜欢的新图像处理工具箱的功能

2016年7月,我选择菲利普Kollmansberger有用的文件交换的贡献Skeleton3D的选择。我想重温这个博客今天,如果我可以。对于那些还没有访问R2018a,菲利普的贡献仍然是你最好的选择也许变得极瘦的容积图像。但是一项新的功能添加到图像处理工具箱在当前版本(即R2018a)给你提供了一种替代方法。版本注释记录修改工具箱,我们知道有一个新的函数bwskel支持2 d万博1manbetx和3 d图像的骨架化。这是大!

根据这个新函数,有趣的是看一个新的我之前选的三维骨架化。

考虑:

% %加载和显示示例3 d数据负载spiralVol.mat;stepSize = 25;%检测所有螺旋点:第1 =找到(spiralVol);%注意顺序逆转为x, y(行/列):[y x, z] = ind2sub(大小(spiralVol),第1);次要情节(2、2、1)myTitle = sprintf (完整的螺旋(Downsampled): \ n %我点,元素个数(第1));refreshSpiralVisualization (x, y, z, stepSize myTitle);
% %第一,骨架化使用Skeleton3D(灰度):抽搐skel = Skeleton3D (spiralVol);t = toc;第1 =找到(skel);myTitle = sprintf (“使用Skeleton3D: \ n %我“骨架”点;t = % 0.2 f秒',元素个数(第1),t);disp (使用Skeleton3D,灰度的次要情节(2,2,2)refreshSpiralVisualization (x, y, z, stepSize myTitle);持有[yskel, xskel zskel] = ind2sub(大小(skel),第1);scatter3 (xskel yskel zskel 5,“标记”,“o”,“MarkerEdgeColor”,“没有”,“MarkerFaceColor”,“r”);
% %接下来,骨架化使用Skeleton3D(二进制):抽搐spiralVolBinary = imbinarize (spiralVol);skel = Skeleton3D (spiralVolBinary);t = toc;第1 =找到(skel);myTitle = sprintf (“使用Skeleton3D(二进制):\ n %我“骨架”点;t = % 0.2 f秒',元素个数(第1),t);[yskel, xskel zskel] = ind2sub(大小(skel),第1);次要情节(2,2,3)refreshSpiralVisualization (x, y, z, stepSize myTitle);持有scatter3 (xskel yskel zskel 5,“标记”,“o”,“MarkerEdgeColor”,“没有”,“MarkerFaceColor”,“r”);
% %最后,使用| bwskel() |(二进制)抽搐spiralVolLogical = imbinarize (spiralVol);skel = bwskel (spiralVolLogical);t = toc;第1 =找到(skel);myTitle = sprintf (“使用bwskel()(二进制):\ n %我“骨架”点;t = % 0.2 f秒',元素个数(第1),t);[yskel, xskel zskel] = ind2sub(大小(skel),第1);次要情节(2,2,4)refreshSpiralVisualization (x, y, z, stepSize myTitle);持有scatter3 (xskel yskel zskel 5,“标记”,“o”,“MarkerEdgeColor”,“没有”,“MarkerFaceColor”,“r”);
% %函数refreshSpiralVisualization (x, y, z, stepVal myTitle) scatter3 (x (1: stepVal:结束),y (1: stepVal:结束)、z (1: stepVal:结束),0.1,“标记”,“o”,“MarkerEdgeColor”,“c”,“MarkerFaceAlpha”,0.3,“MarkerFaceColor”,“c”);包含(“x”);ylabel (“y”);zlabel (“z”);集(gca),“视图”[-26.94 - 23.6])标题(myTitle)结束

几件事来变得明显看着这些结果。首先,Skeleton3D ()运行没有错误或警告灰度图像(右上角轴),但似乎标签每个非零输入像素作为“骨架”点。更有用的是,菲利普所显示的描述算法,函数返回更合理的骨架点在二值化操作的输入数据(左下轴)。然而,计算了25秒(包括二值化)在我的电脑。相比之下,bwskel ()(右下)错误(有用,在我看来)如果你想直接灰度数据操作,并以不到一秒(包括二值化)分段数据操作。(这两个函数的输出并不相同,但是他们都似乎合理。)

在2016篇文章中,我提到的计算血管迂回曲折在3 d是加剧了确定三维骨架的端点的挑战。困难,也无人问津了。新功能bwmorph3(现在还在图像处理工具箱)促进对3 d计算六个操作二进制图像;幸运的是,这个列表的操作包括端点检测。最终结果:如果我们有血管的体积表示我们想要评价,现在我们可以相对容易。

最后一个评论:注意在上面的代码中,脚本包含本地函数,或子功能。能力包括子函数在脚本中添加R2016b。

像往常一样,我欢迎你想法和意见

发表与MATLAB®R2018a

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。