Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

imagerepresentationlocal.h 11.3 KB
 schultezub committed Jan 16, 2013 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 // ================================================================================================ // // This file is part of the CAMPVis Software Framework. // // If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved, // Christian Schulte zu Berge // Chair for Computer Aided Medical Procedures // Technische Universität München // Boltzmannstr. 3, 85748 Garching b. München, 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. // // ================================================================================================ #ifndef IMAGEREPRESENTATIONLOCAL_H__ #define IMAGEREPRESENTATIONLOCAL_H__  schultezub committed Jan 18, 2013 33 #include "core/datastructures/genericabstractimagerepresentation.h"  schultezub committed Jan 16, 2013 34 35 36 37 38 39 40  #include "core/tools/concurrenthistogram.h" #include "core/tools/endianhelper.h" #include "core/tools/interval.h" #include "core/tools/weaklytypedpointer.h" namespace campvis {  schultezub committed Jan 18, 2013 41  class ImageRepresentationDisk;  schultezub committed Jan 16, 2013 42 43 44 45 46 47  /** * Abstract base class for storing image data in the local memory. * * \todo implement padding, add some kind of cool iterators */  schultezub committed Jan 18, 2013 48  class ImageRepresentationLocal : public GenericAbstractImageRepresentation {  schultezub committed Jan 16, 2013 49 50 51 52 53 54 55 56 57 58  public: typedef ConcurrentGenericHistogramND IntensityHistogramType; /** * Creates a new ImageData representation in local memory. * * \param dimensionality Dimensionality of data * \param size Size of this image (number of elements per dimension) * \param baseType Base type of the image data. */  schultezub committed Jan 21, 2013 59  ImageRepresentationLocal(const ImageData* parent, WeaklyTypedPointer::BaseType baseType);  schultezub committed Jan 16, 2013 60 61 62 63 64 65  /** * Destructor */ virtual ~ImageRepresentationLocal();  schultezub committed Jan 18, 2013 66 67 68 69 70 71 72 73 74  /** * Performs a conversion of \a source to an ImageRepresentationLocal if feasible. * Returns 0 if conversion was not successful or source representation type is not compatible. * \note The caller has to take ownership of the returned pointer if not 0. * \param source Source image representation for conversion. * \return A pointer to a local representation of \a source or 0 on failure. The caller has to take ownership. */ static ImageRepresentationLocal* tryConvertFrom(const AbstractImageRepresentation* source);  schultezub committed Jan 16, 2013 75 76 77 78  /// \see AbstractData::clone() virtual ImageRepresentationLocal* clone() const = 0; /// \see ImageData::getSubImage()  schultezub committed Jan 18, 2013 79  virtual ImageRepresentationLocal* getSubImage(const ImageData* parent, const tgt::svec3& llf, const tgt::svec3& urb) const = 0;  schultezub committed Jan 16, 2013 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211  /** * Returns a WeaklyTypedPointer to the image data. * \note The pointer is still owned by this ImageRepresentationLocal. If you want a copy, use clone(). * \return A WeaklyTypedPointer to the image data. */ virtual const WeaklyTypedPointer getWeaklyTypedPointer() const = 0; /** * Returns the normalized value of the element at the given index and channel. * - for \em unsigned integer types, the value range is mapped linearly to [0.0;1.0] * - for \em signed integer types, the value range is mapped linearly to [-1.0;1.0] * - floating point types are not mapped * * Simple algorithms on images might not always want to test for the actual base data type. * For them access to the normalized element values provided here might be enough. * * \note This method is virtual => know the costs! * \sa ImageRepresentationLocal::setElementNormalized * \param index Element index * \param channel Image channel * \return A normalized float representation of the element at the given position and channel. */ virtual float getElementNormalized(size_t index, size_t channel) const = 0; /** * Returns the normalized value of the element at the given position and channel. * - for \em unsigned integer types, the value range is mapped linearly to [0.0;1.0] * - for \em signed integer types, the value range is mapped linearly to [-1.0;1.0] * - floating point types are not mapped * * Simple algorithms on images might not always want to test for the actual base data type. * For them access to the normalized element values provided here might be enough. * * \note This method is more expensive than the version directly using the element index. * \note This method is virtual => know the costs! * \sa ImageRepresentationLocal::setElementNormalized * \param position Element position within the image * \param channel Image channel * \return A normalized float representation of the element at the given position and channel. */ virtual float getElementNormalized(const tgt::svec3& position, size_t channel) const = 0; /** * Returns the normalized value of the element at the given position and channel using linear interpolation. * - for \em unsigned integer types, the value range is mapped linearly to [0.0;1.0] * - for \em signed integer types, the value range is mapped linearly to [-1.0;1.0] * - floating point types are not mapped * * Simple algorithms on images might not always want to test for the actual base data type. * For them access to the normalized element values provided here might be enough. * * \note This method is virtual => know the costs! * \sa ImageRepresentationLocal::getElementNormalized * \param position Element position within the image * \param channel Image channel * \return A normalized float representation of the element at the given position and channel. */ virtual float getElementNormalizedLinear(const tgt::vec3& position, size_t channel) const = 0; /** * Sets the element at the given index and channel denormalized from the given value \a value. * - for \em unsigned integer types, the value range is mapped linearly to [0.0;1.0] * - for \em signed integer types, the value range is mapped linearly to [-1.0;1.0] * - floating point types are not mapped * * Simple algorithms on images might not always want to test for the actual base data type. * For them access to the normalized element values provided here might be enough. * * \note This method is virtual => know the costs! * \sa ImageRepresentationLocal::getElementNormalized * \param index Element index * \param channel Image channel * \param value Normalized Value to set */ virtual void setElementNormalized(size_t index, size_t channel, float value) = 0; /** * Sets the element at the given position and channel denormalized from the given value \a value. * - for \em unsigned integer types, the value range is mapped linearly to [0.0;1.0] * - for \em signed integer types, the value range is mapped linearly to [-1.0;1.0] * - floating point types are not mapped * * Simple algorithms on images might not always want to test for the actual base data type. * For them access to the normalized element values provided here might be enough. * * \note This method is more expensive than the version directly using the element index. * \note This method is virtual => know the costs! * \sa ImageRepresentationLocal::getElementNormalized * \param position Element position within the image * \param channel Image channel * \param value Normalized Value to set */ virtual void setElementNormalized(const tgt::svec3& position, size_t channel, float value) = 0; /** * Returns the range of normalized intensities. * All * \sa getElementNormalized() * \note The intensity range is computed using lazy evaluation. * \return _normalizedIntensityRange */ const Interval& getNormalizedIntensityRange() const; /** * Returns the intensity distribution normalized to float as 1D histogram. * \note The intensity histogram is computed using lazy evaluation, hence, computation * may take some time. * \return _intensityHistogram */ const IntensityHistogramType& getIntensityHistogram() const; protected: /** * Computes the normalized intensity range. */ void computeNormalizedIntensityRange() const; /** * Computes the intensity histogram. */ void computeIntensityHistogram() const; WeaklyTypedPointer::BaseType _baseType; ///< Base type of the image data mutable tbb::atomic _intensityRangeDirty; ///< Flag whether _normalizedIntensityRange is dirty and has to be recomputed mutable Interval _normalizedIntensityRange; ///< Range of the normalized intensities, mutable to allow lazy instantiation mutable IntensityHistogramType* _intensityHistogram; ///< Intensity histogram, mutable to allow lazy instantiation static const std::string loggerCat_; private:  schultezub committed Jan 18, 2013 212 213 214  static ImageRepresentationLocal* convertToGenericLocal(const ImageRepresentationDisk* source);  schultezub committed Jan 16, 2013 215 216 217 218 219 220 221 222 223  // We don't want this data to be copied - clone() must be enough // (read: We are too lazy to implement a correct copy constructor / assignment-operator) ImageRepresentationLocal(const ImageRepresentationLocal& rhs); ImageRepresentationLocal& operator=(const ImageRepresentationLocal& rhs); }; } #endif // IMAGEREPRESENTATIONLOCAL_H__