Перейти к содержимому
Compvision.ru
Smorodov

Разделение изображений при помощи анализа независимых компонент (ICA)

Recommended Posts

Реализовал пример разделения изображений при помощи анализа независимых компонент (ICA):

main.cpp (кроме OpenCV используется библиотека Eigen).

Пример результатов работы:

На входе смесь изображений в различных пропорциях:

post-1-0-55634400-1393578215_thumb.png

На выходе разделенные изображения.

post-1-0-54532200-1393578227_thumb.png

Более продвинутые функции реализация в МАТЛАБ:

neural_pca_ica_MATLAB.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Интересно, а можно ли с помощью ICA отделить грязь с объектива от видео? Или капли дождя, например.

С одной стороны, это как раз некоторая смесь независимых изображений с альфа блендом. А с другой - освещение сцены влияет на обе компоненты (сама сцена и загрязнение).

Ну и не сильно понятно, что делать с движущимися объектами. Ммм... Построить модель фона и по ней разделять? А если камера движется? Или строить две разных модели фона по каждой компоненте?

Есть ли какие-нибудь теоретические мысли об этом? Если что я на практике проверю и выкложу результаты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну и пара примеров с одного удобного видео:

1.

2.

объектива.

Кстати, таким образом можно убирать всякий текстовый мусор типа даты и времени с кадров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Например если поставить две камеры, то блики со стекла убирать можно.

Можно и одной, если изображение блика более-менее статично.

По поводу объектива, в принципе наверное можно, если грязь не сильно быстро ползает по объективу, но с одной камерой есть риск потерять статичные объекты.

Только этот метод не такой-уж быстрый.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, скорость - проблема не большая. Меня интересуют не столько блики (они достаточно динамичны), сколько грязь (статична). Хотелось бы время от времени определять её наличие и характеристики, а после энное число кадров просто убирать с кадра найденное.

Запускал твой пример на последовательности кадров (1-й и 2-й, 2-й и 3-й,...) - надо думать, как адаптировать под задачу.

Раз нужна синхронизация по времени, то можно попробовать сделать финт ушами: посчитать оптический поток из одного кадра в другой, сделать warping (как это по-русски?) из следующего в предыдущий и посмотреть на результат. Взять за основу того же Brox'а из OpenCV, вроде неплохой у него алгоритм. Вроде всё правильно? Погрешность, конечно, будет ого-го, но посмотрим.

P.S. Скоро отпуск, проверю все гипотезы, пока только теорией интересуюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здесь получается две разделимые категории сигналов:

1) то, что меняется от кадра к кадру не по линейному закону. То есть нельзя перевести одно в другое умножив на подходящий коэффициент. (типа помехи) Сюда попадает меняющийся фон.

2) то, что сохраняется на анализируемых кадрах точностью до коэффициента (коррелирующие между собой по яркости точки). (типа сигнал) Блики и статичные объекты попадут сюда.

Если взять 4 кадра, то разделится, скорее всего, на один канал сигнала и 3 канала помех.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://scikit-learn.org/stable/auto_examples/decomposition/plot_ica_blind_source_separation.html

а почему сигнал восстанавливается однозначно?

Потому что существует несколько входов, на которых каждый из сигналов представлен одинаковой формой, но с разным масштабом, причем коэффициенты масштаба для каждого из сигналов свои и они постоянны в течение всего измерения. Возникает переопределенная СЛАУ, решение которой и дает разделение сигналов. Чем то похоже на разложение по базису, только базис криволинейный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×