问题标签 [volume-rendering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1132 浏览

3d - vtkgdcmimagereader 用于体绘制

我想阅读一系列 2D dicom 图像。然后,我将其显示为 3D 体积。为此,我按照以下步骤操作:

1- ipp 排序器 2- setfilenames 3- vtkimagechangeinformation

在这些之后,我尝试使用 vtkimageviewer2 将它们可视化。我正在发送我编写的几乎所有代码。我很确定它会加载和排序图像。但它给出了一个错误,如

排序成功:0.5

排序成功:1.5

程序意外结束。

这是我的代码:

谢谢你的帮助。

0 投票
1 回答
186 浏览

opengl - 处理大量图像

我有一个巨大的 3D 卷,大小超过 2GB。我想加载这些数据,对其进行处理并在我的应用程序中显示为 3D 体积,在其中执行体积 cn 的缩放和旋转。

我看到了加载大量数据并显示它的应用程序。

我的疑问是,Windows32 位应用程序地址空间被限制为 2GB,那么这些应用程序内部使用什么技术来处理这么大的容量?

或者

如何在我的应用程序中以最佳性能管理这些海量数据?

0 投票
2 回答
12759 浏览

math - 如何从 OpenGL 模型视图矩阵中获取视图方向?

我正在编写一个体积渲染程序,它不断调整一些平面几何形状,使其始终面向相机。每当相机旋转时,平面几何体就会旋转,以使其看起来好像不动 - 相对于场景中的其他一切。(我使用相机的观察方向作为这些平面几何图形的法线向量。)

目前我正在手动存储一个自定义旋转向量('rotations')并在渲染函数中应用它的影响如下:

然后稍后我通过使用旋转值围绕 x 和 y 轴旋转初始视图方向 (0,0,-1) 来获得视图方向。这是通过以下方式完成的。最终的查看方向存储在“视图”中:

现在我将这个程序移动到一个更大的项目中,其中相机旋转由第 3 方图形库处理。我没有旋转矢量。有什么方法可以从以下位置获取视图方向向量:

我正在查看这个以供参考http://3dengine.org/Modelview_matrix但我仍然不知道如何提出视图方向。有人可以向我解释它是否可能以及它是如何工作的?

0 投票
1 回答
458 浏览

javascript - Texture is not generated valid (probably)

My app for volume ray casting in WebGL is almost done. But i have found a problem. I have to simulate 3D texture by 2D texture. It is not problem. I am creating a huge texture from small slices. Dimensions of huge texture are about 4096x4096px. Problem is, that in some examples (it depends on number of slices) there is creating sth. like on the image bellow (i filled huge texture to white to be the fragment more visible).

Fragment in image - cube should be only white without stripes

I know that num of stripes depends on num of rows in huge texture. I am generating this texture near to 4096x4096px (but not exactly). It could be 4080x4060 etc. I think, problem is, that Three.js load my texture to gpu, but dont scale it to 4096x4096..so i am reading in fragment shader black color on the border of texture, because webgl work only with squared textures (512x512, 1024x1024... etc.). It caused black stripes in rendered image.

Problem is, that my Three.js app doesnt work with WebGL Inspector..so i am not sure.

Any idea how to fix that?

Thanks.

Tomáš

EDIT:

Ok, i have found problem..and "solution"...but solution didnt work good. I have 2 datasets. One is OK, second still the same error.

2 variants of code (each one works fine for one dataset but not for second) :

First)

Second)

I really don't know, why it doesnt work for both datasets...i tried to dump GPU (WebGL inspector). Both textures are loaded valid on GPU (same orientation, same dimensions). Everything is same.

Please help me....thanks.

0 投票
3 回答
8647 浏览

python - 在 x、y 和 z 中具有不同间隔的定期采样 3D 数据的快速插值

我有一些体积成像数据,这些数据由在 x、y、z 中的规则网格上采样的值组成,但具有非立方体素形状(z 中相邻点之间的空间大于 x、y 中的空间)。我最终希望能够在穿过体积的任意 2D 平面上插值,如下所示:

在此处输入图像描述

我知道scipy.ndimage.map_coordinates,但在我的情况下使用它并不那么简单,因为它隐含地假设输入数组中元素的间距在各个维度上是相等的。我可以首先根据最小的体素维度对输入数组进行重新采样(这样我的所有体素都将成为立方体),然后用于map_coordinates在我的平面上进行插值,但对我的数据进行两次插值似乎不是一个好主意。

我也知道scipy对于不规则间隔的 ND 数据(等)有各种插值器LinearNDInterpolatorNearestNDInterpolator但对于我的目的而言,这些插值器非常缓慢且占用大量内存。鉴于我知道值在每个维度内规律地间隔,插值数据的最佳方法是什么?

0 投票
1 回答
1625 浏览

three.js - 体积射线投射无法正常工作(Webgl + GLSL + Three.js)

我试图提高我的体积射线投射算法的质量。我设置了一个较小的光线投射步骤(质量更好),但它会导致问题。它在下面的图片上(不应该出现的黑色区域)。

我正在使用 RGB 立方体来获取体积中的光线方向。我想,我有和那里一样的算法:volume rendering (using glsl) with ray cast algorithm

有没有人有一些想法,可能是哪里出了问题?我需要解决这个问题,因为我的文凭论文的截止日期是关闭:(我真的不知道,为什么它不起作用:(

在此处输入图像描述 在此处输入图像描述

编辑: 我不能在那里显示我的所有代码(这可能是个问题,如果我会在学校提供之前提供它)。但通读卷的关键代码:

然后在循环中:

EDIT2:(对不起,但喜欢评论太长了)

是的,纹理很嘈杂......我试图用 alpha: 删除条件if(accumulatedColor.a > 1.0),但结果是一样的。我认为这与射线的长度和步长的大小有直接的关系。我尝试了很多组合,我发现了这些东西。如果步长很大,我可以通过所有音量,但如果它很小,我真的无法通过音量(也许)。如果步幅非常大,我可以看到镜像对象(如果我在 GPU 上超出纹理,可能是由于重复纹理造成的)。如果步长太小,我只能映射纹理的一小部分 - >看起来,那条光线太短了,但实际上他不是。问题是,为什么将 3D 坐标映射到 2D 纹理是错误的,并且取决于步长。

0 投票
1 回答
1155 浏览

directx - 多纹理 - 3D 纹理的两层之间的插值

我正在尝试使用由多层材料组成的 3D 纹理来实现地形纹理,并在材料之间进行平滑混合。

也许我的插图会更好地解释它:
美丽的照片

试想一下,每种颜色都是很酷的地形纹理,比如草、石头等。
我想让它们正确混合,但是用目前的方法,除了我想要出现的纹理之外,我还得到了请求之间的所有纹理(这似乎是合乎逻辑的,因为我读过,3D 纹理被视为三维数组而不是纹理柱)。
当前(显然是愚蠢的)方法很简单(“当前”结果是使用点插值渲染的,所需的结果是手绘的):

顶点:
Vertex 1: Position = Vector3.Zero, UVW = Vector3.Zero
Vertex 2: Position = Vector3(0, 1, 0), UVW = Vector3(0, 1, 0.75f)
Vertex 3: Position = Vector3(0, 0, 1), UVW = Vector3(1, 0, 1)
如您所见,三角形的第一个顶点使用第一种材质(红色的),第二个顶点使用第三种材质(蓝色的),第三个顶点使用最后的第四种材质(黄色的)。

这就是它在像素着色器中的完成方式(UVW 直接传递而无需更改):
float3 texColor = tex3D(ColorTextureSampler, input.UVW);
return float4(texColor, 1);
我选择的原因是我的地形结构。地形是使用行进立方体从体素(每个体素都有材质 ID)生成的。每个顶点都是“焊接的”,因为网格非常大,我不想让每个三角形都独立(但如果无法使用连接顶点解决我的问题,我仍然可以这样做)。
我最近想到了在每个顶点中存储三角形其他两个顶点的材质 ID 及其混合因子(我会有一个 float2 UV 对,float3 用于材质 ID,float3 用于每个材质 ID 的混合因子),但我如果不将我的网格分成单独的三角形,则看不到任何方法来实现这一点。
任何帮助将不胜感激。我的目标是使用 C# 和 Direct3D 9 API 的 SlimDX。谢谢阅读。
PS:如果我在这篇文章中犯了一些错误,我很抱歉,英语不是我的母语。

0 投票
1 回答
1092 浏览

opengl - OpenGL bad performance with 3D texture

I try to implement a Volume Renderer with OpenGL and ray casting. Everything works well but I get a performance problem when I look in a negative direction. This means if I look in positive x direction (viewing vector 1, 0, 0) is the performance ok. But if I look in negative x direction (-1, 0, 0) the framerate goes down to 2-3 fps. I use a 3D texture to hold the data of im dataset. Is there maybe a problem with the caching of the texture on the GPU? Or what could be the problem that the framerate goes down, when I look in a negative direction?

It would be great if I get some tipps, what the problem could be.

0 投票
0 回答
1325 浏览

c++ - 使用 OpenGL glTexture3D 进行纹理伪影和双线性过滤

我正在开发一个体积渲染应用程序,我必须在其中切割体积数据的平面。问题是,在有限的分辨率下,我会在白色区域的边界上看到一些伪影。

体积是一个 GLubyte M[depth][width][height],其中有255s 和0s。正如你所看到的,当我旋转我的模型时,边界上有明显的问题。

我已经有以下 OpenGL 设置:

我想知道是否可以使用 sampler3D 在 GLSL 中为 texture3D 编写一个双线性过滤器,这有助于消除颗粒状边界或那些恼人的伪影。

有许多用于纹理 2D 的双线性过滤示例,但我找不到用于 3D 纹理的示例。

是否可以将此代码改编为 3D 采样器?

或者是否可以在不增加体积数据大小的情况下进行更好的插值(实际上是 512x512x512 GLubyte)

0 投票
3 回答
6500 浏览

matlab - 3D 图像上的 PCA 以获得 3 个主轴

我有一个解剖体积图像 (B),它是一个索引图像 i、j、k:

该文件仅包含 0 和 1。

我可以用等值面正确地可视化它: isosurface(B);

我想在 j 中的某个坐标处切割音量(每个音量都不同)。

问题是体积是垂直倾斜的,它可能有 45% 度,所以切割不会跟随解剖体积。

我想为数据获得一个新的正交坐标系,因此我在坐标 j 中的平面将以更准确的方式切割解剖体积。

有人告诉我用 PCA 来做,但我不知道怎么做,阅读帮助页面也没有帮助。欢迎任何方向!

编辑:我一直在遵循建议,现在我得到了一个以零为中心的新卷,但我认为轴没有按照应有的解剖图像。这些是前后图像: 原始图像

在 pca 图像之后,零居中

这是我用来创建图像的代码(我从答案和评论中获取了一些代码):

任何人都可以提供一个提示可能发生的事情吗?似乎问题可能出在 reshape 命令上,我是否有可能取消之前完成的工作?