Взглянуть на мир глазами кошки
Вам никогда не хотелось посмотреть на мир глазами кошки? Не в метафорическом смысле, а буквально: с её цветами, её полем зрения, её способом выделять движение. Когда-то давно, лет семнадцать назад, я довольно много писал про моделирование человеческого зрения, цветовосприятия и дальтонизма. Были статьи про моделирование зрения, нормализацию картинки под восприятие и работу модели eye tracking. Тогда всё крутилось вокруг человека: как глаз строит изображение, как ломается цветовой канал, как можно попытаться это смоделировать на компьютере.
Кошка в этом смысле — удобный и интересный следующий шаг. Её зрение хорошо изучено, достаточно сильно отличается от человеческого, и при этом остаётся узнаваемым. Можно взять обычное видео с телефона и попробовать показать, как примерно та же сцена могла бы выглядеть для кошки.
Как устроено зрение кошки
Кошка — дихромат. У неё два типа колбочек с пиками чувствительности примерно в синей области (около 450–460 нм) и в жёлто-зелёной (около 550–560 нм). Красный и зелёный для неё не существуют как отдельные цвета: они схлопываются в один жёлто-зелёный канал. Это довольно близко к тому, что я когда-то моделировал для протанопии и дейтеранопии, только здесь «потеря» красно-зелёного различения — норма, а не нарушение. Жёлтый при этом ещё и заметно десатурируется. В результате мир кошки не серый, но и не такой цветной, как наш: синие остаются синими, а всё, что для нас красно-зелёное, уходит в желтовато-сероватые тона.
Поле зрения шире человеческого. Горизонтальный угол обзора у кошки заметно больше — порядка 200–270° против наших 180–220°. Глаза посажены дальше друг от друга и не совсем в одной плоскости, поэтому бинокулярное поле растянуто именно по горизонтали. Вертикально преимущество уже не такое выраженное. Есть ещё visual streak — зона повышенной остроты в центральной горизонтальной полосе сетчатки. Сверху и снизу периферия заметно хуже: детали там размываются. Плюс кошки относительно дальнозорки в ближней зоне — примерно до 80 см всё мягче, чем у человека с нормальной аккомодацией.
И отдельно — про движение. У человека есть свои психологические особенности восприятия цвета (об этом когда-то была статья о силе цвета), а у кошки — свои любопытные особенности восприятия. Кошки (и их зрительная кора) особенно хорошо выделяют объекты, которые движутся горизонтально. Это не просто «они видят движение». Горизонтальная компонента скорости для них приоритетнее. Быстрый горизонтальный объект буквально выскакивает из фона. Фон при этом может оставаться относительно спокойным.
Всё это вместе даёт довольно чёткую картину того, что стоит попробовать смоделировать: цвет, расширенное горизонтальное поле, вертикальную периферию и особое отношение к горизонтальному движению.
Цветовая модель
Когда я когда-то моделировал дальтонизм (про дальтонизм и моделирование цветовосприятия, как видят мир дальтоники), основная идея была простой: посмотреть, как меняется вклад колбочек, и пересчитать цвет в пространстве, где один из каналов ослаблен или отсутствует. С кошкой похожая логика, только каналов изначально два.
В программе цветовая коррекция делается первой, до любых размытий. RGB переводится в упрощённое дихроматическое представление: берётся синий канал и жёлто-зелёная смесь (красный и зелёный схлопываются), после чего насыщенность жёлтого снижается. Это не полная спектрофотометрическая модель по кривым Govardovskii, но принцип тот же, что и в старых экспериментах с протанопией/дейтеранопией: мы не «красим картинку в жёлтый», а пересчитываем её так, как если бы у наблюдателя были другие фоторецепторы. В результате красные и зелёные объекты становятся ближе друг к другу по цвету, синие остаются относительно самостоятельными, а общая насыщенность падает.
Углы обзора и эллипс
Расширенное поле зрения кошки — это в первую очередь горизонталь. Когда мы смотрим на плоскую картинку (кадр видео), у нас нет настоящего 200-градусного обзора. Поэтому эллипсоидная дисторсия здесь — способ адаптировать более широкое бинокулярное поле к прямоугольному кадру.
Горизонталь сжимается сильнее, вертикаль слабее. Это не сферический фишай, где радиус одинаковый во всех направлениях. Получается эллипс: по бокам изображение «поджимается» заметнее, чем сверху и снизу. Визуально это даёт ощущение более широкого взгляда, хотя мы по-прежнему смотрим в обычный прямоугольник. В приложении это делается одним преобразованием UV-координат в шейдере — без наложения нескольких разных дисторсий друг на друга.
Движение и внимание
Самое интересное, пожалуй, здесь. Кошка не просто «видит движение». Её зрительная система (и дальше — мозг) особенно хорошо реагирует на горизонтальную компоненту. Чтобы это показать, в модели сделано две вещи.
Во-первых, при обнаружении быстрого горизонтального движения относительно фона проигрывание замедляется. Когда в кадре ничего особенно не движется, видео идёт чуть быстрее обычного (около 1.15×). Когда появляется быстрый объект, скорость падает (до примерно 0.85×). Это не «замедленная съёмка ради красоты», а попытка дать зрителю то же ощущение, которое, судя по всему, получает кошка: быстрый горизонтальный объект становится заметнее за счёт того, что время вокруг него как бы растягивается.
Во-вторых, сам объект выделяется резкостью. Фон и более медленные объекты размываются, а самый быстрый по горизонтали остаётся самым чётким. Размытие — гауссово, сила зависит от скорости самого быстрого объекта в кадре. Более медленные движущиеся вещи получают промежуточную чёткость. Маска движения ещё и не пропадает мгновенно: она затухает по логистической кривой примерно за 150 мс, так что объект не «выключается» резко.
Детекция при этом идёт относительно фона. Камера может поворачиваться, фон смещается, и это смещение сначала оценивается и компенсируется. То, что остаётся после компенсации, считается движением объектов. Именно по горизонтальной компоненте этого residual и строится и замедление, и маска резкости.
Вертикальная периферия тоже чуть размывается сильнее (visual streak): верх и низ кадра мягче центральной полосы. Это слабее выражено, чем эффект от движения, но присутствует.
Почему без нейросети
Была попытка сделать оценку движения и глубины через TensorFlow.js. Идея выглядела заманчиво: взять готовую модель глубины или optical flow и получить более точную карту. На практике выяснилось две вещи. Крупные модели, которые давали приемлемый результат, слишком тяжёлые для веб-страницы — их неудобно тащить клиенту и они заметно тормозят обработку. Мелкие же, которые ещё можно было впихнуть, давали слишком шумный и нестабильный результат на обычном видео с телефона. В итоге остался классический путь: оценка глобального сдвига камеры, residual и маска. Он проще, предсказуемее и не требует подгружать сотни мегабайт весов.
Как это собрано
Всё крутится в браузере, на клиенте. Видео загружается, нормализуется, дальше кадр за кадром уходит в WebGL-шейдер. В шейдере сначала цвет, потом эллипсоидная дисторсия, гауссово размытие фона и вертикали, смешивание по маске движения. Результат записывается и проигрывается уже с динамической скоростью, причём звук оригинального видео идёт с той же скоростью.
Никакой магии нет. Движение считается классически: оценка глобального сдвига камеры, residual, маска. Цвет — упрощённый пересчёт каналов. Дисторсия — одно геометрическое преобразование. Но вместе это уже даёт ощущение, что картинка смотрит на мир немного иначе.
Научные работы
- Clark D.L., Clark R.A. (2016). Neutral point testing of color vision in the domestic cat. Experimental Eye Research, 153, 23–26. DOI: 10.1016/j.exer.2016.10.002. Поведенческое подтверждение дихромазии с нейтральной точкой около 505 нм.
- Daw N.W., Pearlman A.L. (1970). Cat colour vision: evidence for more than one cone process. The Journal of Physiology, 211(1), 125–137. DOI: 10.1113/jphysiol.1970.sp009270. Электрофизиологические данные о двух типах колбочек.
- Loop M.S., Millican C.L., Thomas S.R. (1987). Photopic spectral sensitivity of the cat. The Journal of Physiology, 382, 537–553. DOI: 10.1113/jphysiol.1987.sp016383. Спектральная чувствительность в фотопических условиях (пики ~454 и 561 нм).
- McIlwain J.T. (1983). Representation of the visual streak in visuotopic maps of the cat’s superior colliculus. Vision Research, 23(5), 507–516. DOI: 10.1016/0042-6989(83)90125-6. Представление visual streak.
- Ringo J., Wolbarsht M.L., Wagner H.G., Crocker R., Amthor F. (1977). Trichromatic vision in the cat. Science, 198(4318), 753–755. DOI: 10.1126/science.910161. Более ранняя работа, предполагавшая трихромазию (позднее уточнено в пользу дихромазии).
Автор: ymik