35 #include <type_traits>
48 namespace imageProcessing
53 template<
typename dtype>
57 STATIC_ASSERT_ARITHMETIC(dtype);
62 using accumulator_t =
typename std::conditional<std::is_integral<dtype>::value,
int64,
double>::type;
77 clusterId_(inClusterId)
91 if (pixels_.size() != rhs.pixels_.size())
109 return !(*
this == rhs);
122 return pixels_[inIndex];
135 if (inIndex >= pixels_.size())
139 return pixels_[inIndex];
150 return pixels_.cbegin();
161 return pixels_.cend();
172 return static_cast<uint32>(pixels_.size());
238 return rowMax_ - rowMin_ + 1;
249 return colMax_ - colMin_ + 1;
271 return peakPixelIntensity_;
280 double eod() const noexcept
293 pixels_.push_back(inPixel);
304 eod_ =
static_cast<double>(peakPixelIntensity_) /
static_cast<double>(intensity_);
344 inStream << inCluster.
str();
351 int32 clusterId_{ -1 };
353 std::vector<Pixel<dtype>> pixels_{};
365 dtype peakPixelIntensity_{ 0 };
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition: Error.hpp:36
Holds the information for a cluster of pixels.
Definition: Cluster.hpp:55
friend std::ostream & operator<<(std::ostream &inStream, const Cluster< dtype > &inCluster)
Definition: Cluster.hpp:342
typename std::conditional< std::is_integral< dtype >::value, int64, double >::type accumulator_t
Definition: Cluster.hpp:62
uint32 colMin() const noexcept
Definition: Cluster.hpp:214
const Pixel< dtype > & operator[](uint32 inIndex) const noexcept
Definition: Cluster.hpp:120
typename std::vector< Pixel< dtype > >::const_iterator const_iterator
Definition: Cluster.hpp:61
double eod() const noexcept
Definition: Cluster.hpp:280
uint32 rowMax() const noexcept
Definition: Cluster.hpp:203
const Pixel< dtype > & at(uint32 inIndex) const
Definition: Cluster.hpp:133
const_iterator begin() const noexcept
Definition: Cluster.hpp:148
uint32 height() const noexcept
Definition: Cluster.hpp:236
Cluster(uint32 inClusterId) noexcept
Definition: Cluster.hpp:76
bool operator==(const Cluster< dtype > &rhs) const noexcept
Definition: Cluster.hpp:89
uint32 colMax() const noexcept
Definition: Cluster.hpp:225
void addPixel(const Pixel< dtype > &inPixel)
Definition: Cluster.hpp:291
bool operator!=(const Cluster< dtype > &rhs) const noexcept
Definition: Cluster.hpp:107
std::string str() const
Definition: Cluster.hpp:313
dtype peakPixelIntensity() const noexcept
Definition: Cluster.hpp:269
uint32 clusterId() const noexcept
Definition: Cluster.hpp:181
accumulator_t intensity() const noexcept
Definition: Cluster.hpp:258
uint32 rowMin() const noexcept
Definition: Cluster.hpp:192
uint32 width() const noexcept
Definition: Cluster.hpp:247
uint32 size() const noexcept
Definition: Cluster.hpp:170
const_iterator end() const noexcept
Definition: Cluster.hpp:159
void print() const
Definition: Cluster.hpp:329
Holds the information for a single pixel.
Definition: Pixel.hpp:47
dtype intensity
Definition: Pixel.hpp:56
uint32 col
Definition: Pixel.hpp:55
uint32 row
Definition: Pixel.hpp:54
std::string str() const
Definition: Pixel.hpp:136
void for_each(InputIt first, InputIt last, UnaryFunction f)
Definition: StlAlgorithms.hpp:227
bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2) noexcept
Definition: StlAlgorithms.hpp:142
std::string num2str(dtype inNumber)
Definition: num2str.hpp:46
Definition: Coordinate.hpp:45
NdArray< dtype > max(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition: max.hpp:44
std::int64_t int64
Definition: Types.hpp:35
NdArray< dtype > min(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition: min.hpp:44
std::int32_t int32
Definition: Types.hpp:36
std::uint32_t uint32
Definition: Types.hpp:40