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
}