Проблема, которую вы пытаетесь решить, действительно очень интересна!
Я думаю, что вам нужно атаковать его по частям:
Как вы уже указали, внезапное изменение освещения может быть проблематичным. Это показатель того, что вам, вероятно, нужно достичь некоего не зависящего от освещения представления изображений, которые вы пытаетесь проанализировать.
Существует множество методов, которые я нашел очень полезными для инвариантности освещения (применяется для распознавания лиц): DoG-фильтрация (Разница по Гауссу)
Идея состоит в том, что вы сначала конвертируете изображение в оттенки серого. Затем вы генерируете две размытые версии этого изображения, применяя фильтр Гаусса, один чуть более размытый, чем первый. (Вы можете использовать сигма 1,0 и 2,0 в гауссовом фильтре соответственно). Затем вы вычитаете из менее размытого изображения интенсивность пикселей более размытого изображения. Эта операция усиливает края и создает похожее изображение независимо от сильных изменений интенсивности освещения. Эти шаги могут быть очень легко выполнены с использованием OpenCV (как заявили другие). Этот метод был применен и задокументирован здесь .
В этой статье добавлен дополнительный шаг, включающий выравнивание контраста. По моему опыту, это необходимо только в том случае, если вы хотите получить «видимые» изображения из операции DoG (значения пикселей, как правило, очень низки после фильтра DoG и отображаются в виде черных прямоугольников на экране) и выполнение выравнивания гистограммы является приемлемой заменой, если вы хотите увидеть эффект фильтра DoG.
Если у вас есть изображения, не зависящие от освещенности, вы можете сосредоточиться на части обнаружения. Если ваша проблема может позволить себе статическую камеру, которую можно обучать в течение определенного времени, вы можете использовать стратегию, аналогичную детекторам движения по тревоге. Большинство из них работают со средним тепловым изображением - в основном они записывают среднюю температуру «пикселей» вида комнаты и запускают сигнал тревоги, когда тепловая сигнатура сильно меняется от одного «кадра» к другому. Здесь вы будете работать не с температурами, а со средними, нормализованными по свету значениями пикселей. Это позволит вам со временем определить, какие области изображения имеют тенденцию к движению (например, листья дерева в ветреной среде) и какие области достаточно устойчивы на изображении. Тогда вы можете вызвать тревогу, когда большое количество пикселей, уже помеченных как стабильные, сильно изменяются от одного кадра к следующему.
Если вы не можете позволить себе тренировать обзор вашей камеры, я бы посоветовал вам взглянуть на TLD трекер из Zdenek Kalal . Его исследования направлены на отслеживание объектов с одним кадром в качестве обучения. Вероятно, вы могли бы использовать полустатический вид камеры (без присутствия посторонних объектов) в качестве отправной точки для трекера и пометить обнаружение, когда трекер TLD (сетка точек, где локальный поток движения оценивается с использованием алгоритма Лукаса-Канаде) не в состоянии отследить большое количество точек сетки от одного кадра до следующего. Этот сценарий, вероятно, позволит работать даже панорамирующей камере, поскольку алгоритм очень устойчив к нарушениям движения.
Надеюсь, что эти указатели помогут. Удачи и приятного путешествия! = D * * один тысяча двадцать-шесть