网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月08日
漏签
0
天
vtk吧
关注:
1,218
贴子:
10,385
看贴
图片
吧主推荐
游戏
1
2
下一页
尾页
42
回复贴,共
2
页
,跳到
页
确定
<<返回vtk吧
>0< 加载中...
VTK中的体绘制
只看楼主
收藏
回复
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
新开一个帖子,专门写体绘制部分,我也是半吊子,边学边写,欢迎大家一起来探讨。
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
先上传一张图,可能不同版本会有区别,但大致可借鉴~
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
注意:
VTK 5.XXX版本中体绘制的GPU部分,都需要预装DX~ 这个很坑;
之后的版本中引入的opengl2.0,可以直接使用。
流光狄阿诺
三年级
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
吧主,我用面绘想出肺部图像,结果出来一张灰度纸一样的东西可能是存在什么问题呢?
流光狄阿诺
三年级
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
void main() //////////////////面绘////////////////
{
vtkRenderer *aRenderer = vtkRenderer::New();//建立绘制者
vtkRenderWindow *renWin = vtkRenderWindow::New(); //建立绘制窗口
renWin->AddRenderer(aRenderer); //将绘制者加入绘制窗口
renWin->SetSize(512, 512);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
vtkVolume16Reader *reader = vtkVolume16Reader::New();
reader->SetDataDimensions(512, 512);//设置图像像素值
reader->SetImageRange(1,90); //设置图片数量
reader->SetDataByteOrderToLittleEndian();//不知道什么鬼
reader->SetFilePrefix("E:\\emphysema M66\\L00");//图片路径
reader->SetFilePattern("%s%d.bmp");
reader->SetDataSpacing(3,3,1);//像素间的间隔
vtkMarchingCubes *skinExtractor = vtkMarchingCubes::New(); //用MarchingCubes绘制曲面
skinExtractor->SetInputConnection(reader->GetOutputPort());
skinExtractor->SetValue(0, 10);//设置阈值,其实为二值图像重建
//vtkDecimatePro *deci = vtkDecimatePro::New(); //减少数据读取点,以牺牲数据量加速交互
//deci->SetTargetReduction(0.9);
//deci->SetInputConnection(skinExtractor->GetOutputPort());
//vtkSmoothPolyDataFilter *smooth = vtkSmoothPolyDataFilter::New(); //使图像更加光滑
//smooth->SetInputConnection(deci->GetOutputPort());
//smooth->SetNumberOfIterations(100);
//vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();//绘制法线
//skinNormals->SetInputConnection(skinExtractor->GetOutputPort());
vtkStripper *skinStripper = vtkStripper::New(); //三角带连接
skinStripper->SetInputConnection(skinNormals->GetOutputPort());
vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
skinMapper->SetInputConnection(skinExtractor->GetOutputPort());
//skinMapper->ScalarVisibilityOff();
vtkActor *skin = vtkActor::New();
skin->SetMapper(skinMapper); //获得皮肤几何数据的属性
skin->GetProperty()->SetDiffuseColor(0.38, 0.54, 0.47); //设置皮肤颜色的属性
skin->GetProperty()->SetSpecular(0.4); //设置反射率
skin->GetProperty()->SetSpecularPower(20); //设置反射光强度
skin->GetProperty()->SetOpacity(0.8);//设置透明度
vtkCamera *aCamera = vtkCamera::New(); //定义摄像机
aCamera->SetViewUp(0, 0, -1); //取得摄像机方向
aCamera->SetPosition(0, 1, 0); //光源位置
aCamera->SetFocalPoint(0, 0, 0); //取焦点坐标
//aCamera->ComputeViewPlaneNormal();
aRenderer->AddActor(skin);
aRenderer->SetActiveCamera(aCamera);
aRenderer->ResetCamera();
aCamera->Dolly(1.5); //大于1向摄像机焦点移动小于1则向远离焦点的方向移动
aRenderer->SetBackground(0,0,0);
aRenderer->ResetCameraClippingRange();
/*vtkBoxWidget *boxWidget = vtkBoxWidget::New();
boxWidget->SetInteractor(iren);
boxWidget->SetPlaceFactor(1.25);
boxWidget->SetProp3D(skin);
boxWidget->PlaceWidget();*/
iren->Initialize();
iren->Start();
流光狄阿诺
三年级
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
后来发现改变Y方向的像素间隔是没有反应的,Y轴被吃了!?怎么破
rabbitbride
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
vtkVolume16Reader *reader = vtkVolume16Reader::New();
reader->SetDataDimensions(512, 512);//设置图像像素值
reader->SetImageRange(1,90); //设置图片数量
reader->SetDataByteOrderToLittleEndian();//不知道什么鬼
reader->SetFilePrefix("E:\\emphysema M66\\L00");//图片路径
reader->SetFilePattern("%s%d.bmp");
reader->SetDataSpacing(3,3,1);//像素间的间隔
这些数值设置对就OK啦
fightwish
一年级
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
吧主你看,这是我运行gpu体绘制时候GPULoad情况,如果我没有理解错的话,这应该是说明GPU在工作?作为对比,不用gpu的体绘制,GPULoad基本为0。(GPU-Z图)
DX我装了DX9
64BIT WIN7 VTK7.0
先安装的DX后装的VTK,但是CMAKE时候搜索没有和DX相关的选项,编译后有vtkGPU相关,是否可以认为安装没有问题?(因为我觉得vtkGPUVolumeRayCastMapper是只使用gpu进行体绘制,可以运行相关的例子就说明没问题?)
谢谢吧主
马骏1259389904
二年级
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
vtk后面的版本将要弃用vtkVolumeRayCastMapper,推荐用vtkFixedPointVolumeRayCastMapper
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> volumeMapper =
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper>::New();
volumeMapper->SetBlendModeToComposite();
volumeMapper->SetInputConnection(reader->GetOutputPort());
//volumeMapper->SetVolumeRayCastFunction(rayCastFun);
//设置光线采样距离
volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance()*4);
//设置图像采样步长
volumeMapper->SetAutoAdjustSampleDistances(0);
volumeMapper->SetImageSampleDistance(1);
vtkSmartPointer<vtkVolumeProperty> volumeProperty =
vtkSmartPointer<vtkVolumeProperty>::New();
volumeProperty->SetInterpolationTypeToLinear();
//volumeProperty->ShadeOn(); //打开或者关闭阴影测试
volumeProperty->SetAmbient(0.4);
volumeProperty->SetDiffuse(0.6);
volumeProperty->SetSpecular(0.2);
vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity =
vtkSmartPointer<vtkPiecewiseFunction>::New();
compositeOpacity->AddPoint(70, 0.00);
compositeOpacity->AddPoint(90, 0.40);
compositeOpacity->AddPoint(180, 0.60);
volumeProperty->SetScalarOpacity(compositeOpacity); //设置不透明度传输函数
vtkSmartPointer<vtkPiecewiseFunction> volumeGradientOpacity =
vtkSmartPointer<vtkPiecewiseFunction>::New();
volumeGradientOpacity->AddPoint(10, 0.0);
volumeGradientOpacity->AddPoint(90, 0.5);
volumeGradientOpacity->AddPoint(100, 1.0);
//volumeProperty->SetGradientOpacity(volumeGradientOpacity);//设置梯度不透明度效果对比
vtkSmartPointer<vtkColorTransferFunction> color =
vtkSmartPointer<vtkColorTransferFunction>::New();
color->AddRGBPoint(0.000, 0.00, 0.00, 0.00);
color->AddRGBPoint(64.00, 1.00, 0.52, 0.30);
color->AddRGBPoint(190.0, 1.00, 1.00, 1.00);
color->AddRGBPoint(220.0, 0.20, 0.20, 0.20);
volumeProperty->SetColor(color);
vtkSmartPointer<vtkVolume> volume =
vtkSmartPointer<vtkVolume>::New();
volume->SetMapper(volumeMapper);
volume->SetProperty(volumeProperty);
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
ren->SetBackground(1.0, 1.0, 1.0);
ren->AddVolume( volume );
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren);
renWin->SetSize(640, 480);
renWin->Render();
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
ren->ResetCamera();
renWin->Render();
iren->Start();
蜀道不易
托儿所
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> volumeMapper =
vtkSmartPointer<vtkFixedPointVolumeRayCastMapper>::New();
这一句就报错了,是vtk编译的问题吗?
江左梅郎杀阡陌
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
vtkSmartPointer<vtkSimplePointsReader> reader = vtkSmartPointer<vtkSimplePointsReader>::New();
reader->SetFileName ( "D:\\qiguandata.txt" );
我用vtk读取了一个已分割好的气管的点的数据 x y z那种的。读进来后 都是一堆点。如何弄成体绘制那种。。。
dwyhbpwn
托儿所
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
VTK进行体绘制,vtkImageData数据变化后,如何重新让三维图像重建
vtkImageData m_img数据变化后,如何让三维图像重新生成,
m_cast = vtkSmartPointer<vtkImageCast>::New();
m_cast->SetInput(m_img);
m_ComositeFun =vtkSmartPointer<vtkVolumeRayCastCompositeFunction>::New();
m_volumeProperty =vtkSmartPointer<vtkVolumeProperty>::New();
m_compositeOpacity = vtkSmartPointer<vtkPiecewiseFunction>::New();
m_color = vtkSmartPointer<vtkColorTransferFunction>::New();
m_renWin = vtkSmartPointer<vtkRenderWindow>::New();
云水劲松
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
吧主大大,用QT+VTK来实现体绘制有没有什么特别要注意的地方?
我用vtkVolumeRayCastMapper 来编写的体绘制的程序。编译通过了,但是调试的时候出现问题。
是我的环境配置问题?还是其他的原因啊?
后来我又用读取显示JPG图像文件的代码跑,虽然没有出现这个问题,但是加断点后发现似乎根本就没有数据传进来。在断点处看到提示红色的文字如下:
<无可用信息,未为 vtkRenderingOpenGL2-7.0.dll 加载任何符号> UseTDx=...}QVTKWidget *
云水劲松
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
云水劲松
初三年级
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
之前的问题都解决了。
现在体绘制成功了,但是感觉好粗糙啊。体绘制调参或者优化的方法有没有啊?吧主大大指点一下。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示