PDA

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



dr.Jekill
03.11.2009, 23:20
Есть два автомобиля, один оснащен камерой, второй - любой впередиидущий атомобиль. Во время движения через опр. промежутки времени с камеры передаются кадры. Программа анализирует кадр на наличие номерного знака, и при нахождении сравнивает его размер с эталлоном и делает вывод о дистанции между автомобилями. Если дистанция меньше порогового значения, подается сигнал. Так же в изображении находятся линии дорожной разметки и фиксируется их пересечение автомобилем с камерой.
Главная особенность, это то что камера подвижна! Поэтому для нахождения области со знаком, отбрасывание фона не подходит и, скорее всего, придется проходить построчно, начиная с нижней строчки, по всему кадру.

Буду благодарен за любую информацию. Может кто-то работал с алгоритмом Канни или Хока?

atavin-ta
05.11.2009, 08:26
Дабавь в задачу дорожные знаки и оценку собственной скросте по динамике фона. Думаю, будет интересней.

dr.Jekill
05.11.2009, 14:17
...и оценку собственной скрости по динамике фона.
Да, собственную скорость машины с камерой тоже приходится учитывать. Сейчас отказался от определения растояния между авто, и делаю анализ быстроты изменения размера области номерного знака. Знак выделяю по Хаафу.

dr.Jekill
10.11.2009, 02:34
по динамике фона.
Можно по-подробней про это?
Сейчас встала проблема определения минимального прямоугольника, описывающего объект. И вообще определения объекта. Нужен надежный алгоритм. У кого какие мысли?

Хыиуду
10.11.2009, 09:13
Минимальный прямоугольник - имеется в виду со сторонами, параллельными сторонам изображения, или перекошенный? В первом варианте все банально - взять точку, которая гарантированно принадлежит объекту, и потом от нее рекурсивно ходить на соседние, если те тоже принадлежат объекту. В процессе обхода сохранять максимальные и минимальные координаты обходимых точек.

dr.Jekill
10.11.2009, 11:39
параллельными сторонам изображения, или перекошенный?Прямой. При этом стороны проходят через крайние точки объекта. Пример в атаче.
взять точку, которая гарантированно принадлежит объекту. В этом, то и проблема: если мы будем знать, какие точки гарантированно принадлежат объекту, мы можем по количеству точек сравнивать объекты между собой. Сейчас пробую строить гистограммы по бинарному изображению и, анализируя скачки, выделять области по сопоставлению минимумов. Нахожу 4 точки, выделяю из две, строю по ним прямоугольник. Нахожу длины отрезков, от точки до точки (определяю длины двух сторон), нахожу площадь. Всё бы хорошо, если цвет объекта не близок к цвету фона.

Хыиуду
10.11.2009, 12:22
Какая интересная задача...
Начнем с граничных условий:
- Считать, что обе машины движутся прямолинейно?
- С какой частотой делаются снимки?
- Какие машины подходят под наблюдение? Обязательно прямоугольные (фургоны, газели), или хоть трактор Беларусь?
- Считать, что номерной знак на машине обязательно белый (т.е. не голубой и не грязный)?

dr.Jekill
10.11.2009, 13:24
Считать, что обе машины движутся прямолинейно?На коротких промежутках прямолинейно, а так произвольно.
С какой частотой делаются снимки?Обычная видеокамера с черезстрочной разверткой и частотой кадров примерно 25 кадров/сек.
Какие машины подходят под наблюдение? Обязательно прямоугольные (фургоны, газели), или хоть трактор Беларусь?Объекты любой формы (и даже не машины).
Считать, что номерной знак на машине обязательно белый (т.е. не голубой и не грязный)? Я хотел использовать номерной знак (а скорее его размер) для определения дистанции до впередиидущего авто. Но сейчас отказался от этого, поскольку авто может быть без номера, иметь транзитный, загрязненный, помятый, иметь много надписей похожих на номерной знак или вообще вести полный кузов номеров:). А так как степень надежности системы должна быть максимальной, лучше не брать номер во внимание или использовать его обработку как дополнение к основному методу.

Хыиуду
10.11.2009, 15:02
С тем же успехом впереди может ехать автобус, а может газель, которая по форме выглядит так же (квадрат), в этом случае надо как-то определять размер машины, чтобы система не впадала в панику, если вы едете позади Белаза.
Можно попробовать проанализировать однотонный участок дороги перед вами и отсечь тот уровень, где он заканчивается (начинаются колеса впередиидущего). В этом случае вообще все равно, что там перед вами едет - хоть телега. Только этот случай очень уязвим при езде после дождя или по заснеженной трассе.

dr.Jekill
10.11.2009, 19:34
С тем же успехом впереди может ехать автобус, а может газель, которая по форме выглядит так же (квадрат), в этом случае надо как-то определять размер машины, чтобы система не впадала в панику, если вы едете позади Белаза.
Программа реагирует не на размер, а на быстроту его увеличения. Для этого и необходимо описать квадрат вокруг предмета, чтобы по нескольким кадрам можно было анализировать эту самую быстроту. Другими словами, нам не важен размер объекта сам по себе, мы просто сравнимаем площади, и если скажем объект увеличился в два раза, мы прибегаем к панике :).

Можно попробовать проанализировать однотонный участок дороги перед вами и отсечь тот уровень, где он заканчивается (начинаются колеса впередиидущего). В этом случае вообще все равно, что там перед вами едет - хоть телега. Только этот случай очень уязвим при езде после дождя или по заснеженной трассе. Этот вариант не эффективен, так как будет множество ошибочных определений, связанных с цветом дороги, освещением, её рельефом, а главное, что препятствие можем не иметь колёс :).

atavin-ta
11.11.2009, 07:11
Собственная скорость по динамике фона - это примерно так, как пассажир автомобиля, не видя спидометра, оценивает скорость визуально, глядя в окно. Как это формализовать, а тем более, программное реализовать, я не знаю. Но впринципе такой способ оценки собственной скорости вполне возможен.

Хыиуду
11.11.2009, 09:09
Программа реагирует не на размер, а на быстроту его увеличения. Для этого и необходимо описать квадрат вокруг предмета, чтобы по нескольким кадрам можно было анализировать эту самую быстроту. Другими словами, нам не важен размер объекта сам по себе, мы просто сравнимаем площади, и если скажем объект увеличился в два раза, мы прибегаем к панике :).
Таким образом, если раньше перед нами была машина на 200 метрах, а теперь на 100 метрах, она увеличилась вдвое - начинаем панику.

atavin-ta
11.11.2009, 12:09
При анализе динамики фона, выдели один неподвижный объект в разных кадрах. Опередли, что это за объект и сопоставляя его линейный размер с угловым (пиксели соотвествуют углам, поэтому размер в кадре - угловой), определеи расстояние до объекта. Далее, сопоставляя парралакс с расстоянием оцени собственную скорость.

Игорь Акопян
11.11.2009, 13:51
Всё бы хорошо, если цвет объекта не близок к цвету фона
у номера соотношение сторон известное, можно отбросить то что не подходит. Только вот ГРЗ могут быть не только РФ, хотя не так их и много вариантов.

выдели один неподвижный объект в разных кадрах
как узнать что именно этот объект неподвижный?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
перечитал сначала...


Цитата:
Программа реагирует не на размер, а на быстроту его увеличения. Для этого и необходимо описать квадрат вокруг предмета, чтобы по нескольким кадрам можно было анализировать эту самую быстроту.


дык вот именно, нафик номер - вцепились в объект впереди (в ограниченной зоне) и сечь изменение размеров

dr.Jekill
11.11.2009, 14:31
...по динамике фона - это примерно так, как пассажир автомобиля, не видя спидометра, оценивает скорость визуально, глядя в окно. А при при быстром приближении программа ещё ругается матом :)
Таким образом, если раньше перед нами была машина на 200 метрах, а теперь на 100 метрах, она увеличилась вдвое - начинаем панику.Мы не проверяем все растояние от капота до верхней границы кадра, а доходим лишь до опредленной границы (примерно 15-20 метров от капота). Уточню: если по анализу 2-3 кадров площадь объекта увеличилась в разы, то начинаем панику. Именно так, иначе следующего кадра просто не будет потому, что камера будет разбита при столкновении.
При анализе динамики фона, выдели один неподвижный объект в разных кадрах. Определили, что это за объект и сопоставляя его линейный размер с угловым (пиксели соотвествуют углам, поэтому размер в кадре - угловой), определеи расстояние до объекта. Далее, сопоставляя парралакс с расстоянием оцени собственную скорость. Не совсем понял Вашу мысль, в частности какие объекты будут неподвижны.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Еще вопрос: я строю гистограммы по бинарному изображению. Как лучше построить по цвету, если каждый пиксел RGB? Сейчас сделал процедуру сглаживания увеличением преобладающего цвета пиксела. Это позволяет нам отбросить оттенки, тени и освещение и выделить одинаковые цветовые области. Если будут процедуры быстрого построения гистограмм и их сравнения, мы сможем отслеживать границы любого объекта, и проводить необходимы манипуляции. Работаю над этим.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот что получается: находим расстояние от камеры (от середины нижней границы области слежения) до середины нижней границы прямоугольника, описывающего объект. Площадь может быть одинаковой, но это расстояние (дистанция) не зависит от размера объекта. Если отойти от площади, то для скорости приближения объекта:
0. Есть кадр.
1. Взять точку M0[x0,y0] равную середине нижней стороны прямоугольника предыдущего кадра, во время t0;
2. Взять точку M[x,y] равную середине нижней стороны прямоугольника данного кадра, во время t;
3. Найти расстояние S от точки M0 до точки M;
4. Найти скорость приближения V=S/(t-t0).

Главное сейчас правильно выделить объект по цветовому распределению, что-то никак не разберусь с этим.

atavin-ta
12.11.2009, 06:21
Неподвижными являются: разметка, стлобики ограждения, телеграфные столбы и тому подобная фигня на и у догоги. Так как при анализе динамики фона надо анализироваить тип объекта для опеределения его истинных линейных размеров, то признак подвижности включи в ти и не мучайся. Вот только как быть с объектами, чей размер не известен (типа гор, например)?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Анализировать только координату при опеределении расстояния нельзя, так как машина с камерой может подняться на какой-нибудь холм, а впередиидущаяя - спуститься во впадину + повороты вокруг поперечной горизонтали.

dr.Jekill
12.11.2009, 20:17
Анализировать только координату при опеределении расстояния нельзя, так как машина с камерой может подняться на какой-нибудь холм, а впередиидущаяя - спуститься во впадину + повороты вокруг поперечной горизонтали.
Точно подметили, над этим предстоит подумать. Но пока это не главное, а главное чтобы выделить объект. Если у нас будет выделенный объект, мы уже сможем разобраться по дистанции и т.п.
С появлением объекта в кадре вроде разобрался:
1. Разбиваем изображение на 4 части
2. Строим цветовую гистограмму по принципу куба, т.е. цветовое RGB-пространство рассматривается как трехмерный куб, каждая ось которого соответствует одному из трех основных цветов (красному, зеленому или синему), деления на осях пронумерованы от 0 до 255. Для построения цветовой гистограммы каждая сторона делится на n (n=4) равных интервалов, соответственно RGB-куб делится на N (N=64) прямоугольных параллелепипедов. Vi – множество цветов, все компоненты которых попадают в определенные интервалы. Гистограмма изображения отражает распределение точек RGB-пространства, соответствующих цветам пикселов изображения, по параллелепипедам.
3. Рассчитываются расстояния между гистограммами четвертей данного кадра и предыдущего, итоговым результатом считается корень из суммы квадратов расстояний.

Никак не въеду как определить положение объекта на кадре. Нужно вывести зависимость распределения однородных цветовых зон от координат
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Оказывается, что каждый однородно окрашенный объект проецируется в нелинейное цветовое пространство (в моём случае RGB) как точечный кластер или кластер в форме отрезка кривой с преимущественной ориентацией вдоль оси яркости. Это подтверждается экспериментальным исследованием изображений, полученных с реальных камер.
Необходимо находить в цветовом пространстве кластеры типа криволинейных отрезков:
1. разбиение цветового пространства на слои семейством плоскостей, нормальных к главной диагонали цветового пространства;
2. послойная кластеризация с помощью алгоритма поиска водоразделов;
3. сборка кластеров;
4. обратное проецирование на плоскость изображения с целью получения карты сегментации.
Нужно использовать разбиение изображения на небольшие, плотно покрывающие изображение, прямоугольные области, каждая из которых сегментируется независимо. При этом при сегментации текущей области анализируется цветовое распределение, взятое по большей области. При этом объект, далёкий от текущей области, уже не зашумляет её локальное цветовое распределение, а близкие объекты вносят существенный вклад, даже если их вклад по площади в сегментируемую область мал. Для устранения границ между «областями внимания» используется процедура слияния областей с помощью ГСО. Функция для меры несходства определенна.

dr.Jekill
14.12.2009, 04:37
После длительного перерыва возвращаюсь к этой задаче. В результате некоторых размышлений подход к решению данной задачи значительно изменился. Пробую реализовать метод выделения объектов на основе оптического потока. Вот вкратце что предполагается сделать:
Есть два кадра, первый снят во время t0 (далее предыдущий кадр), а второй во время t (далее текущий кадр). Кадры разбиваются на блоки пикселов и для каждого блока пикселов текущего кадра находится вектор движения (определяет смещение блока пикселов по x и y, относительно предыдущего кадра, основываясь на том, что интенсивность каждого пиксела постоянна). После этого производится обход блоков и сравнение их векторов движения, при этом блоки с похожими (по направлению, длине и т.п.) векторами движения объеденяются. Все эти действия направленны на сегментацию изображений, т.е. на выделение объектов отличных от статичного фона.
Проблема следующая: необходимо подобрать (как вариант усовершенствовать/разработать) быстрый алгоритм нахождения векторов движения (для начала можно предположить, что у нас нет проблем с освещеностью, что текстура объектов хорошо выраженна). Главными требованиями для этого алгоритма будут: небольшая вычислительная сложность (соотв. время вычислений), и минимальное кол-во ложных векторов движения, не соотв. реальному движению нестатичных объектов. В идеале это кол-во должно приближаться к количеству, как при методе полного перебора (где-то ~35% от общего количества). В сущности проблема в выборе алгоритма. Однако можно подумать в направлении предварительной обработки изображений для сужения зоны поиска и/или последующего исключения ложных векторов вижения, чтобы снизить риск рассегментации и потери объекта. В общем проблема такая и совсем не тривиальная.