Задание №2

Добавить поддержку двух моделей изображения:

Добавить вывод гистограммы для каждого канала (для всего изображения – по желанию).

Преобразование RGB в YUV и обратно

Без потерь:

RGB => YUV YUV => RGB
u = r - g g = y - (u + v)/4
v = b - g r = u + g
y = (u + v)/4 + g b = v + g

С потерями:

RGB => YUV YUV => RGB
y = round(0.299*r + 0.587*g + 0.114*b) b = clip(y + 1.770*u)
u = round(0.565*(b - y)) g = clip(y - 0.344*u - 0.714*v)
v = round(0.713*(r - y)) r = clip(y + 1.403*v)

Вспомогательные функции:

int round(double value)
{
    return static_cast<int>(value + (value < 0 ? -0.5 : 0.5));
}

int clip(double value)
{
   const int n = round(value);

   if (n < 0)
       return 0;

   if (n > 255)
       return 255;

   return n;
}

Преобразование числа в код Грея

unsigned int gray(unsigned int value) {
    return value ^ (value >> 1);
}