пятница, 18 октября 2013 г.

Знаете ли вы...

Есть в любой области всякие забавные неочевидности, на лекциях мы упоминали несколько таких, например, откуда взялись 25 и 30 кадров/с в телевидении в Европе и США соответственно. А вот из той же темы про видео/ТВ, кажется, я это говорил, но вдруг забыли:

На вектороскопе (измерительный прибор для телевизионного сигнала в виде цветового круга, а по сути --  очень похож на осциллограф) есть маркер "цвет кожи". То есть, это вполне определенный градус (направление, то есть -- оттенок) на цветовом круге. А теперь вспомним всё, что мы знаем о людях с разным цветом кожи. Цветом ли? Оказывается, цвет (оттенок) кожи как раз у всех людей одинаковый, отличаются другие характеристики.

Желающие могут проверить это утверждение, взяв фотографии людей разных рас и "цветов кожи" -- какая у вас получится статистика? Я не пробовал. :)

В подтверждение этого тезиса могу добавить, что среди методов выделения человека (для автоматического слежения камерой за выступающим, например) существует skin-color based tracking. Работает, значит.

9 комментариев:

  1. Мне больше интересно почему при использовании стандарта номер 601 в преобразовании RGB -> YCbCr, у меня цвет плывет, а самое главное других вариантов преобразования нет.

    ОтветитьУдалить
    Ответы
    1. Так это же и будет "исследовательской частью" в твоей курсовой :)

      А попробуй вручную взять и пересобрать RGB BMP (чтобы не заморачиваться с жатыми картинками). Потом увеличить цветовые составляющие до исходного размера (но содержательно они останутся урезанными) методом "ближайшего соседнего" значения и переведи полученное обратно в RGB и запиши в BMP -- вот тебе ручная субдискретизация. По размеру ничего не выиграешь, зато артефакты будут ровно те, какие должны быть. Причем, сначала уменьшай до 4:2:2, потом до 4:2:0 -- второй шаг будет соответствовать твоему заданию из курсовой.

      Это всё несложно сделать вручную в любом редакторе, который может работать с цветоразностными моделями, но ты уж как-то программно это оформи. А потом будет понятно, что ждать от библиотек -- глюки это или фичи.

      Удалить
    2. как бы дело не в этом, дело в том, что при использовании формулы на перегон RGB -> YCbCr, которые есть на википедии и используются в большинстве библиотек таких как opencv, PIL, PILLOW - я из любого нормально выглядящего изображения получаю поплыв по какому либо из цветов, обычно это Cr. Я бы понял, если бы это было связанно с питоном, но когда даже нормальная сишная библиотека выдает такой результат - я в недоумении. А такие функции как convert("YCbCr", img) в PIL, никакой работы кажется вообще не производят. Сейчас вот спустя 3-4 минуты ручной конверсации по пиксельно с выделением RGB каналов и переводом их по формулам в YCbCr изображения 3720х4200 в png и состоящим в основном из белого цвета с небольшими деталями зеленого и синего - я получил: Розовое изображение с тусклыми синим и зеленым.

      Удалить
    3. Вот тут я ничего не могу сказать -- не крутил их сам. А ручное смещение возможно? Может компенсацию ввести по сбойному каналу? Вообще преобразование должно быть абсолютно незаметным. И, кстати, какие-нибудь ффмпеги не умеют ли того же? Конвертируешь в uncompressed RGB, потом что-нибудь lossless 4:4:4 и вперед. Это я так, в порядке "с ходу лучше ничего не придумал".
      Ну или искать-копать, чего это оно глючит. Можно же и вручную взять один пиксель и прогнать по этим формулам -- получится то же самое?

      Удалить
    4. ну что-то в ffmpege есть такое, насчет прогонки по пикселям, получается не то же самое, но нигде ничего по поводу компенсации или подробно как же эту фигню делать - нет. Википедия просто говорит, что цифровые данные по этим формулам, аналоговые по этим. В иностранных статьях обычно идет разговор о видео или все ссылаются на 601 стандарт, который я использую, а так же они не используют YCbCr, они под одну гребенку взяли YCbCr, YPbPr и назвали это все YUV и используют его для работы с видео, но не изображениями(и я понимаю, что видео это просто изображения подряд, но все же). В общем у этой довольно просто темы, офигенное дно айсберга. В общем я попытаюсь, что нибудь еще найти, но пока у меня нет ни идей, ни понятий почему не работает простая математика используемая тем же Photoshop или ffmpeg.

      Удалить
    5. Я бы начал с раскопок в разных форумах/статьях, включая забугорные. Заодно записывай -- вот же и курсовая получается хоть с каким-то исследованием, а не просто "взял библиотеку... написал к ней ввод-вывод в гую... вот что получилось".

      Удалить
  2. Я наконец-то понял в чем проблема. Математика верна, он правильно вычисляет все числовые значения цветов, проблема в библиотеке PIL и как следствие в других библиотеках тоже, они не сохраняют изображение в формате YCbCr они сохраняют его в RGB в результате чего цвета YCbCr подбираются по RGB палитре, и это не возможно задать как параметр для сохранения, так что я не знаю как записать полученное мной изображение, однако коэффициенты цветов найдены верно.

    ОтветитьУдалить
    Ответы
    1. Сохраняют или показывают? Просто в чистом виде YCbCr показать, как легко догадаться, невозможно -- любой монитор показывает только RGB. То есть, нужно ещё и средство просмотра с автоконвертацией на лету в RGB, как многие смотрелки на лету смотрят CMYK (это куда более сложная задача, хотя и похожего плана).

      Удалить
  3. ну я не знаю как объяснить, вот у вас есть пиксель RGB (255, 240, 120), переводим получаем YCbCr (240, 102, 125) цвета одинаковые с точки зрения глаза( про оттенки не знаю), но когда я сохраняю картинку я видимо получаю RGB (240, 102, 125) , а не YCbCr. Просто мне кажется это бредом переводить rgb в yuv , а потом обратно , чтобы сохранить картинку в нормальном цвете rgb. Возникает вопрос как сохранить картинку с цветами по палитре YUV.

    ОтветитьУдалить