Предполагая, что вы охарактеризуете цвет каждого пикселя, используя RGB (по сравнению, скажем, CMYK ), вы можете построить трехмерный массив (по одному измерению для R, G и B). Затем выберите количество ячеек, которое вы хотите иметь в каждом измерении - чем больше ячеек, тем больше различие вы проводите между похожими оттенками.
Как только это будет сделано, просто переберите растровое представление вашего изображения, суммируя # пикселей, попадающих в каждую из ячеек вашего трехмерного массива. Ячейка с наибольшей суммой будет преобладающим цветом.
Возможно, вы захотите сделать свой алгоритм легко настраиваемым для # бинов в каждом измерении, чтобы вы могли настроить, насколько он различает похожие цвета.
image = new Bitmap("C:\\test.bmp", true);
int x, y;
// Loop through the images pixels to product 3d histogram
for(x=0; x<image.Width; x++)
{
for(y=0; y<image.Height; y++)
{
Color pixelColor = image.GetPixel(x, y);
// Increment color count in appropriate cell of your 3d histogram here
...
}
}