Распознавание образов для программистов

ВНИМАНИЕ! БЛОГ ПЕРЕЕХАЛ ПО АДРЕСУ
RECOG.RU

29 Апрель 2010

Повышение эффективности контроля передвижения объектов в охраняемой зоне с использованием стереозрения

написано в рубрике: Распознавание образов, Стереозрение — Кручинин Александр @ 11:25 ДП

Кручинин, А.Ю. Повышение эффективности контроля передвижения объектов в охраняемой зоне с использованием стереозрения : материалы IV-й международной научно-технической конференции «Информационные технологии в науке, образовании и производстве (ИТНОП-2010)» / А.Ю. Кручинин. – Т2. – Орел: ОрелГТУ, 2010. – С. 77-83.

http://vidikon.com/doc/text1008.doc

Одним из направлений компьютерного зрения является стереозрение, которое позволяет получить представление о глубине изображения, расстоянии до объектов, может использоваться при составлении трехмерной картины окружающего мира. В задачах контроля за передвижением необходимо определять местоположение объекта в охраняемой зоне, поэтому использование для этого стереозрения является актуальным. Однако, все алгоритмы стереозрения требуют больших вычислительных ресурсов [1], что негативно сказывается на возможности их применения. В этом случае большое значение имеет оптимальное распределение вычислительных ресурсов, которое позволит управлять загрузкой вычислительной системы в зависимости от поступающей информации с видеокамер.

В работе [2] предложена модель адаптивной системы стереозрения для подвижного робота, которая позволяет управлять скоростью движения робота и загрузкой вычислительной системы в зависимости от сложности распознавания окружающего мира. Используя эту систему в качестве прототипа, была построена концептуальная модель адаптивной системы стереозрения для контроля передвижения объектов (Рисунок 1).

Рисунок 1 – Модель адаптивной системы стереозрения для контроля передвижения объектов

Рисунок 1 – Модель адаптивной системы стереозрения для контроля передвижения объектов


На вход модели поступает заданные значения достоверности распознавания Dз, производительности Pз и вектор параметров:

pe2,

где U0, R0 – начальные значения параметров управления;

[Umin, Umax], [Rmin, Rmax] – диапазоны изменения параметров управления;

K* – критерий оптимальности, в качестве которого выступает:

pe3,

где Pз и P – заданная и фактическая производительность системы,

Dз и D – заданная и фактическая достоверность оценки состояния окружающего мира.

Производительность системы определяется периодом времени между моментом получения данных с территории контроля до принятия решения по оптимизации параметров.

В данной модели адаптируются два параметра:

управление потоками поступающей информации на подсистему стереозрения через устройства и программы, взаимодействующими с объектом и передающими данными (U = {UК1, UК2, …, UКi, …,  UКN}, где UКi – настройки i-ой камеры, UКi ={tКi, ∆γКi, RКi, FКi}, где tКi – период между передачей данных, γКi – угол поворота камеры, RКi – режим работы камеры (разрешение, частота кадров), FКi – фокусировка камеры);

адаптация параметров стереозрения – выбор алгоритмов и их характеристик (R ={R1, R2, …, Rj, …,  RL}, где Rj – настройки алгоритма для j-ого потока из блока взаимодействия с объектом, Rj ={Sj, Wj}, где Sj – метод стереозрения, Wj – параметры метода).

Первоначально устанавливаются значения параметров управления равные входным параметрам:

pe4.

Блок взаимодействия с объектом принимает данные с охраняемой зоны X = {X1, X2, …, XN} и формирует L производных потоков на блок стереозрения λ = {λ1, λ2, …, λL}. Каждый поток λj состоит из двух (или более) видеопотоков с камер.

Интенсивность потока информации λ определяется режимами работы средств регистрации блока взаимодействия (видеокамерами). Данные на блок стереозрения поступают порциями, поэтому поток характеризуется объёмом информации N в порции, количеством передаваемых снимков изображения X* = {x*1, x*2, …}, которое зависит от числа камер, и периодом между предыдущей группой данных ∆t.

pe5.

В блоке стереозрения для каждого потока осуществляется составление трёхмерной модели M видимой части окружающего мира, оценка сложности распознавания Sl и достоверности D:

pe6.

Так как данные поступают в реальном времени, то результат распознавания трёхмерной модели является функцией от времени M = f(t), также как и Sl = f1(t), D = f2(t). В блоке выбора оптимального режима производится расчёт рассогласования между заданной и фактической оценками достоверностей распознавания состояния объекта:

pe7

После чего, согласно критерию K*, а также руководствуясь ∆D, Sl, M и вектором входных параметров V, устанавливается оптимальный режим функционирования системы:

pe8.

Реализация блока стереозрения для обеспечения работы в реальном времени невозможна без применения технологий построения компьютерных кластеров и параллельного программирования. Кластерные системы весьма дорогостоящи, поэтому при их проектировании необходимо учитывать максимальную мощность, которую они должны обеспечивать. Мощность вычислительной системы определяется количеством выполняемых операций в единицу времени. Максимальное количество выполняемых операций в единицу времени рассматриваемой модели определяется выражением:

pe9,

где Cвз – количество операций, затраченных на взаимодействие с территорией контроля,

Cст – на применение алгоритмов стереозрения,

Cпр – на принятие решения об оптимизации,

C0 на дополнительные расходы не связанные с задачей контроля передвижения.

Целевая функция затрат на обеспечение контроля передвижения объектов имеет следующий обобщённый вид:

pe10,

где Z1 – затраты на поддержание работоспособности аппаратно-программного комплекса;

Z2 – возможные затраты от ошибок при контроле передвижения объектов;

Z0 – прочие затраты.

При внедрении системы контроля передвижений в охраняемой зоне необходимо учитывать не только затраты на установку, но и текущие затраты. Целью повышения эффективности системы является снижение стоимостных затрат на её внедрение и поддержку.

Решение любой задачи распознавания образов характеризуется достоверностью результата. В работе [3] показано, что для того, чтобы обеспечить для неизвестных образов одинаковую достоверность распознавания, необходимо различное количество информации. Каждый случай распознавания характеризуется своей сложностью. Для различных методов распознавания образов сложность определяется по-своему, но всегда можно построить зависимости достоверности от сложности распознавания образов и репрезентативности данных. На рисунке 2 показаны кривые этих зависимостей для вероятностного метода распознавания образов.

Рисунок 2 – Зависимости достоверности результатов от сложности распознавания и репрезентативности данных для нормального распределения

Рисунок 2 – Зависимости достоверности результатов от сложности распознавания и репрезентативности данных для нормального распределения

Зная сложность распознавания образов, можно выбирать такие режимы работы блока стереозрения для каждого случая, при котором достоверность распознавания будет больше заданной, а количество затраченных операций минимально. При работе блока стереозрения без оптимизации, его режим необходимо устанавливать так, чтобы случай с максимальной сложностью распознавался с достоверностью большей или равной Dз. Поэтому будет верно следующее выражение:

pe12,

где Cmax(ст) – максимальное количество выполняемых операций в единицу времени для режима работы без оптимизации (со статическим управлением);

Cmax(дин) – для динамического управления процессом распознавания образов.

Спрогнозировав среднее значение сложности распознавания и её дисперсию для охраняемой зоны, можно получить требуемое значение Cmax.

Одной из задач стереозрения является построение трёхмерной картины окружающего мира. И если для описания сложности трёхмерных объектов с геометрической точки зрения существуют публикации, например [4], то описанию сложности трёхмерной картины мира с точки зрения распознавания уделено мало внимания.

Сложность трёхмерной сцены с точки зрения распознавания обусловлена 3-мя компонентами:

количеством объектов;

сложностью распознавания каждого объекта;

расположением объектов в пространстве.

Для описания сложности трёхмерной сцены предлагается использовать следующее выражение:

pe13,

где 1/Nk – первый компонент,

N – общее количество объектов,

k – коэффициент, зависящий от максимального количества объектов и уровня значимости;

M(Slоб) – математическое ожидание сложности распознавания объектов сцены, измеряемое от 0 (минимальная сложность) до 1 (максимальная сложность);

M(Slп) – математическое ожидание сложности, обусловленной перекрыванием объектов с различных ракурсов, сложность перекрытия объекта равна 0 при наличии одного единственного объекта на сцене и равна 1 при 100% закрытии другими объектами сцены со всех ракурсов.

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

Коэффициент k вычисляется следующим образом:

pe14,

где Nmax – количество объектов на сцене, соответствующее максимальной сложности;

γ – уровень значимости при определении первого компонента сложности.

Например, для Nmax = 100000 и уровня значимости γ = 0.01 коэффициент k = 0.4.

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

pe15.

Пусть имеется некоторое количество объектов разного типа, и известно, что объект типа «шар» идентифицируется с достоверность 0.9. В таблице 1 представлены зависимости  математического ожидания сложности перекрывания и общей сложности от трёхмерной сцены.

Как видно из таблицы, линейная зависимость сложности, обусловленной расположением объектов в пространстве, от процента площади перекрытия объекта со всех ракурсов не даёт адекватной картины сложности трёхмерной сцены. Взаимосвязь между сложностью, обусловленной расположением объектов в пространстве, и процентом перекрытия объекта в трёхмерном пространстве, выбирается от поставленной задачи согласно следующему выражению:

pe16

где P – процент перекрытия объекта,

l – коэффициент, выбираемый по результатам экспериментов.

Для выбора коэффициента следует постулировать некоторой 3D-сцене заданное значение сложности перекрывания. Так, постулировав для сцены 3 (Таблица 1) значение Slп = 0.5, получатся значения сложности, представленные в таблице, как нелинейные зависимости. В этом случае коэффициент l = 0.242.

Таблица 1 – Примеры определения сложности трёхмерной сцены

Трёхмерная сцена

M(Slп)

Sl3D

1. pe17

Линейная зависимость от процента перекрытия:

0.029

Нелинейная зависимость от процента перекрытия:

0.425

Линейная зависимость от процента перекрытия:

0.736

Нелинейная зависимость от процента перекрытия:

0.844

2. pe18

Линейная зависимость от процента перекрытия:

0.043

Нелинейная зависимость от процента перекрытия:

0.467

Линейная зависимость от процента перекрытия:

0.740

Нелинейная зависимость от процента перекрытия:

0.855

3.

pe19

Линейная зависимость от процента перекрытия:

0.057

Нелинейная зависимость от процента перекрытия:

0.500

Линейная зависимость от процента перекрытия:

0.744

Нелинейная зависимость от процента перекрытия:

0.864

Описанная выше сложность распознавания трёхмерной сцены даёт общее представление о том, насколько сложно будет распознать эту сцену с различных ракурсов. Однако, в задаче стереозрения необходимо определить, какова сложность распознавания окружающего мира с конкретной точки наблюдения:

pe20,                            (1)

где φ, x, y, z – определяют положение и направление камеры,

Slп(φ, x, y, z) – сложность, обусловленная перекрытием объектом только с одного направления.

Если рассматривать трёхмерные сцены из таблицы 1, то можно видеть, что для каждой из них M(Slп(φ, x, y, z)) = 0, так как ни один объект не перекрывает другого с использованного положения камеры. Если же посмотреть на сцену №3 из таблицы 1 с другой позиции, когда взгляд направлен вдоль одной из осей шаров, то M(Slп(φ, x, y, z)) = 0.35 при линейной зависимости от процента перекрытия.

Однако прямой взаимосвязи между выражением (1) и сложностью распознавания конкретного алгоритма стереозрения нет. Так, например, функция cvFindStereoCorrespondenceGC из библиотеки OpenCV [5], которая работает по алгоритму вырезки графа [6], даёт недостаточно хорошие результаты на изображении, сложность распознавания которого, обусловленная перекрытием, равна нулю (Рисунок 3).

pe21

Рисунок 3 – Левое изображение для алгоритма стереозрения (а); результат работы функции cvFindStereoCorrespondenceGC

Снижения вычислительной нагрузки можно также добиться, используя средства детектирования движений на охраняемой территории (Рисунок 4).

Рисунок 4 – Модель адаптивной системы стереозрения для контроля передвижения объектов с дополнительным блоком детектирования движений

Рисунок 4 – Модель адаптивной системы стереозрения для контроля передвижения объектов с дополнительным блоком детектирования движений

Введение в схему блок детектирования движений позволяет инициировать анализ потоков λ’ только при наличии в них движений (n > λ) и только на тех участках изображений, где произошло движение. При этом сам блок детектирования движений работает по оптимальному подходу, предложенному в работе [7].

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

ЛИТЕРАТУРА

1. Вахитов А.Т., Гуревич Л.C., Павленко Д.В. Обзор алгоритмов стереозрения // Стохастическая оптимизация в информатике. Выпуск 4. – СПб.: Издательство Санкт-Петербургского университета, 2008. – С. 151-169.

2. Кручинин, А.Ю. Модель адаптивной системы стереозрения для подвижного робота : материалы VIII всероссийской научно-практической конференции (с международным участием) «Современные информационные технологии в науке, образовании и практике» / А.Ю. Кручинин, С.В. Приймак. – Оренбург: ИПК ГОУ ОГУ, 2009. – С. 131-135.

3. Кручинин, А.Ю. Управление процессом распознавания образов на основе оценки его сложности : Сборник статей X международной научно-технической конференции «Информационно-вычислительные технологии и их приложения» / А.Ю. Кручинин. – Пенза: РИО ПГСХА, 2009. – С. 143-149.

4. Матвеев С.В. Сложность трёхмерных многообразий: проблемы и результаты : труды конференции «Геометрия и приложения». – Новосибирск, 2000. – С. 102-110.

5. Bradsky G., Kaehler A. Learning OpenCV – O’Reilly, 2008. – 555 p.

6. V. Kolmogorov. Graph Based Algorithms for Scene Reconstruction from Two or More Views. PhD thesis, Cornell University, September 2003.

7. Кручинин, А.Ю. Повышение эффективности систем детектирования движений на основе принципа разумной достаточности : Сборник статей XI международной научно-технической конференции «Информационно-вычислительные технологии и их приложения» / А.Ю. Кручинин. – Пенза: РИО ПГСХА, 2009. – С. 157-162.

19 Апрель 2010

Управление процессом распознавания образов в реальном времени

написано в рубрике: Распознавание образов — Кручинин Александр @ 10:08 ДП

В журнале “Автоматизация и современные технологии” (http://mashin.ru) вышла статья Управление процессом распознавания образов в реальном времени (автор: Кручинин А.Ю.)

Предложена модель системы управления процессом распознавания образов, позволяющая устанавливать оптимальный режим работы, соответствующий необходимому уровню достоверности, производительности и материальных затрат, непосредственно в реальном времени.

Кручинин А.Ю. Управление процессом распознавания образов в реальном времени / А.Ю. Кручинин // Автоматизация и современные технологии. – 2010. – №3. – С. 33-37.

18 Апрель 2010

Алгоритм выделения контуров на изображении

написано в рубрике: Распознавание образов — Кручинин Александр @ 4:50 ПП

Очень часто необходимо получить контуры объектов для их дальнейшего анализа. Ниже представлен простейший алгоритм.

1 этап. Получение монохромного изображения (http://blog.vidikon.com/?p=87).

2 этап. Выделение граничных точек. Граничные точки отличаются от внутренних точек изображения наличием в качестве соседней одной или нескольких фоновых точек. При этом в качестве соседних к рассмотрению берутся только горизонтальные и вертикальные пиксели, либо только диагональные [1, 2]. Пусть имеется структура, описывающая изображение:

struct IMG

{

      byte* bytes; //массив данных

      int Width; //ширина в пикселях

      int Width_1; //ширина в байтах

      int Height; //высота

      bool on; //загружено изображение или нет

      BYTE format;//0 – 24бит 1 – 8 бит чёрнобелое

};

Для выделения граничных точек на 24-битном изображении можно использовать следующую функцию, которая на входе получает уже разделённое на 2 цвета изображение:

void AllocationBorders(IMG img)

{

      int i,j,k;

      for(i=0;i<img.Height;i++){

            for(j=0;j<img.Width;j++)

            {

                  if (img.bytes[j*3+i*img.Width_1]==255) continue;

                  k=0;

                  if (i!=0)

                        if (img.bytes[j*3+(i-1)*img.Width_1]==255) k=1;

                  if (i!=img.Height-1)

                        if (img.bytes[j*3+(i+1)*img.Width_1]==255) k=1;

                  if (j!=0)

                        if (img.bytes[(j-1)*3+i*img.Width_1]==255) k=1;

                  if (j!=img.Width-1)

                        if (img.bytes[(j+1)*3+i*img.Width_1]==255) k=1;

                  if (k==1) {

                        img.bytes[j*3+i*img.Width_1]=128;

                        img.bytes[j*3+i*img.Width_1+1]=0;

                        img.bytes[j*3+i*img.Width_1+2]=0;

                  }

 

            }

      }  

}

3 этап. Поиск контуров. Для выделения контуров необходимо резервировать память под каждый контур. В простейшем случае контур может описываться следующей структурой:

struct C_POINT

{

      int x,y;

};

struct CONTOUR_STRUCT

{

      WORD all_elem;//общее количество точек в одном контуре

      C_POINT* Points;//Указатель на массив точек

      RECT Zone;//зона контура

      int mama;//родитель если -1, то никого нет

      int level;//уровень вхождения

};

Вообще все операции лучше проводить с 8-битным изображением, чем с 24 – так в OpenCV в основном все операции проводятся именно с такими изображениями для увеличения скорости. Поэтому дальше будет идти речь о 8-битном изображении.

В цикле перебираются все граничные точки (в нашем случае точки с цветом 128):

if (Image.bytes[j+i*Image.Width_1]==128 )

И найденной точке присваивается другое цветовое значение, сама точка добавляется как первая точка в контуре и собственно контролируется зона максимального и минимального значения для координат X и Y, например так:

Image.bytes[j+i*Image.Width_1]=1;

Point[all_elem].x=j;

Point[all_elem].y=i;

all_elem++;

Zone.left=j;Zone.right=j;

Zone.top=i;Zone.bottom=i;

После этого для найденной точки вызывается рекурсивная функция, в нашем случае это функция FindBorderPoint, которой передаются координаты точки. Внутри функции FindBorderPoint(int x,int y) смотрятся все граничные точки, включая диагональные:

WORD k=0;//переменная мониторит в какю точку потом надо зайти рекурсивной функции

int w=(rect.right-rect.left);

for(i=0;i<3;i++)

      for(j=0;j<3;j++)

      {

            //Перебираем 8 точек, без 9 центральной

            if ((i==1 && j==1) || (j==0 && x==rect.left) || (j==2 && x==rect.right)

            || (i==0 && y==rect.top) || (i==2 && y==rect.bottom)) continue;

            k=k*2;

            if (Image.bytes[x-1+j+(y-1+i)*Image.Width_1]==128)

            {

                  Image.bytes[x-1+j+(y-1+i)*Image.Width_1]=1;

                  k++;

                  Point[all_elem].x=x-1+j;                      

                  Point[all_elem].y=y-1+i;

                  //Смотрим минимум-максимум точек

                  if (Point[all_elem].x<Zone.left) Zone.left=Point[all_elem].x;

                  if (Point[all_elem].x>Zone.right) Zone.right=Point[all_elem].x;

                  if (Point[all_elem].y<Zone.top) Zone.top=Point[all_elem].y;

                  if (Point[all_elem].y>Zone.bottom) Zone.bottom=Point[all_elem].y;

                  all_elem++;

            }

      }

Переменная k выступает в качестве мониторинга – с какими параметрами рекурсивно вызвать функцию. Операции внутри условия совпадения с граничной точкой направлены на добавление точки в контур и определения границы зоны контура. После окончания цикла функция вызывается рекурсивно для найденных новых точек контура:

for(i=2;i>=0;i–)

            for(j=2;j>=0;j–)

            {

                  if (i==1 && j==1) continue;

                  if (k%2==1) FindBorderPoint(x-1+j,y-1+i);

                  k=k/2;

            }

После того, как контур найден, изображение продолжает сканироваться на наличие других контуров. А, когда все контура найдены – определяются их вложенность и родительский контур.

Описанный способ нахождения контуров обладает недостатком – точки в нём находятся не последовательно по направлению обхождения контура. Но в некоторых задачах такое описание контура является достаточным. Для того, чтобы получить контур из последовательных точек надо использовать несколько другой алгоритм, о котором мы возможно поговорим в следующий раз.

 

Литература:

1. Введение в контурный анализ; приложения к обработке изображений и сигналов/ Я.А.Фурман, А.В.Кревецкий, А.К.Передреев, А.А.Роженцов, Р.Г.Хафизов, И.Л.Егошина, А.Н.Леухин; Под ред. Я.А.Фурмана. – 2-е изд., испр. – М.:ФИЗМАТЛИТ, 2003. – 592 с.

2. Розенфельд А. Распознавание и обработка изображений. – М.: Мир, 1972.

10 Апрель 2010

25. Пример осуществления операции морфологического градиента

написано в рубрике: OpenCV — Кручинин Александр @ 6:41 ПП

В листинге 25.1 приведён текст программы, показывающей как работают морфологические преобразования, а именно морфологический градиент.

Листинг 25.1 Морфологический градиент

IplImage* object = cvLoadImage( “1.jpg”, 1);

      IplImage* object1=cvCreateImage( cvSize(object->width,object->height), 8, 3);

      IplImage* temp= cvCreateImage( cvSize(object->width,object->height), 8, 3);

      cvNamedWindow(”Object”, 1);

      cvShowImage( “Object”, object);

      IplConvKernel* structuringElement;

      int rows=2;

      int columns=2;

        structuringElement = cvCreateStructuringElementEx(rows, columns,

                        cvFloor(rows / 2), cvFloor(columns / 2), CV_SHAPE_RECT, NULL);

      cvMorphologyEx(object,object1,temp,structuringElement,CV_MOP_GRADIENT,1);

 

    cvWaitKey(0);

      cvShowImage( “Object”, object1);

      cvSaveImage( “image01.jpg”, object1);

      cvWaitKey(0);

 

    cvDestroyWindow(”Object”);

 

Скриншот начального изображения показан на рисунке 25.1, а получившегося в результате преобразования – на рисунке 25.2.

Рис. 25.1. Исходное изображение
Рис. 25.1. Исходное изображение
Рис. 25.2 Изображения после трансформации

Рис. 25.2 Изображения после трансформации

6 Апрель 2010

24. Расширенные морфологические преобразования

написано в рубрике: OpenCV — Кручинин Александр @ 3:57 ПП

Функция MorphologyEx

 

void cvMorphologyEx(

const CvArr* src,

CvArr* dst,

CvArr* temp,

IplConvKernel* element,

int operation,

int iterations=1

);

Параметры:

src

Входное изображение.

dst

Выходное изображение. Должно быть выделено заранее в том же формате и с теми же размерами, что и src.

temp

Дополнительное изображение с теми же параметрами, нужное для некоторых случаев (см. табл. 24.1).

element

Структурный элемент (задающий окрестность пикселя).

operation

Тип операции (см. табл. 24.1):

Тип операции Морфологический оператор Необходимость temp
CV_MOP_OPEN Открытие Нет
CV_MOP_CLOSE Закрытие Нет
CV_MOP_GRADIENT Морфологический градиент Да
CV_MOP_TOPHAT Верх шляпы Только если src=dst
CV_MOP_BLACKHAT Чёрная шляпа Только если src=dst

Подробнее о других существующих морфологических операторах вы можете прочитать здесь:

http://www.nsu.ru/matlab/MatLab_RU/imageprocess/book3/13/bwmorph.asp.htm

iterations

Количество применённых erode и dilate.

 

Функция MorphologyEx осуществляет морфологические операции на основе базовых erode и dilate.

erode Эрозия объекта. Приводит к замене значений граничных пикселей объекта на 0. Однократное применение эрозии приводит к удалению слоя границы толщиной в 1 пиксель.

dilate Наращение объекта. Приводит к замене значений пикселей фона, граничащих с объектом, на 1. Однократное применение наращения приводит к добавлению к объекту слоя толщиной в 1 пиксель

 

Открытие

 

dst=open(src,element)=dilate(erode(src,element),element)
 

Приводит к соединению областей фона, ранее разъединенных узкими участками пикселей объектов.

 

Закрытие

 

dst=close(src,element)=erode(dilate(src,element),element)

Приводит к удалению небольших по площади фрагментов фона внутри объектов, например “дыр” (замкнутых областей фона внутри объекта).

 

Морфологический градиент

 

dst=morph_grad(src,element)=dilate(src,element)-erode(src,element)

 

Верх шляпы

 

dst=tophat(src,element)=src-open(src,element)

Соответствует вычитанию из исходного изображения результата его открытия.

 

Чёрная шляпа

 

dst=blackhat(src,element)=close(src,element)-src
Старые записи »

Работает на WordPress