FLImaging 7.10.21.1
TensorImages.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "Tensor.h"
6#include "DefinitionsAI.h"
7#include "AugmentationParameters.h"
8#include <set>
9
10namespace FLImaging
11{
12 namespace AI
13 {
14 enum EImageType
15 {
16 EImageType_FLIF = 0,
17 EImageType_BMP,
18 EImageType_PNG,
19 EImageType_JPEG,
20 EImageType_TIFF,
21 EImageType_DB,
22 EImageType_Error,
23 };
24
25 class FL_EXPORT CValidationImageExtractor;
26 class CLabelData;
27
28 template<typename T>
29 class CClassEqualizerBase;
30
31 template<typename T>
32 class CClassEqualizerForTensorImages;
33
34 template<typename T>
35 class CClassEqualizerForTensorImagesWithMaskLabels;
36
37 template <typename T>
38 class FL_EXPORT CTensorImages : public CTensor<T>
39 {
40 public:
41 enum ETilingMode
42 {
47 };
48
49 public:
50 CTensorImages();
51
52 CTensorImages(const CTensorImages<T>& tsr, bool bDeepCopy = true);
53
54 virtual ~CTensorImages();
55
56 virtual const CResult GetBinaryData(Base::CFLData& fldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
57 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
58
59 virtual const CResult SetBinaryData(const Base::CFLData& fldBinary, int64_t* pI64Offset = nullptr) override;
60 virtual const CResult SetBinaryData(const Base::CFLData* pFldBinary, int64_t* pI64Offset = nullptr) override;
61
62 virtual const CResult Create(const std::vector<int64_t>& vctShape, bool bOrderByDesc = true, bool bCudaAllocation = true) override;
63 virtual const CResult Create(const std::initializer_list<int64_t>& ilShape, bool bOrderByDesc = true, bool bCudaAllocation = true) override;
64 virtual const CResult Create(const Base::CFLImage& fli, bool bNormalize = true, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
65 virtual const CResult Create(const Base::CFLImage* pFli, bool bNormalize = true, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
66 virtual const CResult Create(const Base::CFLImage* pFli, const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1., std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
67 virtual const CResult Create(const Base::CFLImage& fli, const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1., std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
68 virtual const CResult Create(const Base::CFLImage* pFli, const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1., std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
69 virtual const CResult Create(const Base::CFLImage& fli, const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1., std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
70
71
72 virtual const CResult Create(const wchar_t* pWcFilePath, const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., bool bRecursive = false, ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1.);
73 virtual const CResult Create(const wchar_t* pWcFilePath, const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., bool bRecursive = false, ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1.);
74
75 virtual const CResult Assign(const CTensor<T>& tsr, bool bDeepCopy = true) override;
76 virtual const CResult Assign(const CTensor<T>* pTsr, bool bDeepCopy = true) override;
77
78 virtual const CResult Assign(const CTensorImages<T>& tsr, bool bDeepCopy = true);
79 virtual const CResult Assign(const CTensorImages<T>* pTsr, bool bDeepCopy = true);
80
81 virtual const CResult Append(const Base::CFLImage* pFli, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTIlingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1., std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
82 virtual const CResult Append(const Base::CFLImage& fli, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTIlingMode = ETilingMode_NoTiling_Fit, double f64PreScaleRatio = 1., std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
83
84 virtual const CResult Append(const wchar_t* pWcFilePath, bool bRecursive = false);
85
86 virtual const CResult Clear() override;
87
88 virtual const CResult SetSourceImage(const Base::CFLImage& fliSourceImage);
89 virtual const CResult SetSourceImage(const Base::CFLImage* pFliSourceImage);
90 virtual const Base::CFLImage* GetSourceImage() const;
91
92 virtual const CResult SetSourceImagePath(const wchar_t* pWcsSourceImagePath);
93 virtual const wchar_t* GetSourceImagePath() const;
94
95 virtual const CResult AddAugmentationExtraLabel(const CAugmentationParameters* pOAP);
96
97 virtual const CResult EnableRecursiveLoad(bool bRecursive);
98 virtual bool IsRecursiveLoadEnabled() const;
99
100 virtual const CResult SetTensorShape(const std::vector<int64_t>& vctTensorShape);
101 virtual const CResult SetTensorShape(const std::initializer_list<int64_t>& ilTensorShape);
102 virtual const std::vector<int64_t> GetTensorShape() const;
103
104 virtual const CResult SetResizeMethod(EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises);
105 virtual EResizeMethod GetResizeMethod() const;
106
107 virtual const CResult EnableROIExtraction(bool bROIExtraction = false);
108 virtual bool IsROIExtractionEnabled() const;
109
110 virtual const CResult EnableNormalization(bool bNormalize = true);
111 virtual bool IsNormalizationEnabled() const;
112
113 virtual const CResult SetBlankColor(const Base::CMultiVar<T>& mvBlankColor = 0.);
114 virtual const Base::CMultiVar<T> GetBlankColor() const;
115
116 virtual const CResult SetInterpolationMethod(ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear);
117 virtual ImageProcessing::EInterpolationMethod GetInterpolationMethod() const;
118
119 virtual const CResult SetPreImageScaleRatio(double f64PreScaleRatio = 1.);
120 virtual double GetPreImageScaleRatio() const;
121
122 virtual const CResult Initialize();
123
124 virtual const CResult EnableTrainingMode(bool bMode, bool bRecursively = true) override;
125
126 virtual const CResult ClearBatchFromMemory();
127 virtual const CResult ClearBatchIndices();
128 virtual const CResult SelectBatchIndices(const std::vector<int64_t>& vctBatchIndices);
129 virtual const CResult GetSelectedBatchIndices(std::vector<int64_t>& vctBatchIndices);
130 virtual const CResult SetBatchParameters(const CTensor<T>& tsr) override;
131 virtual const CResult SetBatchParameters(const CTensorImages<T>& tsr);
132
133 virtual const CResult GetAccumulateSliceCount(std::vector<int64_t>& vctAccumulateSliceCount);
134
135 virtual CTensorImages<T>& Evaluate() override;
136 virtual CTensorImages<T>& Forward() override;
137 virtual CComputationalBase<T>* Clone() const override;
138
139 virtual const CResult Swap(CComputationalBase<T>& cbSwap) override;
140
141 virtual int64_t GetBatchSize() const;
142
143 virtual const CResult LoadTensor(const std::vector<int64_t>& vctBatchIndices);
144 virtual const CResult LoadTensor(const std::initializer_list<int64_t>& ilBatchIndices);
145
146 virtual int64_t GetTensorImageTotalROIPageCount() const;
147 virtual int64_t GetTensorImageTotalPageCount() const;
148 virtual const CResult GetTensorImageFileSize(std::vector<std::pair<int64_t, int64_t>>& vctFileSize);
149 virtual bool IsCreatedWithImagePath() const;
150
151 virtual int32_t GetResultLabelCategoryCount() const;
152 virtual const CResult GetResultLabelCategoryClassNum(int64_t i64Index, int32_t& i32ClassNum) const;
153 virtual const CResult GetResultLabelCategoryClassNum(int64_t i64Index, int32_t* pI32ClassNum) const;
154 virtual const CResult GetResultLabelCategoryClassNames(int64_t i64Index, Base::CFLArray<Base::CFLString<wchar_t>>& flaClassNames) const;
155 virtual const CResult GetResultLabelCategoryClassNames(int64_t i64Index, Base::CFLArray<Base::CFLString<wchar_t>>* pFlaClassNames) const;
156
157 virtual const CResult ConvertClassNumToLabel(bool bIncludingClassName = true);
158 virtual const CResult ConvertLabelToClassNum(bool bIncludingClassName = true);
159
160 virtual const std::vector<int32_t>& GetLabelIndices(int64_t i64Index) const;
161
162 virtual const CResult AddDefaultClass(int32_t i32ClassNum, const Base::CFLString<wchar_t>& flsClassName);
163 virtual const CResult ClearDefaultClass();
164 virtual const CResult RemoveDefaultClass(int32_t i32ClassNum);
165 virtual const CResult RemoveDefaultClass(const Base::CFLString<wchar_t>& flsClassName);
166
167 virtual const Base::CFLArray<int32_t> GetDefaultClassNum() const;
168 virtual const Base::CFLArray<Base::CFLString<wchar_t>> GetDefaultClassName() const;
169
170 virtual const CResult AddExtraClass(int32_t i32ClassNum, const Base::CFLString<wchar_t>& flsClassName);
171 virtual const CResult ClearExtraClass();
172 virtual const CResult RemoveExtraClass(int32_t i32ClassNum);
173 virtual const CResult RemoveExtraClass(const Base::CFLString<wchar_t>& flsClassName);
174
175 virtual const Base::CFLArray<int32_t> GetExtraClassNum() const;
176 virtual const Base::CFLArray<Base::CFLString<wchar_t>> GetExtraClassName() const;
177
178
179 virtual int64_t GetTensorImageTotalLabelCount() const;
180
181 virtual const CResult EnableLog(bool bLog = true);
182 virtual bool IsLogEnabled() const;
183
184 virtual const CResult SetClassNames(const Base::CFLArray<Base::CFLString<wchar_t>>& flaClassNames);
185 virtual const CResult SetClassNames(const Base::CFLArray<Base::CFLString<wchar_t>>* pFlaClassNames);
186 virtual const CResult AddClassNames(const Base::CFLString<wchar_t>& flsClassName);
187
188 virtual const Base::CFLArray<Base::CFLString<wchar_t>> GetClassNames() const;
189 virtual const CResult ClearClassNames();
190
191 virtual const CResult SetTilingMode(ETilingMode eImageTilingMode = ETilingMode_NoTiling_Fit);
192 virtual ETilingMode GetTilingMode() const;
193
194 static EImageType GetExtenstion(const wchar_t* pWcsImagePath);
195 static const CResult ExtractClassNumClassName(const Base::CFLString<wchar_t>& flsFigureName, Base::CFLString<wchar_t>& flsClassNum, Base::CFLString<wchar_t>& flsClassName);
196 static const CResult ExtractClassNumClassName(const Base::CFLString<wchar_t>& flsFigureName, Base::CFLString<wchar_t>& flsClassNum, Base::CFLString<wchar_t>& flsClassName, Base::CFLString<wchar_t>& flsOAInfo);
197
198 virtual const CResult EnableNoLabelMode(bool bNoLabelMode = false);
199 virtual bool IsNoLabelModeEnable();
200
201 virtual const CResult SetTilingOverlapRatio(T tTilingOverlapRatio);
202 virtual T GetTilingOverlapRatio() const;
203
204 virtual const CResult GetTilingInitializedData(std::vector<int64_t>& vctResultSliceSize, std::vector<int64_t>& vctResultLastSlicePositionX, std::vector<int64_t>& vctResultLastSlicePositionY, std::vector<int64_t>& vctResultSliceRowCount, std::vector<int64_t>& vctResultSliceColCount, std::vector<int64_t>& vctResultStrideX, std::vector<int64_t>& vctResultStrideY);
205
206 virtual const CResult GetFileList(std::vector<Base::CFLString<wchar_t>>& vctFileLIst);
207
208 DeclareGetClassType();
209 SupportToDuplicateObject(CTensorImages, *this);
210 protected:
211 virtual const CResult ApplyDefaultLabels();
212 virtual const CResult ApplyExtraLabels();
213 virtual const CResult DecodeLabels(const wchar_t* pWcsImagePath, Base::CFLImage* pFli = nullptr);
214 virtual const CResult ExtractLabelInfo(const wchar_t* pWcsName, int32_t i32PageIndex, int32_t i32FigureIndex);
215 virtual const CResult AddLabel(const wchar_t* pWcsName, Foundation::CFLFigure* pFlfLabel, bool bFile = false);
216 virtual const CResult AddLabel(std::pair<int32_t, Base::CFLString<wchar_t>>& prLabelInfo);
217 virtual int32_t GetClassNameOffset(int32_t i32ClassNum, Base::CFLString<wchar_t>& flsName, bool bRemoveSeparator = true) const;
218
219 virtual bool IsValidLabel(const wchar_t* pWcsLabel) const;
220 virtual const CResult RemoveExtension(const wchar_t* pWcsName, Base::CFLString<wchar_t>& flsNewName);
221 virtual const CResult MakeDistribution();
222
223 virtual const CResult IsValidImageFormat(EImageType eImageType) const;
224
225 virtual const CResult InitializeTilingData(int64_t i64ModelSize, bool bClear = true);
226 virtual const CResult ExtractTilingRegion(const std::vector<int64_t>& vctBatchIndices, const Base::CFLImage* pFliSrc, Base::CFLImage* pFliDst);
227
228 protected:
229 Foundation::CFLFigureArray m_flfaLabels;
230 Foundation::CFLFigureArray m_flfaObjectRegions;
231 CLabelData& m_ldLabels;
232
233 std::vector<Base::CFLString<wchar_t>>& m_vctFileList;
234 std::vector<int64_t>& m_vctPageCount;
235 std::vector<int64_t>& m_vctCumulativePageCount;
236 std::vector<int64_t>& m_vctBatchIndices;
237 Base::CFLImage m_fliSliceBuffer;
238
239 std::vector<int64_t>& m_vctImageSize;
240
241 EResizeMethod m_eResizeMethod;
242 bool m_bROIExtraction;
243 bool m_bNormalize;
244 Base::CMultiVar<T> m_mvBlankColor;
245 ImageProcessing::EInterpolationMethod m_eInterpolationMethod;
246
247 Base::CFLArray<int32_t> m_flaDefaultClassNum;
248 Base::CFLArray<Base::CFLString<wchar_t>> m_flaDefaultClassName;
249
250 Base::CFLArray<int32_t> m_flaExtraClassNum;
251 Base::CFLArray<Base::CFLString<wchar_t>> m_flaExtraClassName;
252
253 std::vector<std::tuple<int32_t, int32_t>>& m_vctPage;
254 std::vector<std::vector<std::pair<int32_t, Base::CFLString<wchar_t>>>>& m_vct2LabelInfo;
255
256 int64_t m_i64TotalPageCount;
257 int64_t m_i64TotalLabelCount;
258 bool m_bCreatedWithImagePath;
259 bool m_bLog;
260 bool m_bClearTensor;
261 bool m_bClearFigures;
262 bool m_bClearLabels;
263 bool m_bClearParameters;
264 bool m_bClearClassName;
265
266 // delayed load
267 Base::CFLImage* m_pFliSourceImage;
268 const wchar_t* m_pWcsSourceImagePath;
269 bool m_bRecursive;
270
271 std::vector<int64_t>& m_vctTensorShape;
272 int64_t m_i64BatchSize;
273
274 //
275 Base::CFLArray<Base::CFLString<wchar_t>> m_flaClassNames;
276
277 // tiling mode
278 ETilingMode m_eImageTilingMode;
279 double m_f64PreScaleRatio;
280 std::vector<int64_t>& m_vctSliceSize;
281 std::vector<int64_t>& m_vctLastSlicePositionX;
282 std::vector<int64_t>& m_vctLastSlicePositionY;
283 std::vector<int64_t>& m_vctSliceRowCount;
284 std::vector<int64_t>& m_vctSliceColCount;
285 std::vector<int64_t>& m_vctAccumulateSliceCount;
286 std::vector<std::pair<int64_t, int64_t>>& m_vctFileSize;
287 std::vector<int64_t>& m_vctTilingStrideX;
288 std::vector<int64_t>& m_vctTilingStrideY;
289 T m_tTilingOverlapRatio;
290
291 bool m_bNoLabelMode;
292
293 private:
294 friend class CValidationImageExtractor;
295
296 template<typename T>
297 friend class CClassEqualizerBase;
298
299 template<typename T>
300 friend class CClassEqualizerForTensorImages;
301
302 template<typename T>
303 friend class CClassEqualizerForTensorImagesWithMaskLabels;
304
305 public:
306 DeclareGetSignletonObject(CTensorImages);
307 };
308
309 #define CCGFTensorImages(...) (*(new CTensorImages<float>(__VA_ARGS__)))
310 #define CCGDTensorImages(...) (*(new CTensorImages<double>(__VA_ARGS__)))
311
312 typedef CTensorImages<float> CTensorImagesF;
313 typedef CTensorImages<double> CTensorImagesD;
314 }
315}
316
317#endif
Definition FLImagingImgProcBase/AlgorithmAIBase.h:18
ETilingMode
Definition FLImagingAIModel/DefinitionsAIModel.h:81
@ ETilingMode_BothAxesTiling_NoFit
Definition FLImagingAIModel/DefinitionsAIModel.h:101
@ ETilingMode_NoTiling_NoFit
Definition FLImagingAIModel/DefinitionsAIModel.h:86
@ ETilingMode_NoTiling_Fit
Definition FLImagingAIModel/DefinitionsAIModel.h:91
@ ETilingMode_SingleAxisTiling_ProportionalFit
Definition FLImagingAIModel/DefinitionsAIModel.h:96
EResizeMethod
Definition FLImagingImgProcBase/DefinitionsImgProcBase.h:213
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
Definition FLImagingGUICLR/DefinitionsGUIView3D.h:3539
@ Clear
Clear all the figure objects.
Definition FLImagingGUICLR/DefinitionsGUI.h:5069
@ Append
Load and append.
Definition FLImagingGUICLR/DefinitionsGUI.h:58