• 【转】OpenGL 显示DICOM医学图像


    OpenGL 显示DICOM医学图像

                                                                                                                                                    关键词:OpenGL、GLSL、DICOM

    一、数据读取

            DICOM文件的读取使用DCMTK库,DcmFileFormat 成员函数findAndGetUint16Array(DCM_PixelData, pPixels);pPixels是指向数据的指针。

    二、创建查找表并保存为纹理

    1. glGenTextures(1, &lutTexture);    
    2. glBindTexture(GL_TEXTURE_1D,lutTexture);  
    3. glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  
    4. glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  
    5.         glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);  
    6. glTexImage1D(GL_TEXTURE_1D, 0, GL_LUMINANCE16, texSize, 0, GL_LUMINANCE, GL_UNSIGNED_SHORT, lut16U);  

                         lut16U是查找表指针。

    三、将图像数据保存为纹理

    1.           glPixelStorei(GL_UNPACK_ALIGNMENT,2);  
    2. glGenTextures(1, &imgTexture);  
    3. glBindTexture(GL_TEXTURE_2D, imgTexture);  
    4. glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);  
    5. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  
    6. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  
    7. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);  
    8. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);  
    9. glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE16, img_width, img_height,0, GL_LUMINANCE, GL_UNSIGNED_SHORT,pData);  

                         pData是数据指针

    三、着色器代码

    1. void main()  
    2. {  
    3.     vec4 finalCol;  
    4.     float tmpColor;  
    5.       
    6.     vec4 color = vec4(texture2D(mainTexture, gl_TexCoord[0].st)) * multiplier;  
    7.     color.rgb -= minVal;  
    8.   
    9.     if (invertGray == true) {  
    10.         finalCol.r = 1-texture1D(lutTexture, color.r).r;  
    11.         finalCol.g = 1-texture1D(lutTexture, color.g).g;  
    12.         finalCol.b = 1-texture1D(lutTexture, color.b).b;  
    13.         finalCol.a = color.a;  
    14.     }  
    15.     else{  
    16.         finalCol.r = texture1D(lutTexture, color.r).r;  
    17.         finalCol.g = texture1D(lutTexture, color.g).g;  
    18.         finalCol.b = texture1D(lutTexture, color.b).b;  
    19.         finalCol.a = color.a;  
    20.     }     
    21.     gl_FragColor = finalCol;  
    22. }  

     

    已实现功能:右键调节窗宽窗位、反色、缩放、平移;

    待实现功能:测量工具、汉字显示、高级应用。

     



     

     

    本文来源:http://blog.csdn.net/yunzhaoqiang/article/details/8603463

  • 相关阅读:
    HIDS逐渐的成为主流 java程序员
    怎样做反向域名解析(反向DNS解析)? java程序员
    入侵检测系统的性能的辨别(2) java程序员
    Codeforces Round #146 (Div. 2)
    usaco1.34Prime Cryptarithm
    poj3667 hotel(线段树区间合并)
    poj1330Nearest Common Ancestors(水LCA)
    hdu4135Coprime(容斥原理)
    hdu1541Stars(树状数组)
    usaco 1.43Arithmetic Progressions
  • 原文地址:https://www.cnblogs.com/ppffs/p/3071432.html
Copyright © 2020-2023  润新知