SlideIO 2.9.0
Open-source library for reading of medical images
Loading...
Searching...
No Matches
cziscene.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#include "slideio/drivers/czi/czi_api_def.hpp"
6#include "slideio/core/cvscene.hpp"
7#include "slideio/core/tools/tilecomposer.hpp"
8#include "slideio/drivers/czi/czisubblock.hpp"
9#include "slideio/drivers/czi/czistructs.hpp"
10#include <map>
11
12#if defined(_MSC_VER)
13#pragma warning( push )
14#pragma warning(disable: 4251)
15#endif
16
17namespace slideio
18{
19 class CZISlide;
20 class SLIDEIO_CZI_EXPORTS CZIScene : public CVScene, public Tiler
21 {
22 public:
23 struct SceneParams
24 {
25 int illuminationIndex;
26 int bAcquisitionIndex;
27 int rotationIndex;
28 int sceneIndex;
29 int hPhaseIndex;
30 int viewIndex;
31 };
32 private:
33 struct Tile
34 {
35 Tile() { rect = { 0,0,0,0 }; }
36 std::vector<int> blockIndices;
37 cv::Rect rect;
38 };
39 typedef std::vector<Tile> Tiles;
40 struct ZoomLevel
41 {
42 double zoom{};
43 CZISubBlocks blocks;
44 Tiles tiles;
45 };
46 struct ComponentInfo
47 {
48 std::string name;
49 DataType dataType;
50 };
51 struct SceneChannelInfo
52 {
53 std::string name;
54 int32_t pixelType;
55 int32_t pixelSize;
56 int32_t firstComponent;
57 int32_t numComponents;
58 DataType componentType;
59 };
60 struct TilerData
61 {
62 int zoomLevelIndex;
63 int zSliceIndex;
64 int tFrameIndex;
65 double relativeZoom;
66 };
67 public:
68 CZIScene();
69 std::string getFilePath() const override;
70 int getSceneIndex() const override { return m_sceneIndex; }
71 const std::string& getDriverId() const override {
72 return m_driverId;
73 }
74 cv::Rect getRect() const override;
75 int getNumChannels() const override;
76 int getNumZSlices() const override;
77 int getNumTFrames() const override;
78 double getZSliceResolution() const override;
79 double getTFrameResolution() const override;
80 slideio::DataType getChannelDataType(int channel) const override;
81 std::string getChannelName(int channel) const override;
82 Resolution getResolution() const override;
83 double getMagnification() const override;
84 std::string getName() const override;
85 void init(uint64_t sceneId, SceneParams& sceneParams, const std::string& filePath, int sceneIndex, const std::string& driverId, const CZISubBlocks& blocks, CZISlide* slide, bool mainScene = true);
86 // interface Tiler implementaton
87 int getTileCount(void* userData) override;
88 bool getTileRect(int tileIndex, cv::Rect& tileRect, void* userData) override;
89 bool readTile(int tileIndex, const std::vector<int>& componentIndices, cv::OutputArray tileRaster,
90 void* userData) override;
91 void initializeBlock(const cv::Size& blockSize, const std::vector<int>& channelIndices, cv::OutputArray output) override;
92 Compression getCompression() const override{
93 return m_compression;
94 }
95 void addAuxImage(const std::string& name, std::shared_ptr<CVScene> image);
96 std::shared_ptr<CVScene> getAuxImage(const std::string& sceneName) const override;
97 bool isMosaic() const { return m_bMosaic; }
98 void readResampledBlockChannelsEx(const cv::Rect& blockRect, const cv::Size& blockSize,
99 const std::vector<int>& componentIndices, int zSliceIndex, int tFrameIndex, cv::OutputArray output) override;
100 void readResampledLevelBlockChannelsEx(int level, const cv::Rect& levelRect,
101 const cv::Size& blockSize, const std::vector<int>& componentIndices,
102 int zSliceIndex, int tFrameIndex, cv::OutputArray output) override;
103 private:
104 void setMosaic(bool mosaic) { m_bMosaic = mosaic; }
105 void setupComponents(const std::map<int, int>& channelPixelType);
106 void setupComponentsAux(const std::map<int, int>& channelPixelType);
107 void generateSceneName();
108 void computeSceneRect();
109 void computeSceneTiles();
110 void compute4DParameters();
111 void updateTileRects(ZoomLevel& value);
112 void updateTileRects();
113 const ZoomLevel& getBaseZoomLevel() const;
114 void initZoomLevelInfo();
115 int findBlockIndex(const Tile& tile, const CZISubBlocks& blocks, int channelIndex, int zSliceIndex, int tFrameIndex) const ;
116 const Tile& getTile(const TilerData* tilerData, int tileIndex) const;
117 const CZISubBlocks& getBlocks(const TilerData* tilerData) const;
118 bool blockHasData(const CZISubBlock& block, const std::vector<int>& componentIndices, const TilerData* tilerData);
119 std::vector<uint8_t> decodeData(const CZISubBlock& block, const std::vector<unsigned char>& encodedData);
120 void unpackChannels(const CZISubBlock& block, const std::vector<int>& orgComponentIndices, const std::vector<unsigned char>& blockData, const TilerData* tilerData, std::vector<cv::Mat>& componentRasters);
121 void computeSceneMetadata();
122 public:
123 // static members
124 static uint64_t sceneIdFromDims(int s, int i, int v, int h, int r, int b);
125 static uint64_t sceneIdFromDims(const std::vector<Dimension>& dims);
126 static void sceneIdsFromDims(const std::vector<Dimension>& dims, std::vector<uint64_t>& ids);
127 static uint64_t sceneIdFromDims(const SceneParams& params);
128 static void dimsFromSceneId(uint64_t sceneId, int& s, int& i, int& v, int& h, int& r, int& b);
129 static void dimsFromSceneId(uint64_t sceneId, SceneParams& params);
130 static void channelComponentInfo(CZIDataType channelType, DataType& componentType, int& numComponents, int& pixelSize);
131 private:
132 void combineBlockInTiles(ZoomLevel& zoomLevel);
133 // data members
134 private:
135 std::vector<ZoomLevel> m_zoomLevels;
136 std::vector<ComponentInfo> m_componentInfos;
137 std::vector<SceneChannelInfo> m_channelInfos;
138 std::string m_filePath;
139 cv::Rect m_sceneRect;
140 std::map<int, std::pair<int, int>> m_componentToChannelIndex;
141 CZISlide* m_slide;
142 std::string m_name;
143 uint64_t m_id{};
144 SceneParams m_sceneParams{};
145 int m_numZSlices;
146 int m_numTFrames;
147 int m_firstSliceIndex = 0;
148 int m_firstTFrameIndex = 0;
149 Compression m_compression;
150 std::map<std::string, std::shared_ptr<CVScene>> m_auxImages;
151 bool m_bMosaic;
152 int m_sceneIndex;
153 std::string m_driverId;
154
155 };
156}
157
158
159#if defined(_MSC_VER)
160#pragma warning( pop )
161#endif
Definition: exceptions.hpp:15
Compression
raster data compression enum
Definition: slideio_enums.hpp:12