summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/enc_detect_dots.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/enc_detect_dots.h')
-rw-r--r--third_party/jpeg-xl/lib/jxl/enc_detect_dots.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/enc_detect_dots.h b/third_party/jpeg-xl/lib/jxl/enc_detect_dots.h
new file mode 100644
index 0000000000..c3071d9a2f
--- /dev/null
+++ b/third_party/jpeg-xl/lib/jxl/enc_detect_dots.h
@@ -0,0 +1,67 @@
+// Copyright (c) the JPEG XL Project Authors. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// We attempt to remove dots, or speckle from images using Gaussian blur.
+#ifndef LIB_JXL_ENC_DETECT_DOTS_H_
+#define LIB_JXL_ENC_DETECT_DOTS_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <array>
+#include <vector>
+
+#include "lib/jxl/base/data_parallel.h"
+#include "lib/jxl/dec_patch_dictionary.h"
+#include "lib/jxl/enc_patch_dictionary.h"
+#include "lib/jxl/image.h"
+
+namespace jxl {
+
+struct GaussianDetectParams {
+ double t_high = 0; // at least one pixel must have larger energy than t_high
+ double t_low = 0; // all pixels must have a larger energy than tLow
+ uint32_t maxWinSize = 0; // discard dots larger than this containing window
+ double maxL2Loss = 0;
+ double maxCustomLoss = 0;
+ double minIntensity = 0; // If the intensity is too low, discard it
+ double maxDistMeanMode = 0; // The mean and the mode must be close
+ size_t maxNegPixels = 0; // Maximum number of negative pixel
+ size_t minScore = 0;
+ size_t maxCC = 50; // Maximum number of CC to keep
+ size_t percCC = 15; // Percentage in [0,100] of CC to keep
+};
+
+// Ellipse Quantization Params
+struct EllipseQuantParams {
+ size_t xsize; // Image size in x
+ size_t ysize; // Image size in y
+ size_t qPosition; // Position quantization delta
+ // Quantization for the Gaussian sigma parameters
+ double minSigma;
+ double maxSigma;
+ size_t qSigma; // number of quantization levels
+ // Quantization for the rotation angle (between -pi and pi)
+ size_t qAngle;
+ // Quantization for the intensity
+ std::array<double, 3> minIntensity;
+ std::array<double, 3> maxIntensity;
+ std::array<size_t, 3> qIntensity; // number of quantization levels
+ // Extra parameters for the encoding
+ bool subtractQuantized; // Should we subtract quantized or detected dots?
+ float ytox;
+ float ytob;
+
+ void QuantPositionSize(size_t* xsize, size_t* ysize) const;
+};
+
+// Detects dots in XYB image.
+std::vector<PatchInfo> DetectGaussianEllipses(
+ const Image3F& opsin, const GaussianDetectParams& params,
+ const EllipseQuantParams& qParams, ThreadPool* pool);
+
+} // namespace jxl
+
+#endif // LIB_JXL_ENC_DETECT_DOTS_H_