To simplify my question, I will use the pixel as a template.
What is the fastest way I can calculate which value of a pixel is highest, median and lowest? For example:
unsigned char pixel[] = {128, 255, 64};
unsigned char highest, median, lowest;
get_pixel_values_priority(pixel, &highest, &median, &lowest);
printf("Highest %u\nMedian %u\nLowest %u", highest, median, lowest);
Should result:
Highest 255
Median 128
Lowest 64
Since you tagged this with C++, I would use std::vector
objects mixed with the std::sort()
algorithm for making it easy to find these stats. Here's a simple example.
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<float> numbers = { 1, 4, 3, 2 };
std::sort(numbers.begin(), numbers.end());
// numbers = { 1, 2, 3, 4 }
float min = numbers.front();
float max = numbers.back();
float median;
if (numbers.size() % 2) { // odd number of elements
median = numbers[numbers.size() / 2];
}
else { // even number of elements
median = (numbers[numbers.size() / 2] + numbers[numbers.size() / 2 - 1]) / 2;
}
}