Увидеть мир глазами кошки

Прокомментировать Просмотры: 0

А вам хотелось когда-нибудь увидеть мир так, как его видит кошка? Не образно, а буквально: с её цветовой палитрой, обзором и особым вниманием к движению.

Модель можно открыть и испытать прямо здесь.

Около семнадцати лет назад я много занимался моделированием человеческого зрения, восприятия цвета и дальтонизма. Этой теме посвящены статьи о моделировании зрения, нормализации изображения с учётом восприятия и работе модели eye tracking. Тогда меня интересовало, как глаз формирует изображение, что происходит при нарушении работы цветового канала и можно ли воспроизвести эти процессы на компьютере.

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

Как устроено зрение кошки

Кошки относятся к дихроматам: у них есть два типа колбочек с пиками чувствительности в синей области спектра (примерно 450–460 нм) и жёлто-зелёной (около 550–560 нм). Красный и зелёный не воспринимаются как самостоятельные цвета — они объединяются в один жёлто-зелёный канал. Это отчасти напоминает модели протанопии и дейтеранопии, которые я создавал раньше, но для кошки такое ограничение различения красного и зелёного — особенность нормы, а не нарушение. Жёлтые оттенки к тому же выглядят менее насыщенными. Мир для кошки не чёрно-белый, но цветовая гамма в нём скромнее нашей: синий сохраняет свою индивидуальность, тогда как красные и зелёные цвета смещаются к желтовато-серым тонам.

Поле зрения у кошек шире человеческого. По горизонтали угол обзора составляет примерно 200–270° против наших 180–220°. Глаза расположены дальше друг от друга и не совсем на одной плоскости, поэтому бинокулярный обзор шире именно по горизонтали. По вертикали разница выражена слабее. Кроме того, на сетчатке есть visual streak — горизонтальная область повышенной остроты зрения. Выше и ниже неё периферическое зрение заметно менее чёткое: детали размываются. Вблизи кошки также видят хуже человека с нормальной аккомодацией: на расстоянии примерно до 80 см изображение выглядит мягче.

Отдельная особенность — восприятие движения. У человека есть свои психологические закономерности восприятия цвета (об этом рассказывалось в статье о силе цвета), а у кошек — свои характерные особенности зрения. Кошачья зрительная система особенно чутко реагирует на объекты, движущиеся по горизонтали. Речь не просто о способности замечать движение: горизонтальная составляющая скорости для кошки важнее других. Быстро перемещающийся вбок объект резко выделяется на фоне, который при этом может казаться относительно неподвижным.

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

Цветовая модель

В прежних моделях дальтонизма (о дальтонизме и моделировании цветового восприятия, о том, как видят мир люди с дальтонизмом) я исходил из простой идеи: оценить вклад колбочек и пересчитать цвет так, будто один из каналов ослаблен или отсутствует. Для кошачьего зрения принцип похож, но изначально используются только два канала.

В программе цвет корректируется прежде, чем применяются эффекты размытия. Изображение RGB преобразуется в упрощённую дихроматическую модель: отдельно учитывается синий канал, а красный и зелёный объединяются в жёлто-зелёный. Затем снижается насыщенность жёлтых оттенков. Это не полноценная спектрофотометрическая модель на основе кривых Govardovskii, но подход близок к использованному в экспериментах с протанопией и дейтеранопией: мы не просто «окрашиваем изображение в жёлтый», а пересчитываем его, имитируя работу другого набора фоторецепторов. Красные и зелёные объекты в результате становятся более похожими по цвету, синий сохраняет относительную самостоятельность, а общая насыщенность изображения уменьшается.

Угол обзора и эллиптическая дисторсия

Широкое поле зрения кошки проявляется прежде всего по горизонтали. Однако плоский видеокадр не может передать настоящий обзор в 200 градусов. Поэтому эллиптическая дисторсия здесь служит способом приблизить прямоугольное изображение к более широкому бинокулярному полю.

По горизонтали картинка сжимается сильнее, по вертикали — слабее. Это не сферический эффект «рыбий глаз», при котором искажение одинаково во всех направлениях. Вместо этого получается эллиптическое преобразование: боковые части изображения заметнее сжимаются, чем верхняя и нижняя. Благодаря этому возникает впечатление более широкого обзора, хотя зритель всё ещё смотрит на обычный прямоугольный кадр. В приложении преобразуются UV-координаты в шейдере — несколько разных искажений накладывать друг на друга не нужно.

Движение и внимание

Пожалуй, это самая любопытная часть модели. Кошка не просто замечает движение: её зрительная система, а затем и мозг, особенно чувствительны к его горизонтальной составляющей. Чтобы передать эту особенность, в модели применяются два приёма.

Во-первых, воспроизведение замедляется, если обнаруживается быстрый горизонтальный объект на фоне. Когда заметного движения в кадре нет, видео идёт немного быстрее обычного — примерно на скорости 1,15×. При появлении быстрого объекта скорость снижается примерно до 0,85×. Это не замедление ради визуального эффекта, а попытка передать предполагаемое восприятие кошки: быстро движущийся по горизонтали объект становится заметнее, словно время вокруг него растягивается.

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

Движение оценивается относительно фона. Если камера поворачивается, сначала определяется и компенсируется смещение фона. Движение, оставшееся после этой компенсации, приписывается объектам. Горизонтальная составляющая этого остаточного движения используется и для изменения скорости воспроизведения, и для построения маски резкости.

Верхняя и нижняя части кадра также немного размываются сильнее центральной полосы — так моделируется visual streak. Этот эффект выражен слабее, чем влияние движения, но тоже учитывается.

Почему без нейросети

Я пробовал использовать TensorFlow.js для оценки движения и глубины. Идея была привлекательной: взять готовую модель глубины или optical flow и получить более точную карту. Однако на практике обнаружились две проблемы. Модели, которые работали достаточно хорошо, оказались слишком тяжёлыми для веб-страницы: их загрузка неудобна для пользователя и заметно замедляет обработку. Более компактные варианты можно было встроить, но на обычных видео с телефона они давали слишком шумный и нестабильный результат. Поэтому я остановился на классическом подходе: оценке общего смещения камеры, вычислении остаточного движения и создании маски. Он проще, предсказуемее и не требует загружать сотни мегабайт весов.

Как устроена модель

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

Никакой магии здесь нет. Движение определяется классическим способом: оценивается общее смещение камеры, вычисляется остаточное движение и формируется маска. Цвет обрабатывается упрощённым пересчётом каналов, а дисторсия сводится к одному геометрическому преобразованию. Но в сочетании эти приёмы создают ощущение, будто изображение воспринимает окружающий мир иначе.

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

Посмотреть код модели и попробовать её можно на этой странице.

Следующим шагом логично сделать модели зрения собаки и быка. Ещё одна интересная задача — показать человеку тетрахроматическое зрение, например такое, каким обладают некоторые птицы (голуби и куры) или осьминоги: у них есть четыре типа фоторецепторов.

 

Источник

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов