Particle Filter — отличная вещь, когда надо учитывать предысторию процесса. Я например сейчас его пытаюсь использовать в одной задаче по обработке текста!
На самом деле сам давно размышлял об этой идее и лет о ужас 10 назад в матлабе пытался реализовать, но до ума не довёл. В общем интерес есть самый настоящий. Готов предложить рефакторинг вашего кода на плюсах.
Правильно я понимаю, что построить карту глубины в автоматическом режиме этим методом нельзя? А какова тогда его практическая ценность?
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 на замену надоевшему андро. В нокии питон удобный с легкими библиотеками доступа ко всем нужным аппаратным функциям…
Алгоритм Particle Filter в компьютерном зрении: стереовидение