2015-01-30 7 views
1

나는 jogl에서 초보자입니다. DICOM 이미지의 3D 렌더링을 코딩하고 있습니다. jogl을 사용하여 이미지를 3D 렌더링하는 동안 3D 렌더링을 만들었습니다. 이어지는 단계는 다음과 같습니다.jogl을 사용하여 DICOM 이미지의 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. 이들 이미지를 차례로 배치하여 만든 큐브입니다. 3D 뷰를 회전시키면서 등

줌 회전 같은 3D 이미지

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(); 
} 
  • 감안 시설, 화상의 광 강도는 감소하고 일정 각도에서, 검은 띠가 나타난다. 그 부분을 확대하면 2 개의 이미지에 간격이 표시됩니다. 어떤 단계에서 잘못 가고 있습니까? 나를 안내 해줘. 미리 감사드립니다. On Rotation enter image description here

  • +0

    매우 광범위한 주제입니다. 볼륨 렌더링에 관한 모든 책이 있습니다. 표시되는 것을 쉽게 얻을 수 있습니다. 그것을 정확하고 효과적으로하기 위해서는 훨씬 더 많은 것을 필요로합니다. –

    +1

    @Reto Koradi : NEHE 자습서를 읽었습니다. 이를 바탕으로 위에 코딩했습니다. 정확하고 효율적으로 만들 수 있도록 안내해 주시겠습니까? 나는 적절한 지침을 얻지 못하고있다. 제발 링크 나 사이트 제안 해 주시겠습니까? – Deepti

    +0

    이 영역에서 일한 결과는 http://retokoradi.com/volume-rendering/에서 확인할 수 있습니다. 그렇다고해서 구현 세부 사항을 설명 할 수는 없으므로 아마도 결과를 복제하는 데별로 도움이되지 못할 것입니다. 그것은 어느 정도 공유 할 수없는 몇 가지 독창적 인 부분이있는 상당 부분의 소프트웨어입니다. –

    답변

    1

    당신이 데이터 세트에 고정 된 방향으로 슬라이스를 그리면

    First View

    ,이 아니라 긴 보는 방향이 다소 직교 조각에 같이 합리적으로 작동합니다. 다른 각도에서는 결과가 점점 악화됩니다.

    극단적 인 경우, 보는 방향이 슬라이스와 같은 평면에있는 경우 기본적으로 아무 것도 볼 수 없습니다. 폴리곤 가장자리를 볼 수 있기 때문입니다.

    볼륨 렌더링을 정확하고 효율적으로 수행하는 방법은 매우 넓은 영역입니다. 주제에 관한 모든 책이 있습니다. 그리고 부분적으로는 매우 비싼 상용 솔루션입니다. 많은 솔루션이 실제로 제대로 작동하지는 않습니다.

    시작점을 알려주기 : 한 가지 기본 접근법은 데이터를 3D 텍스처에 저장 한 다음 항상 뷰 방향에 직각 인 슬라이싱 평면을 그립니다.