forked from allen-cell-animated/agave
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathImageXYZC.h
114 lines (90 loc) · 2.43 KB
/
ImageXYZC.h
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
#pragma once
#include "Histogram.h"
#include "glm.h"
#include <inttypes.h>
#include <string>
#include <vector>
struct Channelu16
{
Channelu16(uint32_t x, uint32_t y, uint32_t z, uint16_t* ptr);
~Channelu16();
uint32_t m_x, m_y, m_z;
uint16_t* m_ptr;
uint16_t m_min;
uint16_t m_max;
uint16_t* m_gradientMagnitudePtr;
Histogram m_histogram;
float* m_lut;
uint16_t* generateGradientMagnitudeVolume(float scalex, float scaley, float scalez);
void generateFromGradientData(const GradientData& gradientData)
{
delete[] m_lut;
m_lut = m_histogram.generateFromGradientData(gradientData);
}
void generate_auto2()
{
delete[] m_lut;
m_lut = m_histogram.generate_auto2();
}
void generate_auto()
{
delete[] m_lut;
m_lut = m_histogram.generate_auto();
}
void generate_bestFit()
{
delete[] m_lut;
m_lut = m_histogram.generate_bestFit();
}
void generate_chimerax()
{
delete[] m_lut;
m_lut = m_histogram.initialize_thresholds();
}
void generate_equalized()
{
delete[] m_lut;
m_lut = m_histogram.generate_equalized();
}
void debugprint();
std::string m_name;
};
class ImageXYZC
{
public:
// how many channels to enable on first load by default
static const int FIRST_N_CHANNELS = 1;
static const uint32_t IN_MEMORY_BPP = 16;
ImageXYZC(uint32_t x,
uint32_t y,
uint32_t z,
uint32_t c,
uint32_t bpp,
uint8_t* data = nullptr,
float sx = 1.0,
float sy = 1.0,
float sz = 1.0);
virtual ~ImageXYZC();
void setPhysicalSize(float x, float y, float z);
uint32_t sizeX() const;
uint32_t sizeY() const;
uint32_t sizeZ() const;
uint32_t maxPixelDimension() const;
float physicalSizeX() const;
float physicalSizeY() const;
float physicalSizeZ() const;
glm::vec3 getDimensions() const;
uint32_t sizeC() const;
uint32_t sizeOfElement() const;
size_t sizeOfPlane() const;
size_t sizeOfChannel() const;
size_t size() const;
uint8_t* ptr(uint32_t channel = 0, uint32_t z = 0) const;
Channelu16* channel(uint32_t channel) const;
void setChannelNames(std::vector<std::string>& channelNames);
private:
uint32_t m_x, m_y, m_z, m_c, m_bpp;
uint8_t* m_data;
float m_scaleX, m_scaleY, m_scaleZ;
std::vector<Channelu16*> m_channels;
};