18.07.2015

С точки зрения лягушки

Когда-то в подростковом возрасте прочитал статью, про то, как видят лягушки, а на самом деле, земноводные и пресмыкающиеся. Они не "видят" все поле зрения, а реагируют только на изменения яркости. Очень удобно при охоте. Сразу видно движение, а фон не отвлекает внимание.

При разработке сжатия видео с использованием вейвлет-преобразования я рассчитываю разницу между кадрами. Что, на мой взгляд, очень похоже на лягушачье зрение. Вот пример невинной постельной сцены с точки зрения лягушки, только канал яркости:
Мелкий точечный шум в начале и конце ролика не имеет отношения к лягушачьему зрению. Это артефакты MPEG сжатия. Когда разница между кадрами невелика, алгоритм пытается улучшить мелкую детализацию изображения. Из-за этого и возникает такой шум.
А вот исходный ролик:
Какая разница, да? Хоть она и велика, в реальности зрение человека чем-то похоже на зрение  более низко развитых животных. Оно также реагирует только на изменение интенсивности сигнала, а неизменный сигнал не воспринимает. Почему же мы видим не фрагменты двигающихся объектов, а яркое, насыщенное изображение по всему полю зрения? Это помогают очень мелкие, незаметные для человека, движения глазного яблока. Так называемый нистагм. Так что яркую и сочную картинку мы видим из-за того, что наши глаза постоянно дрожат.

Конечно, приведенный выше пример весьма условен. Я не знаю точно, не только как видят лягушки, но и как видит человек с полностью обездвиженным глазом. Возможно, фон у изображения будет не черным, а например, серым. Или цветным.
Зрение вообще сложная штука, видим мы не только и не столько глазами, сколько мозгом. Что бы видеть как лягушка, надо быть лягушкой. А я могу только предполагать.

11.07.2015

Вейвлеты

Когда-то, наверное, в 2003 году, не помню уж откуда и почему, нас на кафедре завлекла тема вейвлетов. Нас - это на самом деле меня и Артема. Есть подозрение, что это Артем ее где-то и нарыл. Он хорошо знает математику и любит ее и всякие новшества. В отличие от меня, консерватора.

Вейвлеты, если не погружаться в математику, которую я совсем забыл, да, в общем-то, хорошо и не знал никогда - это некий вариант преобразования в рамках гармонического анализа. Все изучали в курсе математики преобразование Фурье. Вейвлет-преобразование чем-то похоже, только, в отличие от Фурье, имеют четкую привязку ко времени.

Используются вейвлет-преобразования весьма широко, но нас тогда интересовало их приложения с точки зрения сжатия изображений. И, надо сказать, мы достигли в этом деле некоторых успехов.

В частности, я написал программку, которая сжимала изображение не хуже, чем JPEG. На самом деле при сильной компрессии она давала лучшее качество изображения, чем JPEG. При малой компрессии она чуть-чуть проигрывала JPEG в детализации. Для сжатия без потерь использовался алгоритм арифметического сжатия. Первый вариант такого алгоритма в рамках курсового проекта сделал под моим руководством Александр Шендриков. Я же использовал несколько переработанную версию этой реализации.

Естественно, эта разработка не представляла какого-то практического интереса, в силу наличие известного и широко распространенного стандарта JPEG. Поэтому я потихоньку потерял к ней интерес, да и времени не оставалось ею заниматься.

Правда, возникла идея использовать вейвлет-преобразование для сжатия видео. Но сам я ею занимать не стал, а несколько раз выдавал в качестве курсовой работы студентам. В конце концов эти попытки оказались неудачными. Последний студент, выполнявший эту работу, пришел к выводу, что предложенный мною метод сжатия оставляет на текущем кадре следы от предыдущих. После чего все эта работа оказалась заброшенной.

Но вот, после увольнения из университета, у меня неожиданно появилось немного свободного времени, так как не нужно совмещать несколько должностей. И я решил провести ревизию всех этих наработок. Естественно, не просто так, а потому что меня посетила идея, как можно обойти обнаруженный студентами недостаток.

В результате выяснилось, что, похоже, вывод студента был несколько поспешен. Заметные артефакты от предыдущих кадров остаются только при очень сильной степени сжатия. При сжатии видеопотока до 30 раз эти артефакты отсутствуют, и возможно, при грамотном выборе коэффициента сжатия по ходу видео, возможно, они не заметны и при сжатиях до 40 раз.

Такими коэффициентами сжатия, сейчас, конечно, никого не удивишь, и в общем-то, они наверное, соответствуют коэффициентам сжатия MPEG-2, возможно, при несколько лучшем качестве изображения. Добиться большего сжатия, скорее всего, невозможно без предсказания движения между кадрами. Но это уже совсем другая история.

Сейчас, даже без какой либо оптимизации, на тестовой программе возможно снимать 1 кадр/с с экрана разрешением 1280х1024 при 40-50% загрузке одного ядра.