This is a follow-up question for An Updated Multi-dimensional Image Data Structure with Variadic Template Functions in C++, histogram Template Function Implementation for Image in C++, Histogram of Image using std::map in C++ and histogram_normalized and histogram_with_bins Template Functions Implementation for Image in C++.
In terms of API, I would write a
normalize_histogram()
instead, taking a histogram as input.
I implemented normalize_histogram
template function which takes a histogram as input.
The experimental implementation
normalize_histogram
template function implementationNormalize a histogram.
// normalize_histogram template function implementation for std::array template<class ElementT, std::size_t Count, class ProbabilityType = double> constexpr static auto normalize_histogram(const std::array<ElementT, Count> input) { auto sum = std::reduce(std::ranges::cbegin(input), std::ranges::cend(input)); std::array<ProbabilityType, Count> output{}; for (std::size_t i = 0; i < Count; ++i) { output[i] = static_cast<ProbabilityType>(input[i]) / static_cast<ProbabilityType>(sum); } return output; } // normalize_histogram template function implementation for std::array (with Execution Policy) template<class ExecutionPolicy, class ElementT, std::size_t Count, class ProbabilityType = double> requires(std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>) constexpr static auto normalize_histogram(ExecutionPolicy execution_policy, const std::array<ElementT, Count> input) { auto sum = std::reduce(execution_policy, std::ranges::cbegin(input), std::ranges::cend(input)); std::array<ProbabilityType, Count> output{}; for (std::size_t i = 0; i < Count; ++i) { output[i] = static_cast<ProbabilityType>(input[i]) / static_cast<ProbabilityType>(sum); } return output; } // normalize_histogram template function implementation template<class ElementT, class CountT, class ProbabilityType = double> requires(std::floating_point<CountT> || std::integral<CountT>) constexpr static auto normalize_histogram(const std::map<ElementT, CountT> input) { CountT sum{}; for (const auto& [key, value] : input) { sum += value; } std::map<ElementT, ProbabilityType> output{}; for (const auto& [key, value] : input) { output.emplace(key, static_cast<ProbabilityType>(value) / static_cast<ProbabilityType>(sum)); } return output; }
The usage of normalize_histogram
template function:
/* Developed by Jimmy Hu */ #include <chrono> #include "../base_types.h" #include "../basic_functions.h" #include "../image.h" #include "../image_io.h" #include "../image_operations.h" template<class ExPo, class ElementT> requires (std::is_execution_policy_v<std::remove_cvref_t<ExPo>>) constexpr static auto HistogramTest( ExPo execution_policy, const TinyDIP::Image<ElementT>& input, std::ostream& os = std::cout ) { auto hsv_image = TinyDIP::rgb2hsv(execution_policy, input); auto start1 = std::chrono::system_clock::now(); auto histogram_result1 = TinyDIP::histogram(TinyDIP::getVplane(hsv_image)); os << "***** std::map Histogram *****\n"; for (const auto& [key, value] : histogram_result1 ) { os << "key = " << key << ", value = " << value << '\n'; } os << "***** Normalized std::map Histogram *****\n"; auto normalized_histogram1 = TinyDIP::normalize_histogram(histogram_result1); double sum = 0.0; for (const auto& [key, value] : normalized_histogram1) { os << "key = " << key << ", value = " << value << '\n'; sum += value; } os << "sum = " << sum << '\n'; os << "-------------------------------------------------------"; auto histogram_result2 = TinyDIP::histogram(TinyDIP::im2uint8(TinyDIP::getVplane(hsv_image))); os << "***** std::array Histogram *****\n"; for (std::size_t i = 0; i < histogram_result2.size(); ++i) { std::cout << i << " count = " << histogram_result2[i] << '\n'; } auto normalized_histogram2 = TinyDIP::normalize_histogram(execution_policy, histogram_result2); os << "***** Normalized std::array Histogram *****\n"; sum = 0.0; for (std::size_t i = 0; i < normalized_histogram2.size(); ++i) { std::cout << i << " count = " << normalized_histogram2[i] << '\n'; sum += normalized_histogram2[i]; } os << "sum = " << sum << '\n'; auto end1 = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds1 = end1 - start1; os << "elapsed time: " << elapsed_seconds1.count() << '\n'; return histogram_result1; } int main() { auto start = std::chrono::system_clock::now(); std::string image_filename = "1.bmp"; auto image_input = TinyDIP::bmp_read(image_filename.c_str(), true); image_input = TinyDIP::copyResizeBicubic(image_input, 3 * image_input.getWidth(), 3 * image_input.getHeight()); HistogramTest(std::execution::par, image_input); auto end = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds = end - start; std::time_t end_time = std::chrono::system_clock::to_time_t(end); std::cout << "Computation finished at " << std::ctime(&end_time) << "elapsed time: " << elapsed_seconds.count() << '\n'; return EXIT_SUCCESS; }
The output of the test code above:
Width of the input image: 454 Height of the input image: 341 Size of the input image(Byte): 464442 ***** std::map Histogram ***** key = 0, value = 1966 key = 1, value = 65 key = 2, value = 72 key = 3, value = 75 key = 4, value = 71 key = 5, value = 49 key = 6, value = 67 key = 7, value = 52 key = 8, value = 78 key = 9, value = 58 key = 10, value = 60 key = 11, value = 58 key = 12, value = 66 key = 13, value = 75 key = 14, value = 86 key = 15, value = 98 key = 16, value = 105 key = 17, value = 139 key = 18, value = 301 key = 19, value = 554 key = 20, value = 1052 key = 21, value = 1551 key = 22, value = 2407 key = 23, value = 3593 key = 24, value = 5618 key = 25, value = 8144 key = 26, value = 10541 key = 27, value = 12335 key = 28, value = 14096 key = 29, value = 15881 key = 30, value = 16950 key = 31, value = 17881 key = 32, value = 18950 key = 33, value = 19432 key = 34, value = 20085 key = 35, value = 20687 key = 36, value = 21367 key = 37, value = 21758 key = 38, value = 22450 key = 39, value = 23288 key = 40, value = 23501 key = 41, value = 23818 key = 42, value = 24173 key = 43, value = 23949 key = 44, value = 23445 key = 45, value = 22823 key = 46, value = 22218 key = 47, value = 21807 key = 48, value = 21137 key = 49, value = 20491 key = 50, value = 19820 key = 51, value = 19644 key = 52, value = 19148 key = 53, value = 18567 key = 54, value = 18190 key = 55, value = 17536 key = 56, value = 16935 key = 57, value = 16640 key = 58, value = 15821 key = 59, value = 15337 key = 60, value = 14813 key = 61, value = 14085 key = 62, value = 13722 key = 63, value = 13101 key = 64, value = 12752 key = 65, value = 12188 key = 66, value = 11973 key = 67, value = 11385 key = 68, value = 11036 key = 69, value = 10681 key = 70, value = 10205 key = 71, value = 9761 key = 72, value = 9574 key = 73, value = 9162 key = 74, value = 9056 key = 75, value = 8700 key = 76, value = 8270 key = 77, value = 8096 key = 78, value = 7671 key = 79, value = 7575 key = 80, value = 7366 key = 81, value = 7262 key = 82, value = 7011 key = 83, value = 6692 key = 84, value = 6533 key = 85, value = 6459 key = 86, value = 5996 key = 87, value = 5783 key = 88, value = 5764 key = 89, value = 5554 key = 90, value = 5413 key = 91, value = 5310 key = 92, value = 5069 key = 93, value = 5021 key = 94, value = 5026 key = 95, value = 4816 key = 96, value = 4788 key = 97, value = 4561 key = 98, value = 4528 key = 99, value = 4296 key = 100, value = 4308 key = 101, value = 4316 key = 102, value = 4123 key = 103, value = 4023 key = 104, value = 3850 key = 105, value = 3873 key = 106, value = 3731 key = 107, value = 3737 key = 108, value = 3685 key = 109, value = 3566 key = 110, value = 3505 key = 111, value = 3462 key = 112, value = 3383 key = 113, value = 3350 key = 114, value = 3264 key = 115, value = 3204 key = 116, value = 3216 key = 117, value = 3187 key = 118, value = 3191 key = 119, value = 3163 key = 120, value = 2903 key = 121, value = 3040 key = 122, value = 2956 key = 123, value = 2899 key = 124, value = 2802 key = 125, value = 2916 key = 126, value = 2833 key = 127, value = 2745 key = 128, value = 2918 key = 129, value = 2843 key = 130, value = 2795 key = 131, value = 2718 key = 132, value = 2758 key = 133, value = 2781 key = 134, value = 2821 key = 135, value = 2755 key = 136, value = 2763 key = 137, value = 2739 key = 138, value = 2770 key = 139, value = 2705 key = 140, value = 2812 key = 141, value = 2733 key = 142, value = 2766 key = 143, value = 2792 key = 144, value = 2790 key = 145, value = 2813 key = 146, value = 2674 key = 147, value = 2655 key = 148, value = 2544 key = 149, value = 2562 key = 150, value = 2542 key = 151, value = 2668 key = 152, value = 2586 key = 153, value = 2521 key = 154, value = 2525 key = 155, value = 2497 key = 156, value = 2503 key = 157, value = 2513 key = 158, value = 2517 key = 159, value = 2406 key = 160, value = 2526 key = 161, value = 2571 key = 162, value = 2531 key = 163, value = 2504 key = 164, value = 2536 key = 165, value = 2454 key = 166, value = 2529 key = 167, value = 2651 key = 168, value = 2530 key = 169, value = 2519 key = 170, value = 2522 key = 171, value = 2600 key = 172, value = 2614 key = 173, value = 2603 key = 174, value = 2748 key = 175, value = 2711 key = 176, value = 2783 key = 177, value = 2877 key = 178, value = 2921 key = 179, value = 2909 key = 180, value = 2814 key = 181, value = 2747 key = 182, value = 2648 key = 183, value = 2615 key = 184, value = 2510 key = 185, value = 2526 key = 186, value = 2363 key = 187, value = 2284 key = 188, value = 2036 key = 189, value = 2022 key = 190, value = 1908 key = 191, value = 1912 key = 192, value = 1920 key = 193, value = 1818 key = 194, value = 1896 key = 195, value = 1977 key = 196, value = 2016 key = 197, value = 2030 key = 198, value = 2004 key = 199, value = 1855 key = 200, value = 1660 key = 201, value = 1485 key = 202, value = 1395 key = 203, value = 1314 key = 204, value = 1278 key = 205, value = 1064 key = 206, value = 899 key = 207, value = 850 key = 208, value = 847 key = 209, value = 824 key = 210, value = 834 key = 211, value = 838 key = 212, value = 839 key = 213, value = 833 key = 214, value = 913 key = 215, value = 844 key = 216, value = 807 key = 217, value = 827 key = 218, value = 837 key = 219, value = 846 key = 220, value = 889 key = 221, value = 863 key = 222, value = 871 key = 223, value = 931 key = 224, value = 909 key = 225, value = 924 key = 226, value = 950 key = 227, value = 878 key = 228, value = 895 key = 229, value = 833 key = 230, value = 909 key = 231, value = 959 key = 232, value = 870 key = 233, value = 943 key = 234, value = 915 key = 235, value = 870 key = 236, value = 897 key = 237, value = 986 key = 238, value = 925 key = 239, value = 1003 key = 240, value = 999 key = 241, value = 1016 key = 242, value = 1003 key = 243, value = 1032 key = 244, value = 1067 key = 245, value = 1062 key = 246, value = 1148 key = 247, value = 1188 key = 248, value = 1311 key = 249, value = 1391 key = 250, value = 1522 key = 251, value = 1704 key = 252, value = 2114 key = 253, value = 2766 key = 254, value = 4315 key = 255, value = 39663 ***** Normalized std::map Histogram ***** key = 0, value = 0.00141101 key = 1, value = 4.6651e-05 key = 2, value = 5.16749e-05 key = 3, value = 5.3828e-05 key = 4, value = 5.09572e-05 key = 5, value = 3.51676e-05 key = 6, value = 4.80864e-05 key = 7, value = 3.73208e-05 key = 8, value = 5.59812e-05 key = 9, value = 4.1627e-05 key = 10, value = 4.30624e-05 key = 11, value = 4.1627e-05 key = 12, value = 4.73687e-05 key = 13, value = 5.3828e-05 key = 14, value = 6.17228e-05 key = 15, value = 7.03353e-05 key = 16, value = 7.53592e-05 key = 17, value = 9.97613e-05 key = 18, value = 0.00021603 key = 19, value = 0.00039761 key = 20, value = 0.000755028 key = 21, value = 0.00111316 key = 22, value = 0.00172752 key = 23, value = 0.00257872 key = 24, value = 0.00403208 key = 25, value = 0.00584501 key = 26, value = 0.00756535 key = 27, value = 0.00885292 key = 28, value = 0.0101168 key = 29, value = 0.0113979 key = 30, value = 0.0121651 key = 31, value = 0.0128333 key = 32, value = 0.0136006 key = 33, value = 0.0139465 key = 34, value = 0.0144151 key = 35, value = 0.0148472 key = 36, value = 0.0153352 key = 37, value = 0.0156159 key = 38, value = 0.0161125 key = 39, value = 0.016714 key = 40, value = 0.0168668 key = 41, value = 0.0170943 key = 42, value = 0.0173491 key = 43, value = 0.0171884 key = 44, value = 0.0168266 key = 45, value = 0.0163802 key = 46, value = 0.015946 key = 47, value = 0.015651 key = 48, value = 0.0151702 key = 49, value = 0.0147065 key = 50, value = 0.014225 key = 51, value = 0.0140986 key = 52, value = 0.0137427 key = 53, value = 0.0133257 key = 54, value = 0.0130551 key = 55, value = 0.0125857 key = 56, value = 0.0121544 key = 57, value = 0.0119426 key = 58, value = 0.0113548 key = 59, value = 0.0110075 key = 60, value = 0.0106314 key = 61, value = 0.0101089 key = 62, value = 0.00984838 key = 63, value = 0.00940268 key = 64, value = 0.0091522 key = 65, value = 0.00874741 key = 66, value = 0.00859311 key = 67, value = 0.0081711 key = 68, value = 0.00792062 key = 69, value = 0.00766583 key = 70, value = 0.0073242 key = 71, value = 0.00700554 key = 72, value = 0.00687133 key = 73, value = 0.00657563 key = 74, value = 0.00649956 key = 75, value = 0.00624405 key = 76, value = 0.00593544 key = 77, value = 0.00581056 key = 78, value = 0.00550553 key = 79, value = 0.00543663 key = 80, value = 0.00528663 key = 81, value = 0.00521199 key = 82, value = 0.00503184 key = 83, value = 0.0048029 key = 84, value = 0.00468878 key = 85, value = 0.00463567 key = 86, value = 0.00430337 key = 87, value = 0.0041505 key = 88, value = 0.00413686 key = 89, value = 0.00398615 key = 90, value = 0.00388495 key = 91, value = 0.00381102 key = 92, value = 0.00363806 key = 93, value = 0.00360361 key = 94, value = 0.0036072 key = 95, value = 0.00345648 key = 96, value = 0.00343638 key = 97, value = 0.00327346 key = 98, value = 0.00324978 key = 99, value = 0.00308327 key = 100, value = 0.00309188 key = 101, value = 0.00309762 key = 102, value = 0.00295911 key = 103, value = 0.00288734 key = 104, value = 0.00276317 key = 105, value = 0.00277968 key = 106, value = 0.00267777 key = 107, value = 0.00268207 key = 108, value = 0.00264475 key = 109, value = 0.00255934 key = 110, value = 0.00251556 key = 111, value = 0.0024847 key = 112, value = 0.002428 key = 113, value = 0.00240432 key = 114, value = 0.0023426 key = 115, value = 0.00229953 key = 116, value = 0.00230815 key = 117, value = 0.00228733 key = 118, value = 0.0022902 key = 119, value = 0.00227011 key = 120, value = 0.0020835 key = 121, value = 0.00218183 key = 122, value = 0.00212154 key = 123, value = 0.00208063 key = 124, value = 0.00201102 key = 125, value = 0.00209283 key = 126, value = 0.00203326 key = 127, value = 0.00197011 key = 128, value = 0.00209427 key = 129, value = 0.00204044 key = 130, value = 0.00200599 key = 131, value = 0.00195073 key = 132, value = 0.00197944 key = 133, value = 0.00199594 key = 134, value = 0.00202465 key = 135, value = 0.00197728 key = 136, value = 0.00198302 key = 137, value = 0.0019658 key = 138, value = 0.00198805 key = 139, value = 0.0019414 key = 140, value = 0.00201819 key = 141, value = 0.00196149 key = 142, value = 0.00198518 key = 143, value = 0.00200384 key = 144, value = 0.0020024 key = 145, value = 0.00201891 key = 146, value = 0.00191915 key = 147, value = 0.00190551 key = 148, value = 0.00182585 key = 149, value = 0.00183877 key = 150, value = 0.00182441 key = 151, value = 0.00191484 key = 152, value = 0.00185599 key = 153, value = 0.00180934 key = 154, value = 0.00181221 key = 155, value = 0.00179211 key = 156, value = 0.00179642 key = 157, value = 0.0018036 key = 158, value = 0.00180647 key = 159, value = 0.0017268 key = 160, value = 0.00181293 key = 161, value = 0.00184523 key = 162, value = 0.00181652 key = 163, value = 0.00179714 key = 164, value = 0.00182011 key = 165, value = 0.00176125 key = 166, value = 0.00181508 key = 167, value = 0.00190264 key = 168, value = 0.0018158 key = 169, value = 0.0018079 key = 170, value = 0.00181006 key = 171, value = 0.00186604 key = 172, value = 0.00187609 key = 173, value = 0.00186819 key = 174, value = 0.00197226 key = 175, value = 0.0019457 key = 176, value = 0.00199738 key = 177, value = 0.00206484 key = 178, value = 0.00209642 key = 179, value = 0.00208781 key = 180, value = 0.00201963 key = 181, value = 0.00197154 key = 182, value = 0.00190049 key = 183, value = 0.0018768 key = 184, value = 0.00180144 key = 185, value = 0.00181293 key = 186, value = 0.00169594 key = 187, value = 0.00163924 key = 188, value = 0.00146125 key = 189, value = 0.0014512 key = 190, value = 0.00136939 key = 191, value = 0.00137226 key = 192, value = 0.001378 key = 193, value = 0.00130479 key = 194, value = 0.00136077 key = 195, value = 0.00141891 key = 196, value = 0.0014469 key = 197, value = 0.00145695 key = 198, value = 0.00143829 key = 199, value = 0.00133135 key = 200, value = 0.00119139 key = 201, value = 0.0010658 key = 202, value = 0.0010012 key = 203, value = 0.000943067 key = 204, value = 0.00091723 key = 205, value = 0.00076364 key = 206, value = 0.000645219 key = 207, value = 0.000610051 key = 208, value = 0.000607898 key = 209, value = 0.000591391 key = 210, value = 0.000598568 key = 211, value = 0.000601439 key = 212, value = 0.000602156 key = 213, value = 0.00059785 key = 214, value = 0.000655267 key = 215, value = 0.000605745 key = 216, value = 0.00057919 key = 217, value = 0.000593544 key = 218, value = 0.000600721 key = 219, value = 0.00060718 key = 220, value = 0.000638042 key = 221, value = 0.000619381 key = 222, value = 0.000625123 key = 223, value = 0.000668185 key = 224, value = 0.000652396 key = 225, value = 0.000663161 key = 226, value = 0.000681822 key = 227, value = 0.000630147 key = 228, value = 0.000642348 key = 229, value = 0.00059785 key = 230, value = 0.000652396 key = 231, value = 0.000688281 key = 232, value = 0.000624405 key = 233, value = 0.000676798 key = 234, value = 0.000656702 key = 235, value = 0.000624405 key = 236, value = 0.000643783 key = 237, value = 0.000707659 key = 238, value = 0.000663879 key = 239, value = 0.00071986 key = 240, value = 0.000716989 key = 241, value = 0.00072919 key = 242, value = 0.00071986 key = 243, value = 0.000740674 key = 244, value = 0.000765794 key = 245, value = 0.000762205 key = 246, value = 0.000823928 key = 247, value = 0.000852636 key = 248, value = 0.000940914 key = 249, value = 0.000998331 key = 250, value = 0.00109235 key = 251, value = 0.00122297 key = 252, value = 0.00151723 key = 253, value = 0.00198518 key = 254, value = 0.00309691 key = 255, value = 0.0284664 sum = 1 -------------------------------------------------------***** std::array Histogram ***** 0 count = 1966 1 count = 65 2 count = 72 3 count = 75 4 count = 71 5 count = 49 6 count = 67 7 count = 52 8 count = 78 9 count = 58 10 count = 60 11 count = 58 12 count = 66 13 count = 75 14 count = 86 15 count = 98 16 count = 105 17 count = 139 18 count = 301 19 count = 554 20 count = 1052 21 count = 1551 22 count = 2407 23 count = 3593 24 count = 5618 25 count = 8144 26 count = 10541 27 count = 12335 28 count = 14096 29 count = 15881 30 count = 16950 31 count = 17881 32 count = 18950 33 count = 19432 34 count = 20085 35 count = 20687 36 count = 21367 37 count = 21758 38 count = 22450 39 count = 23288 40 count = 23501 41 count = 23818 42 count = 24173 43 count = 23949 44 count = 23445 45 count = 22823 46 count = 22218 47 count = 21807 48 count = 21137 49 count = 20491 50 count = 19820 51 count = 19644 52 count = 19148 53 count = 18567 54 count = 18190 55 count = 17536 56 count = 16935 57 count = 16640 58 count = 15821 59 count = 15337 60 count = 14813 61 count = 14085 62 count = 13722 63 count = 13101 64 count = 12752 65 count = 12188 66 count = 11973 67 count = 11385 68 count = 11036 69 count = 10681 70 count = 10205 71 count = 9761 72 count = 9574 73 count = 9162 74 count = 9056 75 count = 8700 76 count = 8270 77 count = 8096 78 count = 7671 79 count = 7575 80 count = 7366 81 count = 7262 82 count = 7011 83 count = 6692 84 count = 6533 85 count = 6459 86 count = 5996 87 count = 5783 88 count = 5764 89 count = 5554 90 count = 5413 91 count = 5310 92 count = 5069 93 count = 5021 94 count = 5026 95 count = 4816 96 count = 4788 97 count = 4561 98 count = 4528 99 count = 4296 100 count = 4308 101 count = 4316 102 count = 4123 103 count = 4023 104 count = 3850 105 count = 3873 106 count = 3731 107 count = 3737 108 count = 3685 109 count = 3566 110 count = 3505 111 count = 3462 112 count = 3383 113 count = 3350 114 count = 3264 115 count = 3204 116 count = 3216 117 count = 3187 118 count = 3191 119 count = 3163 120 count = 2903 121 count = 3040 122 count = 2956 123 count = 2899 124 count = 2802 125 count = 2916 126 count = 2833 127 count = 2745 128 count = 2918 129 count = 2843 130 count = 2795 131 count = 2718 132 count = 2758 133 count = 2781 134 count = 2821 135 count = 2755 136 count = 2763 137 count = 2739 138 count = 2770 139 count = 2705 140 count = 2812 141 count = 2733 142 count = 2766 143 count = 2792 144 count = 2790 145 count = 2813 146 count = 2674 147 count = 2655 148 count = 2544 149 count = 2562 150 count = 2542 151 count = 2668 152 count = 2586 153 count = 2521 154 count = 2525 155 count = 2497 156 count = 2503 157 count = 2513 158 count = 2517 159 count = 2406 160 count = 2526 161 count = 2571 162 count = 2531 163 count = 2504 164 count = 2536 165 count = 2454 166 count = 2529 167 count = 2651 168 count = 2530 169 count = 2519 170 count = 2522 171 count = 2600 172 count = 2614 173 count = 2603 174 count = 2748 175 count = 2711 176 count = 2783 177 count = 2877 178 count = 2921 179 count = 2909 180 count = 2814 181 count = 2747 182 count = 2648 183 count = 2615 184 count = 2510 185 count = 2526 186 count = 2363 187 count = 2284 188 count = 2036 189 count = 2022 190 count = 1908 191 count = 1912 192 count = 1920 193 count = 1818 194 count = 1896 195 count = 1977 196 count = 2016 197 count = 2030 198 count = 2004 199 count = 1855 200 count = 1660 201 count = 1485 202 count = 1395 203 count = 1314 204 count = 1278 205 count = 1064 206 count = 899 207 count = 850 208 count = 847 209 count = 824 210 count = 834 211 count = 838 212 count = 839 213 count = 833 214 count = 913 215 count = 844 216 count = 807 217 count = 827 218 count = 837 219 count = 846 220 count = 889 221 count = 863 222 count = 871 223 count = 931 224 count = 909 225 count = 924 226 count = 950 227 count = 878 228 count = 895 229 count = 833 230 count = 909 231 count = 959 232 count = 870 233 count = 943 234 count = 915 235 count = 870 236 count = 897 237 count = 986 238 count = 925 239 count = 1003 240 count = 999 241 count = 1016 242 count = 1003 243 count = 1032 244 count = 1067 245 count = 1062 246 count = 1148 247 count = 1188 248 count = 1311 249 count = 1391 250 count = 1522 251 count = 1704 252 count = 2114 253 count = 2766 254 count = 4315 255 count = 39663 ***** Normalized std::array Histogram ***** 0 count = 0.00141101 1 count = 4.6651e-05 2 count = 5.16749e-05 3 count = 5.3828e-05 4 count = 5.09572e-05 5 count = 3.51676e-05 6 count = 4.80864e-05 7 count = 3.73208e-05 8 count = 5.59812e-05 9 count = 4.1627e-05 10 count = 4.30624e-05 11 count = 4.1627e-05 12 count = 4.73687e-05 13 count = 5.3828e-05 14 count = 6.17228e-05 15 count = 7.03353e-05 16 count = 7.53592e-05 17 count = 9.97613e-05 18 count = 0.00021603 19 count = 0.00039761 20 count = 0.000755028 21 count = 0.00111316 22 count = 0.00172752 23 count = 0.00257872 24 count = 0.00403208 25 count = 0.00584501 26 count = 0.00756535 27 count = 0.00885292 28 count = 0.0101168 29 count = 0.0113979 30 count = 0.0121651 31 count = 0.0128333 32 count = 0.0136006 33 count = 0.0139465 34 count = 0.0144151 35 count = 0.0148472 36 count = 0.0153352 37 count = 0.0156159 38 count = 0.0161125 39 count = 0.016714 40 count = 0.0168668 41 count = 0.0170943 42 count = 0.0173491 43 count = 0.0171884 44 count = 0.0168266 45 count = 0.0163802 46 count = 0.015946 47 count = 0.015651 48 count = 0.0151702 49 count = 0.0147065 50 count = 0.014225 51 count = 0.0140986 52 count = 0.0137427 53 count = 0.0133257 54 count = 0.0130551 55 count = 0.0125857 56 count = 0.0121544 57 count = 0.0119426 58 count = 0.0113548 59 count = 0.0110075 60 count = 0.0106314 61 count = 0.0101089 62 count = 0.00984838 63 count = 0.00940268 64 count = 0.0091522 65 count = 0.00874741 66 count = 0.00859311 67 count = 0.0081711 68 count = 0.00792062 69 count = 0.00766583 70 count = 0.0073242 71 count = 0.00700554 72 count = 0.00687133 73 count = 0.00657563 74 count = 0.00649956 75 count = 0.00624405 76 count = 0.00593544 77 count = 0.00581056 78 count = 0.00550553 79 count = 0.00543663 80 count = 0.00528663 81 count = 0.00521199 82 count = 0.00503184 83 count = 0.0048029 84 count = 0.00468878 85 count = 0.00463567 86 count = 0.00430337 87 count = 0.0041505 88 count = 0.00413686 89 count = 0.00398615 90 count = 0.00388495 91 count = 0.00381102 92 count = 0.00363806 93 count = 0.00360361 94 count = 0.0036072 95 count = 0.00345648 96 count = 0.00343638 97 count = 0.00327346 98 count = 0.00324978 99 count = 0.00308327 100 count = 0.00309188 101 count = 0.00309762 102 count = 0.00295911 103 count = 0.00288734 104 count = 0.00276317 105 count = 0.00277968 106 count = 0.00267777 107 count = 0.00268207 108 count = 0.00264475 109 count = 0.00255934 110 count = 0.00251556 111 count = 0.0024847 112 count = 0.002428 113 count = 0.00240432 114 count = 0.0023426 115 count = 0.00229953 116 count = 0.00230815 117 count = 0.00228733 118 count = 0.0022902 119 count = 0.00227011 120 count = 0.0020835 121 count = 0.00218183 122 count = 0.00212154 123 count = 0.00208063 124 count = 0.00201102 125 count = 0.00209283 126 count = 0.00203326 127 count = 0.00197011 128 count = 0.00209427 129 count = 0.00204044 130 count = 0.00200599 131 count = 0.00195073 132 count = 0.00197944 133 count = 0.00199594 134 count = 0.00202465 135 count = 0.00197728 136 count = 0.00198302 137 count = 0.0019658 138 count = 0.00198805 139 count = 0.0019414 140 count = 0.00201819 141 count = 0.00196149 142 count = 0.00198518 143 count = 0.00200384 144 count = 0.0020024 145 count = 0.00201891 146 count = 0.00191915 147 count = 0.00190551 148 count = 0.00182585 149 count = 0.00183877 150 count = 0.00182441 151 count = 0.00191484 152 count = 0.00185599 153 count = 0.00180934 154 count = 0.00181221 155 count = 0.00179211 156 count = 0.00179642 157 count = 0.0018036 158 count = 0.00180647 159 count = 0.0017268 160 count = 0.00181293 161 count = 0.00184523 162 count = 0.00181652 163 count = 0.00179714 164 count = 0.00182011 165 count = 0.00176125 166 count = 0.00181508 167 count = 0.00190264 168 count = 0.0018158 169 count = 0.0018079 170 count = 0.00181006 171 count = 0.00186604 172 count = 0.00187609 173 count = 0.00186819 174 count = 0.00197226 175 count = 0.0019457 176 count = 0.00199738 177 count = 0.00206484 178 count = 0.00209642 179 count = 0.00208781 180 count = 0.00201963 181 count = 0.00197154 182 count = 0.00190049 183 count = 0.0018768 184 count = 0.00180144 185 count = 0.00181293 186 count = 0.00169594 187 count = 0.00163924 188 count = 0.00146125 189 count = 0.0014512 190 count = 0.00136939 191 count = 0.00137226 192 count = 0.001378 193 count = 0.00130479 194 count = 0.00136077 195 count = 0.00141891 196 count = 0.0014469 197 count = 0.00145695 198 count = 0.00143829 199 count = 0.00133135 200 count = 0.00119139 201 count = 0.0010658 202 count = 0.0010012 203 count = 0.000943067 204 count = 0.00091723 205 count = 0.00076364 206 count = 0.000645219 207 count = 0.000610051 208 count = 0.000607898 209 count = 0.000591391 210 count = 0.000598568 211 count = 0.000601439 212 count = 0.000602156 213 count = 0.00059785 214 count = 0.000655267 215 count = 0.000605745 216 count = 0.00057919 217 count = 0.000593544 218 count = 0.000600721 219 count = 0.00060718 220 count = 0.000638042 221 count = 0.000619381 222 count = 0.000625123 223 count = 0.000668185 224 count = 0.000652396 225 count = 0.000663161 226 count = 0.000681822 227 count = 0.000630147 228 count = 0.000642348 229 count = 0.00059785 230 count = 0.000652396 231 count = 0.000688281 232 count = 0.000624405 233 count = 0.000676798 234 count = 0.000656702 235 count = 0.000624405 236 count = 0.000643783 237 count = 0.000707659 238 count = 0.000663879 239 count = 0.00071986 240 count = 0.000716989 241 count = 0.00072919 242 count = 0.00071986 243 count = 0.000740674 244 count = 0.000765794 245 count = 0.000762205 246 count = 0.000823928 247 count = 0.000852636 248 count = 0.000940914 249 count = 0.000998331 250 count = 0.00109235 251 count = 0.00122297 252 count = 0.00151723 253 count = 0.00198518 254 count = 0.00309691 255 count = 0.0284664 sum = 1 elapsed time: 2.59382 Computation finished at Mon Mar 3 14:01:19 2025 elapsed time: 3.14067
All suggestions are welcome.
The summary information:
Which question it is a follow-up to?
An Updated Multi-dimensional Image Data Structure with Variadic Template Functions in C++,
histogram Template Function Implementation for Image in C++,
Histogram of Image using std::map in C++ and
histogram_normalized and histogram_with_bins Template Functions Implementation for Image in C++
What changes has been made in the code since last question?
I implemented
normalize_histogram
template function in this post.Why a new review is being asked for?
Please review the implementation of
normalize_histogram
template function and its tests.