2 // Copyright 2019 Miral Shah <miralshah2211@gmail.com>
4 // Use, modification and distribution are subject to the Boost Software License,
5 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 #include <boost/gil/image_processing/threshold.hpp>
9 #include <boost/gil/image_view.hpp>
10 #include <boost/gil/algorithm.hpp>
11 #include <boost/gil/gray.hpp>
12 #include <boost/core/lightweight_test.hpp>
15 namespace gil = boost::gil;
20 gil::gray8_image_t original_gray(width, height), otsu_gray(width, height),
21 expected_gray(width, height);
23 gil::rgb8_image_t original_rgb(width, height), otsu_rgb(width, height), expected_rgb(width, height);
27 gil::view(original_gray)(0, 0) = gil::gray8_pixel_t(56);
28 gil::view(original_gray)(1, 0) = gil::gray8_pixel_t(89);
29 gil::view(original_gray)(0, 1) = gil::gray8_pixel_t(206);
30 gil::view(original_gray)(1, 1) = gil::gray8_pixel_t(139);
35 gil::view(original_rgb)(0, 0) = gil::rgb8_pixel_t(15, 158, 150);
36 gil::view(original_rgb)(1, 0) = gil::rgb8_pixel_t(200, 175, 150);
37 gil::view(original_rgb)(0, 1) = gil::rgb8_pixel_t(230, 170, 150);
38 gil::view(original_rgb)(1, 1) = gil::rgb8_pixel_t(25, 248, 150);
41 void test_gray_regular()
43 gil::view(expected_gray)(0, 0) = gil::gray8_pixel_t(0);
44 gil::view(expected_gray)(1, 0) = gil::gray8_pixel_t(0);
45 gil::view(expected_gray)(0, 1) = gil::gray8_pixel_t(255);
46 gil::view(expected_gray)(1, 1) = gil::gray8_pixel_t(255);
48 gil::threshold_optimal(
49 gil::view(original_gray),
51 gil::threshold_optimal_value::otsu
54 BOOST_TEST(gil::equal_pixels(gil::view(otsu_gray), gil::view(expected_gray)));
57 void test_gray_inverse()
59 gil::view(expected_gray)(0, 0) = gil::gray8_pixel_t(255);
60 gil::view(expected_gray)(1, 0) = gil::gray8_pixel_t(255);
61 gil::view(expected_gray)(0, 1) = gil::gray8_pixel_t(0);
62 gil::view(expected_gray)(1, 1) = gil::gray8_pixel_t(0);
64 gil::threshold_optimal(
65 gil::view(original_gray),
67 gil::threshold_optimal_value::otsu,
68 gil::threshold_direction::inverse
71 BOOST_TEST(gil::equal_pixels(gil::view(otsu_gray), gil::view(expected_gray)));
74 void test_rgb_regular()
76 gil::view(expected_rgb)(0, 0) = gil::rgb8_pixel_t(0, 0, 255);
77 gil::view(expected_rgb)(1, 0) = gil::rgb8_pixel_t(255, 0, 255);
78 gil::view(expected_rgb)(0, 1) = gil::rgb8_pixel_t(255, 0, 255);
79 gil::view(expected_rgb)(1, 1) = gil::rgb8_pixel_t(0, 255, 255);
81 gil::threshold_optimal(
82 gil::view(original_rgb),
84 gil::threshold_optimal_value::otsu
87 BOOST_TEST(gil::equal_pixels(gil::view(otsu_rgb), gil::view(expected_rgb)));
90 void test_rgb_inverse()
92 gil::view(expected_rgb)(0, 0) = gil::rgb8_pixel_t(255, 255, 0);
93 gil::view(expected_rgb)(1, 0) = gil::rgb8_pixel_t(0, 255, 0);
94 gil::view(expected_rgb)(0, 1) = gil::rgb8_pixel_t(0, 255, 0);
95 gil::view(expected_rgb)(1, 1) = gil::rgb8_pixel_t(255, 0, 0);
97 gil::threshold_optimal(
98 gil::view(original_rgb),
100 gil::threshold_optimal_value::otsu,
101 gil::threshold_direction::inverse
104 BOOST_TEST(gil::equal_pixels(gil::view(otsu_rgb), gil::view(expected_rgb)));
117 return boost::report_errors();