(求晒图)大家用体绘制能达到的最好看的显示效果是什么样呢?
vtk吧
全部回复
仅看楼主
level 6
7号撞针 楼主
为了达到比较真实的显示效果,大家应该都是用的VTK的体绘制方法。
对显示效果起决定性影响的应该是1、数据预处理;2、传递函数设计吧?
大家目前能实现的最好看的绘制效果是什么样子呢?用了什么处理方法、怎么设计的传递函数呢?
很好奇VTK到底能做到何种程度,求分享~
以下是我自己做的:
用的OsiriX官网 http://www.osirix-viewer.com/datasets 下载的数据,361张。没有经过图像处理,用的vtkGPUVolumeRayCastMapper,传递函数:
opacityTransferFunction->AddPoint(-3024, 0, 0.5, 0.0);
opacityTransferFunction->AddPoint(-16, 0, .49, .61);
opacityTransferFunction->AddSegment(641, .72, .5, 0.0);
opacityTransferFunction->AddPoint(3071, 0.0, 0.5, 0.0);
colorTransferFunction->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
colorTransferFunction->AddRGBPoint(-16, 0.73, 0.25, 0.30, 0.49, .61);
colorTransferFunction->AddRGBPoint(641, .90, .82, .56, .5, 0.0);
colorTransferFunction->AddRGBPoint(3071, 1, 1, 1, .5, 0.0);
gradientTransferFunction->AddPoint(0, 2.0);
gradientTransferFunction->AddPoint(500, 2.0);
gradientTransferFunction->AddSegment(600, 0.73, 900, 0.9);
gradientTransferFunction->AddPoint(1300, 0.1);
可以看到软组织基本全混在一起区分不出肌肉血管和皮肤什么的。不知道大家做出来的效果什么样子
2016年04月26日 10点04分 1
level 6
7号撞针 楼主
@rabbitbride ,有酷炫的图能够分享一下吗?[乖]
2016年04月26日 10点04分 2
level 10
软组织本来就非常接近,除非打了增强
2016年04月26日 10点04分 3
嗯,区分这些组织应该需要增强之后再细微的调整传递函数
2016年04月27日 01点04分
level 12
贴张图~纯分享~注意:不是原始数据
2016年04月27日 07点04分 4
level 12
2016年04月27日 07点04分 5
看着好精细啊这血管和支气管一根儿根儿的[乖]看来想用试错法想得到个好结果简直遥遥无期
2016年04月28日 01点04分
大佬,我想请教下立体的颜色怎么设置出来呀,您这个做的好漂亮啊
2020年09月06日 09点09分
level 6
7号撞针 楼主
这里还有一个 .RAW 格式的体绘制效果,应该是心脏周围的组织。
数据是网上下的,应该是已经处理过了的,不然血管壁之类的边界不会这么清楚吧?
然而肌肉血管脂肪什么的软组织在我这儿就是一坨一坨的[泪]
哎。。接下来再开个图像处理的大坑吧。。
2016年04月28日 01点04分 6
那是支气管,跟空气的边界当然清晰
2016年04月28日 08点04分
软组织的CT值都比较接近,所以容易一团,在软组织的CT值范围内把颜色精细调节,差异调大点,加上梯度,应该会好一些
2016年04月28日 08点04分
@三生草 发现各种组织的CT值基本都是交叉在一起的。。这样的话就算做了增强并且很精细的设计了传递函数,还是会混在一起啊?
2016年04月29日 03点04分
@7号撞针 就是这样的,很正常,看骨骼比较清楚,或者打过造影剂的血管也可以,其他的就算了
2016年04月29日 06点04分
level 6
7号撞针 楼主
自己顶一个,这个图效果虽然不是特好,但是基于kmeans聚类自动生成的传递函数~
把512*512*200的图像导入, 以灰度和梯度幅值为特征做二维kmeans聚类, 只试探性的分了5类, kmeans也只迭代了两次, 所以这个效果已经很惊艳了有木有~
现在试试别的图形特征做聚类, 下一步打算多加几个特征(光滑度、分形特征什么的), 找个好点儿的电脑把K设置多点再多迭代几次, 效果应该更好~~
2016年05月20日 03点05分 8
貌似我最开始做过类似的效果,不过后来还是改了传递函数,加了梯度光照,效果就很像其他软件的效果了
2016年05月20日 11点05分
@三生草 我现在深深体会到你之前说的想把身体里面的脏器之类的表现好几乎不可能啊。。
2016年05月22日 06点05分
@三生草 我在想这个显示效果究竟能做到什么程度。大神晒图分享一下呗[乖]大家一起长长见识啊
2016年05月26日 13点05分
@7号撞针 图不适合公开,效果参考专业软件
2016年05月26日 14点05分
level 8
默默地赞一个 以后肯定会学习得到
2016年05月20日 07点05分 9
level 12
[哈哈]以后我有了好看的体绘制也贴上来
2016年05月20日 23点05分 10
求吧主给点儿劲爆的图啊![滑稽]
2016年05月22日 06点05分
level 12
图片年代久远有些失真,再亮点类似了[汗]
2016年06月07日 00点06分 12
突然发现一个大问题——为啥我的表面跟你们相比这么不光滑啊[惊哭]各种表面都像鱼鳞一样。这个应该不是光照的问题了吧?还有明显的阶梯状伪影。这是因为啥啊。。。你们是怎么消除的?
2016年06月07日 01点06分
level 6
7号撞针 楼主
就像这样,表面像鱼鳞一样。。为什么你们的表面都这么光滑呢?
2016年06月07日 01点06分 13
level 6
7号撞针 楼主
刚才又试验了一下,果然就像吧主说的是光照和数据的问题,还有自己的传递函数对颜色的设置不太合理,才会效果那么差。
再耐心调整一下传递函数和光照,发现也能出来如下效果(看上去还不错?):
但是上面那组肾脏的数据,不管怎样调骨头都还是毛糙的,应该是数据本身比较稀疏。。
谢谢吧主提示~
2016年06月07日 02点06分 14
[哈哈]效果不错了
2016年06月07日 03点06分
@rabbitbride 发现vtk默认的是vtkVolumeProperty::SetInterpolationTypeToNearest();所以会出现上面那种鳞片状的,改成ToLinear 瞬间就没那些麻点儿了。[哈哈]
2016年06月07日 06点06分
如果采样步长太大,并且使用Nearest方式插值,就会出现一圈圈的纹,使用Linear的采样会好些,这个根据raycast的原理比较好理解
2016年06月07日 07点06分
@三生草 是的,以前还以为单纯是数据不行。
2016年06月07日 08点06分
level 6
7号撞针 楼主
//mapper
vtkSmartPointer <vtkSmartVolumeMapper> volumeMapper = vtkSmartPointer <vtkSmartVolumeMapper>::New();
volumeMapper->SetRequestedRenderModeToRayCast();
volumeMapper->SetInterpolationModeToLinear();
//不透明度
opacityTransferFunction->AddPoint(-3024, 0, 0.5, 0.0);
opacityTransferFunction->AddPoint(-220, 0, .49, .61);
opacityTransferFunction->AddPoint(625, .71, .5, 0.0);
opacityTransferFunction->AddPoint(3071, 0.0, 0.5, 0.0);
//颜色
colorTransferFunction->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
colorTransferFunction->AddRGBPoint(-200, 0.73, 0.25, 0.30, 0.49, .61);
colorTransferFunction->AddRGBPoint(641, .90, .82, .56, .5, 0.0);
colorTransferFunction->AddRGBPoint(3071, 1, 1, 1, .5, 0.0);
//梯度
gradientTransferFunction->AddPoint(0, 2.0);
gradientTransferFunction->AddPoint(500, 2.0);
gradientTransferFunction->AddSegment(600, 0.73, 900, 0.9);
gradientTransferFunction->AddPoint(1300, 0.1);
//体属性——看你的图像应该是光照没设置好
volumeProperty->SetColor(colorTransferFunction);
volumeProperty->SetScalarOpacity(opacityTransferFunction);
volumeProperty->SetGradientOpacity(gradientTransferFunction);
volumeProperty->ShadeOn();
volumeProperty->SetAmbient(.5);
volumeProperty->SetDiffuse(1.0);
volumeProperty->SetSpecular(.5);
volumeProperty->SetSpecularPower(25);
volumeProperty->SetInterpolationTypeToLinear();
2016年07月07日 01点07分 17
您好,请问体绘制中传递函数的设计应该遵循什么原则呢?也就是说如何根据图像的灰度值来确定合适的体绘制颜色、不透明度?除了随便尝试[委屈]
2016年08月26日 08点08分
楼主好, 请问下为什么我使用SetRequestedRenderModeToRayCastAndTexture会卡死, CPU直接100%啊, 要怎么优化呢? 还有我使用其他的映射器如vtkFixedPointVolumeRayCastMapper 也会卡死, 除了使用DefaultRenderMode才能得到重建的结果, 但是效果很差.
2017年05月17日 10点05分
@马骏1259389904 同学你好,我也遇到了你这个问题,方便说一下你的处理方式吗
2018年01月23日 07点01分
level 5
如果就是想单纯的提升三维重建中的体绘制效果,除了知道vtkFixedPointVolumeRayCastMapper,vtkGPUVolumeRayCastMapper等几个vtk自带类的用法,接下来该怎么学习,从哪些方便来提升体绘制效果呢?
2016年08月21日 11点08分 19
自己重写这几个类
2016年08月22日 00点08分
用cuda自己写光线投射算法,细节想怎么改怎么改~
2016年09月08日 08点09分
刚开始接触vtk,请问vtkFixedPointVolumeRayCastMapper怎么用?哪里可以找到例程?
2017年03月07日 05点03分
@心照璧 请问如何用cuda写光线投射算法,新手一枚,想请教一下
2017年04月07日 07点04分
level 7
能请教一下楼主那个scalar opacity mapping界面是怎么做的
2016年08月27日 00点08分 21
CTK基于Qt实现的
2016年08月27日 08点08分
@7号撞针 谢谢楼主[真棒],我还有一个问题就是外部改变属性的时候渲染过程如何刷新的
2016年08月27日 09点08分
@7号撞针 楼主该怎样编译CTK啊,我有编译好的VTK ITK DCMTK 但是它总是要自己下载 还总要带上python
2017年10月14日 18点10分
1 2 3 尾页