Как стать автором
Обновить

Комментарии 4

НЛО прилетело и опубликовало эту надпись здесь
практика тут: ymik.habrahabr.ru/blog/68261/ :)

с точки зрения кода:

Препроцессинг:
1. вычисление «зоны острого зрения» — круг радиусом [R] в пикселях, на основе данных по удалённости монитора и DPI этого же монитора
2. вычисление разрешения зрения — минимальная длина отрезка [r] в пикселах, воспринимаемая глазом.

Получение карты силы восприятия цвета:
1. размытие по Гауссу картинки с сигмой [R]
2. нахождение различия размытой картинки с оригиналом (некий аналог аншарпа), дифф считается на основе данных по силе восприятия цвета — ymik.habrahabr.ru/blog/60426/ ymik.habrahabr.ru/blog/60362/

После выполнения имеем карту изменения силы восприятия цвета/яркости.

Вычисляем карту изменения контуров:
Считаем, что контур — это ненулевая вторая производная к каждой точки карты изменения цвета/яркости. Теперь представим, что контур состоит из отрезков длиною в [r]+1, тогда для каждой точки картинки контур представляется в виде двух чисел [alpha] и [delta], где [alpha] — угол наклона к оси абцисс, [delta] — выраженность контура

1. считаем карту контуров в вышепредставленном формате
2. размываем карту контуров гауссом
3. считаем дифф «аншарпом», как в предыдущем случае, отличия складываем среднеквадратично, и получаем карту изменения контуров

Составляем карту узнаваемых объектов
Ищем нейронной сетью лица, глаза, губы, руки, фигуры людей, тексты: habrahabr.ru/blogs/java/60782/ Потом на основе найденых регионах составляем карту объектов: каждый найденный объект добавляет +1.

Получение нормализованной картинки:
Складывем карты изменения цвета/яркости, изменения контуров и карту узнааемых объектов в соответствии с их весами. Результатом имеем нормализацию силы восприятия картинки глазом. Нормализованная картинка, фактически, уже является почти готовым heatmap для eye tracking.

Теперь необходимо составить карту вероятных сакад.

Для этого применяются два алгоритма и второй из них — «эластичная сеть». По этому, вначале строим точки сети. Делаем гексогональную сеть (каждый узел сети соединяется с 6 другими узлами, на самом деле, количество связей не сильно важно, так было просто удобнее считать) из расчёта, что длина связи будет [R]/3. Узлы, вышедшие за пределы картинки будут фиксированными якорями. Сеть должна располагаться симметрично относительно центра картинки.

Теперь считаем все узлы точек «роем», каждый из которых стремится соединиться с самой «сильной» точкой из нормализованной картинки. Поиск точки за один шаг осуществляется в радиусе [R]/3. Совершаем сколько-то шагов до тех пор, пока рой не успокоится и точки перестанут менять своё местоположение.

«Склеим» рой — точки, занявшие одни и те же координаты на карте объединяем с сохранением связей до других точек, убираем дублирующиеся связи.

На полученной сети применяем алгоритм «эластичной сети». Натяжением нити считаем сумму весов точек из карты по линии связи. Сумма векторов связей в соответствии с силой натяжения даёт «импульс» — сдвиг точки за один шаг. Делаем какое-то количество шагов до тех пор, пока не получим нулевой импульс для всех точек.

Результатом является сеть, узлы котрой — точки фиксации, а связи — вероятными сакадами. Heatmap составляется на основе данных о плотности расположения связей и весов точек нормализованной картинки.
НЛО прилетело и опубликовало эту надпись здесь
это я описал, как у меня алгоритм работает :) есть ещё два решения проблемы моделирования eye tracking, одно из них учитывает карту контуров, второе явно нет. В принципе, на не очень сложных картинках можно обойтись без контуров — они уже косвенно заданы в карте цвета/яркости. Точно так же можно обойтись без нормализации под силу восприятия цвета/яркости и использовать только плотность контуров и узнавание объектов. Проблема в том, что на больших картинках это начинает расходиться с реальной статистикой. Третий способ — обучить серию нейронных сетей на разнообразных реальных данных. Но этот способ лагает на шумных объектах.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации