Pull to refresh

Comments 24

Очень круто! Даже не приходило в голову решать эту задачу при помощи Particle Filter.
Наверное, меня заминусуют, но мне в голову даже сама задача не приходила...)
Particle Filter — отличная вещь, когда надо учитывать предысторию процесса. Я например сейчас его пытаюсь использовать в одной задаче по обработке текста!
Супер!
А где-то доступна реализация под Mac OS (что на видео)?
Реализация на Python, не зависит от платформы. Да и не реализация это, а просто непромышленный код, попробовать идею.
UFO just landed and posted this here
Кусочки. В статье написано под спойлером.

SIFT конечно отличная технология, но меня интересуют более «гуманные» или биологически обоснованные подходы. Пусть они менее точные пока.
Очень интересно! Самому «поиграться» можно с результатом или это будущая часть коммерческого продукта?
Нет, никакой коммерции. Если есть интерес, выложу исходники.
На самом деле сам давно размышлял об этой идее и лет о ужас 10 назад в матлабе пытался реализовать, но до ума не довёл. В общем интерес есть самый настоящий. Готов предложить рефакторинг вашего кода на плюсах.
Вывесил исходники — смотрите Update в статье.
Правильно я понимаю, что построить карту глубины в автоматическом режиме этим методом нельзя? А какова тогда его практическая ценность?
Particle Filter это конечно здорово, но задачу «сопоставления «одной и той же точки» на двух изображениях» он не решает в общем случае.
Кстати, а вы раньше интересные и очень познавательные статьи выкладывали по обработке изображений!:)
Но что-то ничего нового давно не появлялось(
Ну так ничего интересного из теории не появляется, потому и писать не о чем…
Что касается построения карт глубин, то самые лучшие результаты дают вроде бы алгоритмы на марковских цепях, но что-то они настолько сложные что я так и не смог их толком понять :)
Particle Filter вполне можно рассматривать как алгоритм на марковских цепях. Есть последовательность действий, предыстория. Этот алгоритм даже преподают в блоке с марковскими цепями. Только он очень понятный :)
Ваш вопрос показывает как свободную мысль загоняют в рамки шаблонных решений. Карта глубины что, теперь, единственный полезный продукт любого алгоритма? Я предлагаю способ как сопоставлять две области на изображениях. Хотите построить карту глубины — походите подольше по всему кадру. Меня больше интересовало как смоделировать процесс микроскопических колебаний глаза при рассматривании сцены. Всего в 200 строках кода получилось показать как анализируются несколько гипотез и отбираются наиболее правдоподобные с учетом предыстории.

Извините за ошибки набираю с андройда.
>Ваш вопрос показывает как свободную мысль загоняют в рамки шаблонных решений
Боже упаси :) Я просто позиционирую данный алгоритм. Это не есть алгоритм сопоставления областей изображения. Области вы сопоставляете простым сравнением локальной области.

>Я предлагаю способ как сопоставлять две области на изображениях.
Правильно это фраза должна звучать «Я предлагаю способ как вручную сопоставлять две области на изображениях», потому что алгоритм без вас этого сделать не может.

>Хотите построить карту глубины — походите подольше по всему кадру.
Это не алгоритм…
Мне кажется, вы не поняли идею. Я не просто сопоставляю области, а сопоставляю последовательность областей. Например если у меня забор из одинаковых досок, то в разных местах этого забора локальные области будут практически неразличимы. Но если я моделирую перемещение фокуса внимания вдоль забора, то достаточно точно позиционируюсь.

Что касается ручного режима, то тривиально делается автоматическое перемещение фокуса внимания на случайный вектор или даже лучше с учетом градиента в предыдущей локальной области. Зачем упражняться в очевидном?
Так я ж вас и спрашиваю, может ли ваш алгоритм работать в атономном режиме? Вы же сразу начали про «закапывание идей» :)

>Но если я моделирую перемещение фокуса внимания вдоль забора, то достаточно точно позиционируюсь.

Дык для того что бы программа сама моделировала движение вдоль забора, она должна «понимать» где этот забор. А этого ж как раз и нет.

>Что касается ручного режима, то тривиально делается автоматическое перемещение фокуса внимания на случайный вектор или даже лучше с учетом градиента в предыдущей локальной области

Если вы будете перемещать «фокус внимания» случайным образом, ваш алгоритм работать не будет, ибо он основан на том, что вы перемещаетесь вдоль какого-либо объекта, а не произвольно.
Поправте меня, если я не прав.
Нет, не должна она понимать где забор. Мое единственное предположение: если я в левом кадре смотрю на точку (x, y), то на правом кадре где-то рядом с (x, y) должна быть похожая область. Затем я случайно перемещаюсь в левом кадре в точку (x + dx, y + dy), а в правом кадре перемещаю частицы, наиболее похожие на область (x, y) левого кадра на тот же вектор dx, dy с добавлением шума.

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

Это очень хорошо видно в компьютерной симуляции, которую можно скачать и запустить. Я не делал автоматической генерации вектора dx, dy просто потому, что пока не нужно было. Я ведь могу мышкой и хаотично покликать, и осознанно, и посмотреть что получается.

Если не лень попробовать, могу выложить также несколько кадров. Хотя их можно просто снять своим телефоном, не особенно беспокоясь за калибрацию. Я так вначале и делал.
Я понимаю ход ваших мыслей. Однако метод который вы предлагаете даст заведомо худший результат, чем метод динамического программирования.
Это легко доказать: метод динмического программирования гарантированно дает решение, при котором невязка между левым и правым изображением — минимальна. У вас же алгоритм ничего не гарантирует, а значит дает худший результат. Более того, результат вашего алгоритма не детерминирован. Ведь если вы будете сканировать строки слева направо и справа налево, то вы получите разные результаты.
По сути вы применяете самую простую инутитивную эвристику: если точка сдвинута на dx, то и соседняя точка тоже сдвинута на dx. К сожалению, это простое и неправильное решение. Оно дает посредственные результаты.
Кроме того, для этой эвристики можно применить более простую схему с предсказывающим фильтром (типа фильтра габора) и без всяких партиклов и роев.
Задача построении карты глубин по двум изображениям, даже откалиброванными камерами нормально не решается. Слишком большие ошибки вылазят, проблемное детектирование границ. Годится только в узкоспециализированных задачах. Восстановление 3D с одной камеры из видеопотока в общем случае и то лучше работает.
Это следующий этап — восстановление 3d. Как раз и проверим не выгоднее ли использовать particle filter в услоаиях реального времени и реальной биологической задачи. Здесь не карта глубины важна, а отбор наиболее информативных фрагментов кадра. Например движущихся или быстро приближающихся к нашему организму.

Уже купил нокию е6 на замену надоевшему андро. В нокии питон удобный с легкими библиотеками доступа ко всем нужным аппаратным функциям…
компу торное зрение в массы стажёров и руководителей
Sign up to leave a comment.

Articles