使用jogl旋转DICOM图像的3D视图时出现问题

时间:2015-01-30 06:55:04

标签: 3d rotation jogl dicom

我是jogl的新手。我正在编写DICOM图像的3D渲染。使用jogl进行3D渲染时,我创建了粗略的3D视图。遵循的步骤如下:

  1. 导入的DICOM文件堆栈。
  2. 从文件创建BufferedImages。
  3. 为每张图片创建纹理。

        // Create a OpenGL Texture object
        for(int i=0;i<image.length;i++)
        {     
            textures[i] = AWTTextureIO.newTexture(GLProfile.getDefault(), image[i], false); 
    
            textureCoords = textures[i].getImageTexCoords();
            textureTop[i] = textureCoords.top();
            textureBottom[i] = textureCoords.bottom();
            textureLeft[i] = textureCoords.left();
            textureRight[i] = textureCoords.right();
        }
    
  4. 通过一个接一个地放置这些图像来创建这些图像的立方体。

    int x=numberOfImages;
    gl.glBegin(GL_QUADS); 
    
    // To place stack back to front
    for(float i=-numberOfImages*0.0050f;x>0;i=i+0.01f){ 
    
        // Enables this texture's target in the current GL context's state.
        textures[currTextureFilter].enable(gl);
        // Bind the texture with the currently chosen filter to the current OpenGL graphics context.
        textures[currTextureFilter].bind(gl);
        gl.glBegin(GL_QUADS); // of the color cube
    
        gl.glNormal3f(0.0f, 0.0f, (0.1f+i));
        gl.glTexCoord2f(textureLeft[x], textureBottom[x]);
        gl.glVertex3f(-1.0f, -1.0f, (0.1f+i)); // bottom-left of the texture and quad
        gl.glTexCoord2f(textureRight[x], textureBottom[x]);
        gl.glVertex3f(1.0f, -1.0f, (0.1f+i));  // bottom-right of the texture and quad
        gl.glTexCoord2f(textureRight[x], textureTop[x]);
        gl.glVertex3f(1.0f, 1.0f, (0.1f+i));   // top-right of the texture and quad
        gl.glTexCoord2f(textureLeft[x], textureTop[x]);
        gl.glVertex3f(-1.0f, 1.0f, (0.1f+i));  // top-left of the texture and quad
    
        currTextureFilter =x;
    
    
        textures[currTextureFilter].disable(gl);
    
        x--;
        gl.glFlush();
    
        gl.glEnd();
    }
    
  5. 为3D图像提供旋转,缩放等设施。

  6. 在旋转3D视图时,图像的光强度会减小,并且在某个角度会出现黑条。当我缩放该部分时,它显示2张图像中的间隙。 我在任何一步都出错了吗?请指导我。提前谢谢。

    First View On Rotation enter image description here

1 个答案:

答案 0 :(得分:1)

如果您在相对于数据集的固定方向上绘制切片,只要您的查看方向与切片或多或少正交,这将相当有效。从其他角度来看,结果将日益恶化。

在极端情况下,您的查看方向与切片位于同一平面中,您基本上什么也看不见,因为您会看到多边形边缘。

至于如何正确有效地进行体积渲染,这是一个非常广泛的领域。有关于该主题的全书。部分非常昂贵的商业解决方案,其中许多实际上并没有那么好。

只是为您提供一个起点:一种基本方法是将数据存储在3D纹理中,然后绘制始终与查看方向正交的切片平面。