From 4401f681d33f534a7d7ef8f4f940bd54b60710c3 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 18 Sep 2022 01:52:26 -0400 Subject: Move stuff around to accommodate new family members. --- xsig/src/imageutil.hpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 xsig/src/imageutil.hpp (limited to 'xsig/src/imageutil.hpp') diff --git a/xsig/src/imageutil.hpp b/xsig/src/imageutil.hpp new file mode 100644 index 0000000..f3831b0 --- /dev/null +++ b/xsig/src/imageutil.hpp @@ -0,0 +1,72 @@ +//Chris Xiong 2022 +//License: MPL-2.0 +#ifndef IMAGEUTIL_HPP +#define IMAGEUTIL_HPP + +#include +#include +#include +#include +#include + +#include "compressed_vector.hpp" + +#define sqr(x) ((x) * (x)) + +namespace image_util +{ + cv::Mat crop(cv::InputArray s, double contrast_threshold, double max_crop_ratio); + cv::Range crop_axis(cv::InputArray s, int axis, double contrast_threshold, double max_crop_ratio); + double median(std::vector &v); + cv::Mat blend_white(cv::Mat m); + cv::Mat imread_path(const std::filesystem::path &p, int flags); + + template + static double length(const compressed_vector &v, T center) + { + double ret = 0; + for (size_t i = 0; i < v.size(); ++i) + { + ret += sqr(1. * v.get(i) - center); + } + return sqrt(ret); + } + template + static double distance(const compressed_vector &v1, const compressed_vector &v2) + { + //assert(v1.size() == v2.size()) + double ret = 0; + for (size_t i = 0; i < v1.size(); ++i) + { + if (abs((int)v1.get(i) - (int)v2.get(i)) == 2 && (v1.get(i) == 2 || v2.get(i) == 2)) + ret += 9; + else + ret += sqr(1. * v1.get(i) - v2.get(i)); + } + return sqrt(ret); + } + static double length(const std::vector &v, uint8_t center) + { + double ret = 0; + for (size_t i = 0; i < v.size(); ++i) + { + ret += sqr(1. * v[i] - center); + } + return sqrt(ret); + } + static double distance(const std::vector &v1, const std::vector &v2) + { + //assert(v1.size() == v2.size()) + double ret = 0; + for (size_t i = 0; i < v1.size(); ++i) + { + if (abs((int)v1[i] - (int)v2[i]) == 2 && (v1[i] == 2 || v2[i] == 2)) + ret += 9; + else + ret += sqr(1. * v1[i] - v2[i]); + } + return sqrt(ret); + } +}; + +#endif -- cgit v1.2.3