SlideIO 2.9.0
Open-source library for reading of medical images
Loading...
Searching...
No Matches
cvscene.hpp
1// This file is part of slideio project.
2// It is subject to the license terms in the LICENSE file found in the top-level directory
3// of this distribution and at http://slideio.com/license.html.
4#pragma once
5
6#include "slideio/core/slideio_core_def.hpp"
7#include "slideio/base/resolution.hpp"
8#include "slideio/base/slideio_enums.hpp"
9#include "slideio/core/metadata.hpp"
10#include <opencv2/core.hpp>
11#include <vector>
12#include <string>
13#include <list>
14#include "refcounter.hpp"
15#include <mutex>
16#include <functional>
17
18#include "levelinfo.hpp"
19
20#if defined(_MSC_VER)
21#pragma warning( push )
22#pragma warning(disable: 4251)
23#endif
24
25namespace slideio
26{
27 class CVSlide;
38 class SLIDEIO_CORE_EXPORTS CVScene : public RefCounter
39 {
40 public:
42 virtual ~CVScene() = default;
44 virtual std::string getFilePath() const = 0;
45 virtual int getSceneIndex() const = 0;
46 virtual const std::string& getDriverId() const = 0;
48 virtual std::string getName() const = 0;
52 virtual cv::Rect getRect() const = 0;
54 virtual int getNumChannels() const = 0;
59 virtual int getNumZSlices() const {return 1;}
64 virtual int getNumTFrames() const {return 1;}
69 virtual slideio::DataType getChannelDataType(int channel) const = 0;
75 virtual std::string getChannelName(int channel) const;
80 virtual Resolution getResolution() const = 0;
82 virtual double getZSliceResolution() const {return 0;}
84 virtual double getTFrameResolution() const {return 0;}
86 virtual double getMagnification() const = 0;
88 virtual Compression getCompression() const = 0;
97 virtual void readBlock(const cv::Rect& blockRect, cv::OutputArray output);
107 virtual void readBlockChannels(const cv::Rect& blockRect, const std::vector<int>& channelIndices, cv::OutputArray output);
118 virtual void readResampledBlock(const cv::Rect& blockRect, const cv::Size& blockSize, cv::OutputArray output);
130 virtual void readResampledBlockChannels(const cv::Rect& blockRect, const cv::Size& blockSize, const std::vector<int>& channelIndices, cv::OutputArray output);
142 virtual void read4DBlock(const cv::Rect& blockRect, const cv::Range& zSliceRange, const cv::Range& timeFrameRange, cv::OutputArray output);
155 virtual void read4DBlockChannels(const cv::Rect& blockRect, const std::vector<int>& channelIndices, const cv::Range& zSliceRange, const cv::Range& timeFrameRange, cv::OutputArray output);
168 virtual void readResampled4DBlock(const cv::Rect& blockRect, const cv::Size& blockSize, const cv::Range& zSliceRange, const cv::Range& timeFrameRange, cv::OutputArray output);
182 virtual void readResampled4DBlockChannels(const cv::Rect& blockRect, const cv::Size& blockSize, const std::vector<int>& channelIndices, const cv::Range& zSliceRange, const cv::Range& timeFrameRange, cv::OutputArray output);
184 virtual const std::list<std::string>& getAuxImageNames() const {
185 return m_auxNames;
186 }
188 virtual int getNumAuxImages() const {
189 return static_cast<int>(m_auxNames.size());
190 }
194 virtual std::shared_ptr<CVScene> getAuxImage(const std::string& imageName) const;
196 virtual std::string getRawMetadata() const { return m_rawMetadata; }
198 const Metadata& getMetadata() const;
199 virtual void readResampledBlockChannelsEx(const cv::Rect& blockRect, const cv::Size& blockSize,
200 const std::vector<int>& componentIndices, int zSliceIndex, int tFrameIndex, cv::OutputArray output) = 0;
201 virtual int getNumZoomLevels() const;
202 virtual const LevelInfo* getZoomLevelInfo(int level) const;
230 virtual void readResampledLevelBlockChannelsEx(int level, const cv::Rect& levelRect,
231 const cv::Size& blockSize, const std::vector<int>& channelIndices,
232 int zSliceIndex, int tFrameIndex, cv::OutputArray output);
238 void readResampledLevelBlockChannels(int level, const cv::Rect& levelRect,
239 const cv::Size& blockSize, const std::vector<int>& channelIndices,
240 cv::OutputArray output);
247 void readResampledLevel4DBlockChannels(int level, const cv::Rect& levelRect,
248 const cv::Size& blockSize, const std::vector<int>& channelIndices,
249 const cv::Range& zSliceRange, const cv::Range& timeFrameRange,
250 cv::OutputArray output);
251 std::string toString() const;
253 virtual MetadataFormat getMetadataFormat() const { return m_metadataFormat; }
261 const Metadata& getChannelAttributes() const;
262 protected:
264 virtual void setChannelAttribute(int channelIndex, const std::string& attributeName, const std::string& attributeValue);
266 virtual void setChannelAttribute(int channelIndex, const std::string& attributeName, const char* attributeValue);
268 virtual void setChannelAttribute(int channelIndex, const std::string& attributeName, bool attributeValue);
270 virtual void setChannelAttribute(int channelIndex, const std::string& attributeName, int64_t attributeValue);
272 virtual void setChannelAttribute(int channelIndex, const std::string& attributeName, double attributeValue);
273 std::vector<int> getValidChannelIndices(const std::vector<int>& channelIndices);
275 void validateLevel(int level) const;
276 void initializeSceneBlock(const cv::Size& blockSize, const std::vector<int>& channelIndices,
277 cv::OutputArray output) const;
285 virtual MetadataBuilder buildMetadataTree() const;
286
287 protected:
288 std::list<std::string> m_auxNames;
289 std::vector<LevelInfo> m_levels;
290 mutable std::mutex m_readBlockMutex;
291 std::string m_rawMetadata;
292 MetadataFormat m_metadataFormat = MetadataFormat::None;
293 MetadataBuilder m_channelAttrs;
294
295 private:
301 void assemble4DBlock(const cv::Size& blockSize, const std::vector<int>& channelIndicesIn,
302 const cv::Range& zSliceRange, const cv::Range& timeFrameRange,
303 const std::function<void(int zSliceIndex, int tFrameIndex, cv::OutputArray plane)>& readPlane,
304 cv::OutputArray output);
305 mutable std::once_flag m_metadataOnce;
306 mutable Metadata m_metadata;
307 mutable std::once_flag m_channelAttrsOnce;
308 mutable Metadata m_channelAttributesMeta;
309 };
310}
311
312#define CVScenePtr std::shared_ptr<slideio::CVScene>
313
314#if defined(_MSC_VER)
315#pragma warning( pop )
316#endif
class CVScene represents a base class for opencv based representations of raster images contained in ...
Definition: cvscene.hpp:39
virtual Compression getCompression() const =0
returns compression of the raster data
virtual MetadataFormat getMetadataFormat() const
returns metadata format of the image
Definition: cvscene.hpp:253
virtual slideio::DataType getChannelDataType(int channel) const =0
returns channel data type.
virtual const std::list< std::string > & getAuxImageNames() const
returns list of auxiliary image names.
Definition: cvscene.hpp:184
virtual double getMagnification() const =0
returns slide magnification extracted from the slide metadata.
virtual std::string getName() const =0
returns scene name
virtual int getNumChannels() const =0
returns number of image channels.
virtual int getNumTFrames() const
returns number of time frames in the image.
Definition: cvscene.hpp:64
virtual cv::Rect getRect() const =0
returns image rectangle.
virtual std::string getRawMetadata() const
returns string of serialized metadata. Content of the string depends on image format.
Definition: cvscene.hpp:196
virtual std::string getFilePath() const =0
returns path of the slide
virtual ~CVScene()=default
default constructor
virtual int getNumAuxImages() const
returns number of auxiliary images in the scene object.
Definition: cvscene.hpp:188
virtual Resolution getResolution() const =0
returns image resolution in x and y direction.
virtual double getZSliceResolution() const
returns thickness of a Z slice in meters for 3D images.
Definition: cvscene.hpp:82
virtual double getTFrameResolution() const
returns time between 2 time frames in seconds for images with time frames.
Definition: cvscene.hpp:84
virtual int getNumZSlices() const
returns number of z-slices in the images.
Definition: cvscene.hpp:59
Description of a single level of the internal image pyramid of a scene.
Definition: levelinfo.hpp:26
Read-only tree view over slide/scene metadata.
Definition: metadata.hpp:26
Definition: exceptions.hpp:15
Compression
raster data compression enum
Definition: slideio_enums.hpp:12