Starting from 2021-07-01, all LRZ GitLab users will be required to explicitly accept the GitLab Terms of Service. Please see the detailed information at https://doku.lrz.de/display/PUBLIC/GitLab and make sure that your projects conform to the requirements.

differenceimage.frag 3.23 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43
// ================================================================================================
// 
// 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.
// 
// ================================================================================================

in vec3 ex_TexCoord;
out vec4 out_Color;

#include "tools/texture3d.frag"

uniform sampler3D _referenceTexture;
uniform TextureParameters3D _referenceTextureParams;

uniform sampler3D _movingTexture;
uniform TextureParameters3D _movingTextureParams;

uniform float _zTex;
uniform mat4 _registrationInverse;

44 45 46
uniform bool _applyMask;
uniform vec2 _xClampRange;
uniform vec2 _yClampRange;
47
uniform vec2 _zClampRange;
48

49
void main() {
50 51
    float result = 0.0;
    float difference = 0.0;
52
    float sad = 0.0;
53

54 55 56 57 58 59
    if (   ex_TexCoord.x >= _xClampRange.x && ex_TexCoord.x <= _xClampRange.y 
        && ex_TexCoord.y >= _yClampRange.x && ex_TexCoord.y <= _yClampRange.y
        && _zTex >= _zClampRange.x         && _zTex <= _zClampRange.y) {
        // compute lookup coordinates
        vec3 referenceLookupTexCoord = vec3(ex_TexCoord.xy, _zTex);
        vec4 movingLookupTexCoord = _registrationInverse * vec4(referenceLookupTexCoord, 1.0);
60

61
        // fetch texels
62
        float referenceValue = texture(_referenceTexture, referenceLookupTexCoord).r;
63 64 65
        float movingValue = 0.0;
        
        if (!_applyMask || referenceValue > 0.0)
66
            movingValue = texture(_movingTexture, movingLookupTexCoord.xyz).r;
67

68
        // compute differences
69
        difference = referenceValue - movingValue;
70 71 72 73
        sad = abs(difference);
        //float ssd = difference * difference;
    }
    
74
    // write output color
75 76
    result = difference;
    out_Color = vec4(result, result, result, result);
77
}