/src/libjxl/lib/jxl/enc_dot_dictionary.cc
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) the JPEG XL Project Authors. All rights reserved. |
2 | | // |
3 | | // Use of this source code is governed by a BSD-style |
4 | | // license that can be found in the LICENSE file. |
5 | | |
6 | | #include "lib/jxl/enc_dot_dictionary.h" |
7 | | |
8 | | #include <array> |
9 | | #include <cstddef> |
10 | | #include <cstring> |
11 | | #include <vector> |
12 | | |
13 | | #include "lib/jxl/base/data_parallel.h" |
14 | | #include "lib/jxl/base/override.h" |
15 | | #include "lib/jxl/base/rect.h" |
16 | | #include "lib/jxl/base/status.h" |
17 | | #include "lib/jxl/chroma_from_luma.h" |
18 | | #include "lib/jxl/enc_detect_dots.h" |
19 | | #include "lib/jxl/enc_params.h" |
20 | | #include "lib/jxl/enc_patch_dictionary.h" |
21 | | #include "lib/jxl/image.h" |
22 | | |
23 | | namespace jxl { |
24 | | |
25 | | // Private implementation of Dictionary Encode/Decode |
26 | | namespace { |
27 | | |
28 | | /* Quantization constants for Ellipse dots */ |
29 | | const size_t kEllipsePosQ = 2; // Quantization level for the position |
30 | | const double kEllipseMinSigma = 0.1; // Minimum sigma value |
31 | | const double kEllipseMaxSigma = 3.1; // Maximum Sigma value |
32 | | const size_t kEllipseSigmaQ = 16; // Number of quantization levels for sigma |
33 | | const size_t kEllipseAngleQ = 8; // Quantization level for the angle |
34 | | // TODO(user): fix these values. |
35 | | const std::array<double, 3> kEllipseMinIntensity{{-0.05, 0.0, -0.5}}; |
36 | | const std::array<double, 3> kEllipseMaxIntensity{{0.05, 1.0, 0.4}}; |
37 | | const std::array<size_t, 3> kEllipseIntensityQ{{10, 36, 10}}; |
38 | | } // namespace |
39 | | |
40 | | StatusOr<std::vector<PatchInfo>> FindDotDictionary( |
41 | | const CompressParams& cparams, const Image3F& opsin, const Rect& rect, |
42 | 0 | const ColorCorrelation& color_correlation, ThreadPool* pool) { |
43 | 0 | if (ApplyOverride(cparams.dots, |
44 | 0 | cparams.butteraugli_distance >= kMinButteraugliForDots)) { |
45 | 0 | GaussianDetectParams ellipse_params; |
46 | 0 | ellipse_params.t_high = 0.04; |
47 | 0 | ellipse_params.t_low = 0.02; |
48 | 0 | ellipse_params.maxWinSize = 5; |
49 | 0 | ellipse_params.maxL2Loss = 0.005; |
50 | 0 | ellipse_params.maxCustomLoss = 300; |
51 | 0 | ellipse_params.minIntensity = 0.12; |
52 | 0 | ellipse_params.maxDistMeanMode = 1.0; |
53 | 0 | ellipse_params.maxNegPixels = 0; |
54 | 0 | ellipse_params.minScore = 12.0; |
55 | 0 | ellipse_params.maxCC = 100; |
56 | 0 | ellipse_params.percCC = 100; |
57 | 0 | EllipseQuantParams qParams{rect.xsize(), |
58 | 0 | rect.ysize(), |
59 | 0 | kEllipsePosQ, |
60 | 0 | kEllipseMinSigma, |
61 | 0 | kEllipseMaxSigma, |
62 | 0 | kEllipseSigmaQ, |
63 | 0 | kEllipseAngleQ, |
64 | 0 | kEllipseMinIntensity, |
65 | 0 | kEllipseMaxIntensity, |
66 | 0 | kEllipseIntensityQ, |
67 | 0 | kEllipsePosQ <= 5, |
68 | 0 | color_correlation.YtoXRatio(0), |
69 | 0 | color_correlation.YtoBRatio(0)}; |
70 | |
|
71 | 0 | return DetectGaussianEllipses(opsin, rect, ellipse_params, qParams, pool); |
72 | 0 | } |
73 | 0 | std::vector<PatchInfo> nothing; |
74 | 0 | return nothing; |
75 | 0 | } |
76 | | } // namespace jxl |