#pragma once #include #include #include constexpr size_t img_width = 1280; constexpr size_t img_height = 800; constexpr uint32_t patternSize = 16; struct Image { int width; int height; uint16_t data[img_height][img_width]; uint16_t rotated_cw[img_width][img_height]; size_t dataSize; unsigned int stride; libcamera::PixelFormat pixelFormat; float pixels[img_width]; unsigned int measurementCounter; uint64_t timestampNs; }; size_t pgm_save(Image *img, FILE *outfile, bool really_save = false); void unpack_10bit(uint8_t const *src, Image const &image, uint16_t *dest); void unpack_16bit(uint8_t const *src, Image const &image, uint16_t *dest); template T median3(const T& a, const T& b, const T& c) { using namespace std; return max(min(a,b), min(max(a,b),c)); } void rotate(Image & image); void process_columns(Image & image);