]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/gil/test/extension/toolbox/color_convert_lab.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / gil / test / extension / toolbox / color_convert_lab.cpp
CommitLineData
f67539c2
TL
1//
2// Copyright 2013 Christian Henning
3// Copyright 2013 Davide Anastasia <davideanastasia@users.sourceforge.net>
4// Copyright 2020 Mateusz Loskot <mateusz at loskot dot net>
5//
6// Distributed under the Boost Software License, Version 1.0
7// See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt
9//
10#include <boost/gil.hpp>
11#include <boost/gil/extension/toolbox/color_spaces/lab.hpp>
12
13#include <boost/core/lightweight_test.hpp>
14
15#include <cmath>
16
17namespace gil = boost::gil;
18
19// FIXME: Remove when https://github.com/boostorg/core/issues/38 happens
20#define BOOST_GIL_TEST_IS_CLOSE(a, b) BOOST_TEST_LT(std::fabs((a) - (b)), (0.0005f))
21
22void test_lab_to_xyz()
23{
24 {
25 gil::lab32f_pixel_t lab_pixel(40.366198f, 53.354489f, 26.117702f);
26 gil::xyz32f_pixel_t xyz_pixel;
27 gil::color_convert(lab_pixel, xyz_pixel);
28 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(xyz_pixel[0]), 0.197823f);
29 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(xyz_pixel[1]), 0.114731f);
30 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(xyz_pixel[2]), 0.048848f);
31 }
32 {
33 gil::lab32f_pixel_t lab_pixel(50, 0, 0);
34 gil::xyz32f_pixel_t xyz_pixel;
35 gil::color_convert(lab_pixel, xyz_pixel);
36 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(xyz_pixel[0]), 0.175064f);
37 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(xyz_pixel[1]), 0.184187f);
38 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(xyz_pixel[2]), 0.200548f);
39 }
40}
41
42void test_xyz_to_lab()
43{
44 gil::lab32f_pixel_t lab_pixel;
45 gil::xyz32f_pixel_t xyz_pixel(0.085703f, 0.064716f, 0.147082f);
46 gil::color_convert(xyz_pixel, lab_pixel);
47 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[0]), 30.572438f);
48 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[1]), 23.4674f);
49 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[2]), -22.322275f);
50}
51
52void test_rgb_to_lab()
53{
54 {
55 gil::rgb32f_pixel_t rgb_pixel(0.75f, 0.5f, 0.25f);
56 gil::lab32f_pixel_t lab_pixel;
57 gil::color_convert(rgb_pixel, lab_pixel);
58 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[0]), 58.7767f);
59 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[1]), 18.5851f);
60 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[2]), 43.7975f);
61 }
62 {
63 gil::rgb32f_pixel_t rgb_pixel(1.f, 0.f, 0.f);
64 gil::lab32f_pixel_t lab_pixel;
65 gil::color_convert(rgb_pixel, lab_pixel);
66 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[0]), 53.2408f);
67 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[1]), 80.0925f);
68 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[2]), 67.2032f);
69 }
70 {
71 gil::rgb32f_pixel_t rgb_pixel(0.f, 1.f, 0.f);
72 gil::lab32f_pixel_t lab_pixel;
73 gil::color_convert(rgb_pixel, lab_pixel);
74 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[0]), 87.7347f);
75 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[1]), -86.1827f);
76 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[2]), 83.1793f);
77 }
78 {
79 gil::rgb32f_pixel_t rgb_pixel(0.f, 0.f, 1.f);
80 gil::lab32f_pixel_t lab_pixel;
81 gil::color_convert(rgb_pixel, lab_pixel);
82 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[0]), 32.2970f);
83 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[1]), 79.1875f);
84 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[2]), -107.8602f);
85 }
86 {
87 gil::rgb32f_pixel_t rgb_pixel(1.f, 1.f, 1.f);
88 gil::lab32f_pixel_t lab_pixel;
89 gil::color_convert(rgb_pixel, lab_pixel);
90 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[0]), 100.f);
91 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[1]), 0.f);
92 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(lab_pixel[2]), 0.f);
93 }
94}
95
96void test_lab_to_rgb()
97{
98 {
99 gil::lab32f_pixel_t lab_pixel(75.f, 20.f, 40.f);
100 gil::rgb32f_pixel_t rgb_pixel;
101 gil::color_convert(lab_pixel, rgb_pixel);
102 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[0]), 0.943240f);
103 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[1]), 0.663990f);
104 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[2]), 0.437893f);
105 }
106 {
107 gil::lab32f_pixel_t lab_pixel(100.f, 0.f, 0.f);
108 gil::rgb32f_pixel_t rgb_pixel;
109 gil::color_convert(lab_pixel, rgb_pixel);
110 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[0]), 1.f);
111 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[1]), 1.f);
112 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[2]), 1.f);
113 }
114 {
115 gil::lab32f_pixel_t lab_pixel(56.8140f, -42.3665f, 10.6728f);
116 gil::rgb32f_pixel_t rgb_pixel;
117 gil::color_convert(lab_pixel, rgb_pixel);
118 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[0]), 0.099999f);
119 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[1]), 0.605568f);
120 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[2]), 0.456662f);
121 }
122 {
123 gil::lab32f_pixel_t lab_pixel(50.5874f, 4.0347f, 50.5456f);
124 gil::rgb32f_pixel_t rgb_pixel;
125 gil::color_convert(lab_pixel, rgb_pixel);
126 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[0]), 0.582705f);
127 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[1]), 0.454891f);
128 BOOST_GIL_TEST_IS_CLOSE(static_cast<float>(rgb_pixel[2]), 0.1f);
129 }
130}
131
132int main()
133{
134 test_lab_to_xyz();
135 test_xyz_to_lab();
136 test_rgb_to_lab();
137 test_lab_to_rgb();
138
139 return ::boost::report_errors();
140}