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_histogramtemplate 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_histogramtemplate function in this post.Why a new review is being asked for?
Please review the implementation of
normalize_histogramtemplate function and its tests.