hessian.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //
  2. // Copyright 2019 Olzhas Zhumabek <anonymous.from.applecity@gmail.com>
  3. //
  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)
  7. //
  8. #include <boost/core/lightweight_test.hpp>
  9. #include <boost/gil/image.hpp>
  10. #include <boost/gil/image_view.hpp>
  11. #include <boost/gil/image_processing/numeric.hpp>
  12. #include <boost/gil/image_processing/hessian.hpp>
  13. namespace gil = boost::gil;
  14. bool are_equal(gil::gray32f_view_t expected, gil::gray32f_view_t actual) {
  15. if (expected.dimensions() != actual.dimensions())
  16. return false;
  17. for (long int y = 0; y < expected.height(); ++y)
  18. {
  19. for (long int x = 0; x < expected.width(); ++x)
  20. {
  21. if (expected(x, y) != actual(x, y))
  22. {
  23. return false;
  24. }
  25. }
  26. }
  27. return true;
  28. }
  29. void test_blank_image()
  30. {
  31. const gil::point_t dimensions(20, 20);
  32. gil::gray16s_image_t dx(dimensions, gil::gray16s_pixel_t(0), 0);
  33. gil::gray16s_image_t dy(dimensions, gil::gray16s_pixel_t(0), 0);
  34. gil::gray32f_image_t m11(dimensions);
  35. gil::gray32f_image_t m12_21(dimensions);
  36. gil::gray32f_image_t m22(dimensions);
  37. gil::gray32f_image_t expected(dimensions, gil::gray32f_pixel_t(0), 0);
  38. gil::compute_hessian_entries(
  39. gil::view(dx),
  40. gil::view(dy),
  41. gil::view(m11),
  42. gil::view(m12_21),
  43. gil::view(m22)
  44. );
  45. BOOST_TEST(are_equal(gil::view(expected), gil::view(m11)));
  46. BOOST_TEST(are_equal(gil::view(expected), gil::view(m12_21)));
  47. BOOST_TEST(are_equal(gil::view(expected), gil::view(m22)));
  48. gil::gray32f_image_t hessian_response(dimensions, gil::gray32f_pixel_t(0), 0);
  49. auto unnormalized_mean = gil::generate_unnormalized_mean(5);
  50. gil::compute_hessian_responses(
  51. gil::view(m11),
  52. gil::view(m12_21),
  53. gil::view(m22),
  54. unnormalized_mean,
  55. gil::view(hessian_response)
  56. );
  57. BOOST_TEST(are_equal(gil::view(expected), gil::view(hessian_response)));
  58. }
  59. int main(int argc, char* argv[])
  60. {
  61. test_blank_image();
  62. return boost::report_errors();
  63. }