advancedusfusion.frag 6.56 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
// ================================================================================================
// 
// This file is part of the CAMPVis Software Framework.
// 
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
//      Chair for Computer Aided Medical Procedures
//      Technische Universitt Mnchen
//      Boltzmannstr. 3, 85748 Garching b. Mnchen, Germany
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
// 
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
// 
// Legal disclaimer provided by the BSD license:
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
// 
// ================================================================================================

30 31
in vec3 ex_TexCoord;
out vec4 out_Color;
32

33
#include "tools/colorspace.frag"
34
#include "tools/texture2d.frag"
35 36
#include "tools/texture3d.frag"
#include "tools/transferfunction.frag"
37

38 39 40
#ifdef USE_3D_TEX
#define SAMPLER_TYPE sampler3D
#define TEXPARAMS_TYPE TextureParameters3D
41
#define TEXTURE_LOOKUP_FUNC texture
42 43 44
#else
#define SAMPLER_TYPE sampler2D
#define TEXPARAMS_TYPE TextureParameters2D
45
#define TEXTURE_LOOKUP_FUNC texture
46
#endif
47

48 49
uniform SAMPLER_TYPE _usImage;
uniform TEXPARAMS_TYPE _usTextureParams;
50

51 52 53 54 55
uniform SAMPLER_TYPE _blurredImage;
uniform TEXPARAMS_TYPE _blurredTextureParams;

uniform SAMPLER_TYPE _confidenceMap;
uniform TEXPARAMS_TYPE _confidenceTextureParams;
56 57 58

uniform sampler1D _transferFunction;
uniform TFParameters1D _transferFunctionParams;
59

60 61 62
uniform sampler1D _confidenceTF;
uniform TFParameters1D _confidenceTFParams;

63
uniform int _sliceNumber;
64
uniform int _viewIndex;
65 66
uniform float _confidenceScaling;
uniform float _hue;
67
uniform float _blurredScale;
68

69
void main() {
70
#ifdef USE_3D_TEX
71
    vec3 texCoord = vec3(ex_TexCoord.xy, _usTextureParams._sizeRCP.z * (_sliceNumber + 0.5));
72 73 74
#else
    vec2 texCoord = ex_TexCoord.xy;
#endif
75

76 77 78
    vec4 texel = TEXTURE_LOOKUP_FUNC(_usImage, texCoord);
    vec4 blurred = TEXTURE_LOOKUP_FUNC(_blurredImage, texCoord) * _blurredScale;
    float confidence = clamp(TEXTURE_LOOKUP_FUNC(_confidenceMap, texCoord).r * _confidenceScaling, 0.0, 1.0);
79
    float uncertainty = lookupTF(_confidenceTF, _confidenceTFParams, confidence).a;
80

81
    if (confidence <= 0.0) {
82
        out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
83 84 85 86
    }
    else {
        switch (_viewIndex) {
            case 0:
87
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
88 89
                break;
            case 1:
90
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, blurred.r);
91 92
                break;
            case 2:
93
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, confidence);
94 95
                break;
            case 3:
96
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
97 98
                vec3 hsv = rgb2hsv(out_Color.xyz);
                hsv.x = _hue;
99
                hsv.y = uncertainty;
100 101 102
                out_Color.xyz = hsv2rgb(hsv);
                break;
            case 4:
103
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
104 105
                vec3 hsl = rgb2hsl(out_Color.xyz);
                hsl.x = _hue;
106
                hsl.y = uncertainty;
107 108 109
                out_Color.xyz = hsl2rgb(hsl);
                break;
            case 5:
110
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
111 112
                vec3 tsl = rgb2tsl(out_Color.xyz);
                //tsl.x = _hue;
113
                //tsl.y = uncertainty;
114 115 116
                out_Color.xyz = tsl2rgb(tsl);
                break;
            case 6:
117
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
118 119
                vec3 hcl = rgb2hcl(out_Color.xyz);
                hcl.x = _hue;
120
                hcl.y = uncertainty;
121 122 123
                out_Color.xyz = hcl2rgb(hcl);
                break;
            case 7:
124
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
125 126
                vec3 hcy = rgb2hcy(out_Color.xyz);
                hcy.x = _hue;
127
                hcy.y = uncertainty;
128 129 130
                out_Color.xyz = hcy2rgb(hcy);
                break;
            case 8:
131
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
132 133
                vec3 lch = rgb2lch(out_Color.xyz);
                lch.z = 6.2831853 * _hue;
134
                lch.y = 100.0 * (uncertainty);
135
                out_Color.xyz = lch2rgb(lch);
136 137
                break;
            case 9:
138
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, texel.r);
139 140
                vec3 hlch = lab2lch(xyz2hlab(rgb2xyz(out_Color.xyz)));
                //hlch.z = 6.2831853 * _hue;
141
                //hlch.y = 100.0 * (uncertainty);
142 143 144
                out_Color.xyz = xyz2rgb(hlab2xyz(lch2lab(hlch)));
                break;
            case 10:
145
                float intensity = mix((2.0 * texel.r - blurred.r), blurred.r, uncertainty);
146 147
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, intensity);
                break;
148
            case 11:
149
                float lod = max(floor((uncertainty) * 6.0), 0.0);
150

151
                vec4 lodTexel = texture(_usImage, texCoord, lod);
152
                out_Color = lookupTF(_transferFunction, _transferFunctionParams, lodTexel.r);   
153 154
                break;
        }
155
    }
156
}