// // Copyright 2020 Debabrata Mandal // // Distributed under the Boost Software License, Version 1.0 // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include // Supported Container types for histogram #include #include #include #include // Basic tests to make sure compatible container types produce // expected output histogram. namespace gil = boost::gil; gil::gray8_image_t img1(4, 4, gil::gray8_pixel_t(1)); gil::gray8_view_t v1 = view(img1); gil::rgb8_image_t img2(4, 4, gil::rgb8_pixel_t(1)); gil::rgb8_view_t v2 = view(img2); gil::gray16_image_t img3(4, 4, gil::gray16_pixel_t(1)); gil::gray16_view_t v3 = view(img3); template bool check_equal(T &cont1, T &cont2, std::size_t size) { bool ch = true; for(std::size_t i = 0; i < size; ++i) { ch = ch & (cont1[i] == cont2[i]); } return ch; } template bool check_equal(T &cont1, T &cont2) { bool ch = true; for(auto &it : cont1) { ch = ch & (cont1[it.first] == cont2[it.first]); } return ch; } void check_fill_histogram_vector() { std::vector c1, c1_expected(256,0); c1_expected[1] = 16; gil::fill_histogram(v1, c1); BOOST_TEST(check_equal(c1, c1_expected, c1_expected.size())); c1_expected[1] = 32; gil::fill_histogram(v1, c1, true); BOOST_TEST(check_equal(c1, c1_expected, c1_expected.size())); std::vector c2, c2_expected; gil::fill_histogram(v2, c2); gil::fill_histogram(gil::color_converted_view(v2), c2_expected); BOOST_TEST(check_equal(c2, c2_expected, c2_expected.size())); } void check_fill_histogram_array() { std::array c1{0}, c1_expected{0}; c1_expected[1] = 16; gil::fill_histogram(v1, c1); BOOST_TEST(check_equal(c1, c1_expected, c1_expected.size())); c1_expected[1] = 32; gil::fill_histogram(v1, c1, true); BOOST_TEST(check_equal(c1, c1_expected, c1_expected.size())); std::array c2{0}, c2_expected{0}; gil::fill_histogram(v1, c2); gil::fill_histogram(gil::color_converted_view(v2), c2_expected); BOOST_TEST(check_equal(c2, c2_expected, c2_expected.size())); // Check binning std::array c3{0}, c3_expected{0}; c3_expected[0] = 16; gil::fill_histogram(v3, c3); BOOST_TEST(check_equal(c3, c3_expected, c3_expected.size())); } void check_fill_histogram_map() { std::map c1, c1_expected; c1_expected[1] = 16; gil::fill_histogram(v1, c1); BOOST_TEST(check_equal(c1, c1_expected)); c1_expected[1] = 32; gil::fill_histogram(v1, c1, true); BOOST_TEST(check_equal(c1, c1_expected)); std::map c2, c2_expected; gil::fill_histogram(v2, c2); gil::fill_histogram(gil::color_converted_view(v2), c2_expected); BOOST_TEST(check_equal(c2, c2_expected)); } void check_cumulative_histogram_vector() { std::vector v(8); for (std::size_t i = 0; i < v.size(); i++) { v[i] = 1; } auto v1 = gil::cumulative_histogram(v); bool check = true; for (std::size_t i = 0; i < v.size(); i++) { if(v1[i] != int(i) + 1) check = false; } BOOST_TEST(check); } void check_cumulative_histogram_array() { std::array arr; for (std::size_t i = 0; i < arr.size(); i++) { arr[i] = 1; } auto arr1 = gil::cumulative_histogram(arr); bool check = true; for (std::size_t i = 0; i < arr.size(); i++) { if(arr1[i] != int(i) + 1) check = false; } BOOST_TEST(check); } void check_cumulative_histogram_map() { std::map mp; for (std::size_t i = 0; i < 8; i++) { mp[i] = 1; } auto mp1 = gil::cumulative_histogram(mp); bool check = true; for (std::size_t i = 0; i < mp.size(); i++) { if(mp1[i] != int(i) + 1) check = false; } BOOST_TEST(check); } int main() { check_fill_histogram_vector(); check_fill_histogram_array(); check_fill_histogram_map(); check_cumulative_histogram_vector(); check_cumulative_histogram_array(); check_cumulative_histogram_map(); return boost::report_errors(); }