Моделирование некоторых методов сегментации изображений

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 6,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Шаг 3: Маркировка объектов переднего плана.

Для маркировки объектов переднего плана могут использоваться различные процедуры. В этом примере будут использованы морфологические технологии, которые называются "раскрытие через восстановление" и "закрытие через восстановление". Эти операции позволяют анализировать внутреннюю область объектов изображения с помощью функции imregionalmax.

Как было сказано выше, при проведении маркировки объектов переднего плана используются также морфологические операции. Рассмотрим некоторые из них и сравним. Сначала реализуем операцию раскрытия с использованием функции imopen.

se=strel('disk', 20);

Io=imopen(I, se);

figure, imshow(Io), title('Io')

Рис.2.11 - Иллюстрация операции раскрытия

Далее вычислим раскрытие с использованием функций imerode и imreconstruct.

Ie=imerode(I, se);

Iobr=imreconstruct(Ie, I);

figure, imshow(Iobr), title('Iobr')

Рис.2.12 - Вычисление морфологического раскрытия

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

Проанализируем операции морфологического закрытия. Для этого сначала используем функцию imclose:

Ioc=imclose(Io, se);

figure, imshow(Ioc), title('Ioc')

Рис.2.13 - Использование функции imclose

Далее используем функцию imdilate, которая применяется вместе с функцией imreconstruct. Отметим, что для реализации операции imreconstruct необходимо провести операцию дополнения изображений.

Iobrd=imdilate(Iobr, se);

Iobrcbr=imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));

Iobrcbr=imcomplement(Iobrcbr);

figure, imshow(Iobrcbr), title('Iobrcbr')

Рис.2.14 - Использование функции imdilate

Сравнительный визуальный анализ Iobrcbr и Ioc показывает, что представленная реконструкция на основе морфологических операций открытия и закрытия является более эффективной в сравнении с стандартными операциями открытия и закрытия. Вычислим локальные максимумы Iobrcbr и получим маркеры переднего плана.

fgm=imregionalmax(Iobrcbr);

figure, imshow(fgm), title('fgm')

Рис.2.15 - Получение маркеров переднего плана

Наложим маркеры переднего плана на исходное изображение.

I2=I;

I2(fgm)=255;

figure, imshow(I2), title('fgm, наложенное на исходное изображение')

Рис.2.16 - Наложение маркеров на исходное изображение

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

se2=strel(ones(5, 5));

fgm2=imclose(fgm, se2);

fgm3=imerode(fgm2, se2);

В результате проведения такой операции пропадают отдельные изолированные пиксели изображения. Также можно использовать функцию bwareaopen, которая позволяет удалять заданное число пикселей.

fgm4=bwareaopen(fgm3, 20);

I3=I;

I3(fgm4)=255;

figure, imshow(I3)

title('fgm4, наложенное на исходное изображение')

Рис.2.17 - Удаление отдельных изолированных пикселей

Шаг 4: Вычисление маркеров фона.

Теперь проведем операцию маркирования фона. На изображении Iobrcbr темные пиксели относятся к фону. Таким образом, можно применить операцию пороговой обработки изображения.

bw=im2bw(Iobrcbr, graythresh(Iobrcbr));

figure, imshow(bw), title('bw')

Рис.2.18 - Маркирование фона

Пиксели фона являются темными, однако нельзя просто провести морфологические операции над маркерами фона и получить границы объектов, которые мы сегментируем. Мы хотим "утоньшить" фон таким образом, чтобы получить достоверный скелет изображения или, так называемый, передний план полутонового изображения. Это вычисляется с применением подхода по водоразделу и на основе измерения расстояний (до линий водораздела).

D=bwdist(bw);

DL=watershed(D);

bgm=DL==0;

figure, imshow(bgm), title('bgm')

Рис.2.19 - Утоньшение границ фона

Шаг 5: Вычисление по методу маркерного водораздела на основании модифицированной функции сегментации.

Функция imimposemin может применяться для точного определения локальных минимумов изображения. На основании этого функция imimposemin также может корректировать значения градиентов на изображении и таким образом уточнять расположение маркеров переднего плана и фона.

gradmag2=imimposemin(gradmag, bgm | fgm4);

И наконец, выполняется операция сегментации на основе водораздела.

L=watershed(gradmag2);

Шаг 6: Визуализация результата обработки.

Отобразим на исходном изображении наложенные маркеры переднего плана, маркеры фона и границы сегментированных объектов.

I4=I;

I4(imdilate(L==0, ones(3, 3))|bgm|fgm4)=255;

figure, imshow(I4)

title('Маркеры и границы объектов, наложенные на исходное изображение')

Рис.2.20 - Маркеры и границы объектов, наложенные на исходное изображение

В результате такого отображения можно визуально анализировать месторасположение маркеров переднего плана и фона.

Представляет интерес также отображение результатов обработки с помощью цветного изображения. Матрица, которая генерируется функциями watershed и bwlabel, может быть конвертирована в truecolor-изображение посредством функции label2rgb.

Lrgb=label2rgb(L, 'jet', 'w', 'shuffle');

figure, imshow(Lrgb)

title('Lrgb')

Рис.2.21 - Конвертация изображения в тип truecolor

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

figure, imshow(I), hold on

himage=imshow(Lrgb);

set(himage, 'AlphaData', 0.3);

title('Lrgb, наложенное на исходное изображение в полупрозрачном режиме')

Рис.2.22 - Наложение конвертированного изображения на исходное

2.3 Сегментация изображения на графах средствами OpenCV

Алгоритм сегментации должен четко определять, где заканчивается один сегмент и начинается другой. Как правило, границы представляют собой характерные перепады яркости и/или оттенков цвета, встречающиеся на участках объект-фон, плоскость-тень, попугайчик-море, надпись на заборе [12]. И если «перепад» больше некоторого «порога» (threshold), то из этого должно следовать, что это разные сегменты. Но есть небольшая проблемка: перепады могут сильно варьироваться для различных объектов, и сегменты сложно «отделить» однозначно заданной (const) пороговой величиной (threshold). Для поверхности стола на фоне стены: перепады соседних пикселей вдоль поверхности стола (стены) будут относительно небольшими, а вот на границе стол-стена будет скачок, который и разделит сегменты. Это ясно. А если у нас попугайчик на фоне моря? Он же сам очень «пестрый», внутри него большие перепады интенсивности (зеленый - красный - желтый -…), чтобы его «отделить» от моря, нужен другой «порог» (threshold). И постепенно приходим к выводу, что порог, который решает, что соседним сегментам «не суждено быть вместе», должен опираться не только на локальные показатели: перепад интенсивностей вдоль одного ребра (соединяющего соседние пиксели), но и на то, насколько эти сегменты сами по себе гладкие (в плане цвета) или «пестрые».

Прежде чем перейти к обработке полноценных цветных картинок, рассмотрим упрощенный вариант, когда изображение представлено градациями серого (grayscale), т.е. в каждой ячейке матрицы изображения хранится число в интервале[0...1], представляющее собой яркость пикселя.

Рис.2.23 - Сегментация исходного монохромного изображения

Каждый пиксель изображения представляется вершиной в графе. А вес (длина) ребра, соединяющего соседние вершины, выражается формулой:

w(vi,vj)=|I(pi)-I(pj)|, (2.1)

где I(pi)- интенсивность (яркость) пикселя pi.

В ходе выполнения алгоритма Краскала, на промежуточном этапе мы будем иметь несколько разрозненных сегментов (подмножеств пикселей), с минимальным суммарным весом ребер внутри: сегменты будут объединены ребрами минимальной длины, т.е. с минимальными «перепадами интенсивностей» между соседними пикселями. Поэтому соседние пиксели внутри одного сегмента будут схожи по цвету. Но только до некоторого значения максимального ребра (перепада интенсивности).

И вот мы взяли минимальное на текущем шаге ребро. Для двух пикселей, являющихся смежными вершинами этого ребра, определяем из одного ли они (уже построенного) сегмента? [13]

· Да, из одного сегмента: просто продолжаем выполнение алгоритма.

· Нет. Необходимо определить, представляют ли сегменты части одного и того же объекта на изображении и их следует объединить, или их интенсивности «существенно» различаются?

Для определения различия между сегментами, с каждым уже построенным сегментом мы ассоциируем некоторую величину - максимальный перепад интенсивностей внутри него, т.е. самое длинное ребро в MST внутри сегмента:

(2.2)

Отдельно его искать не придется - достаточно просто сохранять длину ребра, добавляемого при объединении составляющих «подсегментов». Ведь на момент объединения длина добавляемого ребра была больше, чем в уже построенных MST каждого «подсегмента», т.к. ребра обрабатываются в возрастающем порядке [13].

Получаем примерное решающее правило для сегментовC1, C2:

(2.3)

Таблица 1 Решающее правило для сегментов

Признак: следует ли разграничить эти сегменты

Текущее ребро минимальной длины, соединяющее два разрозненных сегмента

Меньший (из больших) перепад интенсивностей внутри одного из рассматриваемых сегментов

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

Рис.2.24 - Объединение сегментов

Как же построить граф по изображению? Какие пиксели являются соседними? На поверхности лежат два основных подхода [14]:

· 4-connected: каждый пиксель соединяем с соседними сверху/снизу/слева/справа. Такое построение привлекательно тем, что количество ребер в графе минимально.

· 8-connected: дополнительно к предыдущему варианту каждый пиксель соединяем с соседними, находящимися по диагонали. Ребер, таким образом, в графе получается больше, алгоритм выполняется несколько медленнее. Но получаемая сегментация должна быть качественней - ведь учитывается больше связей между пикселями.

Рис.2.25 - Основные подходы к построению графа по изображению

Алгоритм должен давать более качественные результаты на 8-connected построенном графе, однако 4-connected дает весьма приемлемые результаты и при этом выполняется значительно быстрее. А в качестве «расстояния» для обработки цветных изображений можем взять вот такую простую разницу цвета пикселей, как реализовано у авторов алгоритма [14,15]:

(2.4)

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

Рис.2.26 - Сегментация изображений методом 4-connected

Каждый фрагмент лужайки - будет отмечен как отдельный сегмент, но ведь это один объект!

Поэтому в альтернативном варианте, авторы предлагают рассматривать не только близлежащие пиксели, а оттолкнувшись от локальных свойств изображения (пикселей, располагающихся в непосредственной близости), попробовать «перепрыгнуть через провод» (см. картинку) и дотянуться до продолжения сегмента, находящегося на некотором удалении. Для этого в качестве длины ребра они предлагают выбрать Евклидово расстояние, зависящее как от положения пикселей(x,y), так и от их цвета (r,g,b) [14,15]:

(2.5)

Теперь пиксели будут считаться «соседями», если они расположены рядом, либо имеют схожий оттенок, хотя физически могут находиться на некотором удалении. Для построении графа авторы предлагают каждый пиксель соединять с 10 (20, 30) «ближайшими». Это дает более качественную сегментацию, но требует больше вычислительных ресурсов.

Возвращаясь в самое начало. Давным-давно, когда все пиксели были разрознены - между соседними мог наблюдаться существенный перепад интенсивностей, не позволяющий им объединяться (merge). Вряд ли нам предоставили микроскопическую фотографию, где каждый пиксель надо обособить -- скорее всего, они являются частью какого-то большего объекта (попугайчика). Чтобы они поддавались «слиянию» (merge) в большей степени, чем уже построенные большие сегменты, для которых более важна корректность разбиения, в решающем правиле добавляют величину, зависящую от размера построенного сегмента:

, (2.6)

Где |C|- мощность рассматриваемого сегмента (количество пикселей в нем на текущий момент),

k- это уже параметр сегментации, задаваемый вручную.

С подобной поправкой в решающем правиле будет использоваться формула:

(2.7)

«Поправка» постепенно нивелируется с ростом сегмента (увеличением |C|).

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

Ясно, что при определении расстояния между пикселями в таком определении, как «перепад интенсивностей», пиксели «пестрого», пусть даже единого объекта, будут не очень-то податливы на объединение в один объект. Чтобы сделать их более «сговорчивыми» на объединение и убрать шум/артефакты, к изображению обычно применяется размывание (smoothing) фильтром Гаусса с некоторым радиусом (среднеквадратическим отклонением) sigma. Это вызывает «взаимопроникновение» цветовых составляющих пикселей, и они более охотно идут на контакт.

Рис.2.27 - Размытие и последующая сегментация «пестрого» изображения

В таком способе сегментации самым трудоемким процессом является сортировка всех ребер, выполняемая заO (eloge), где e - это количество ребер в графе. Таким образом, для изображения NxM пикселей ребер будет:|e| = 4*N*M. программный бинаризация изображение

В библиотеке OpenCV есть метод "cvPyrSegmentation", т.е. пирамидальный метод сегментации изображений. Он устроен несколько иначе. Сегменты строятся слоями (level), объединяя схожие по цвету пиксели в один (находящийся слоем выше), и далее последовательно обрабатывая слои находящиеся на следующем уровне (level) выше «до упора»:

Рис.2.28 - Пирамидальный метод сегментации изображений

В 2006 в Univesity of Malaga (Spain) было проведено сравнение нескольких пирамидальных алгоритмов и авторы пришли к выводу, что из 8 методов, заслуживающими внимания являются 3, благодаря которым получаются достаточно качественные результаты разбиения изображения на объекты. Однако стоит отметить, что время выполнения пирамидальных алгоритмов колеблется от0,5 сек.до4,5 сек.(256x256 пикселей на Pentium 766 MHz), тогда как рассматриваемый "Efficient Graph-Based Image Segmentation" выполняется со слов авторов «in fraction of a second». У нас 1024x768 фотография отрабатывала за0,5 сек(U9400 2 x 1.4GHz) внутри «матрешки»: VMWare - Matlab - mex (C++). В общем, пирамидальные - качество, описанные в исследовании графы - скорость.

Рис.2.29 - Сегментация изображения пирамидальным методом

Заключение

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

При работе с алгоритмом сегментации на основе графов самым трудоемким процессом является сортировка всех ребер, выполняемая за O (eloge), где e - это количество ребер в графе. Таким образом, для изображения NxM пикселей ребер будет:|e| = 4*N*M.

При работе с алгоритмом на основе метода водораздела мы получаем маску с сегментированным изображением, где пиксели одного сегмента помечены одинаковой меткой и образуют связную область. Основным недостатком данного алгоритма является использование процедуры предварительной обработки для картинок с большим количеством локальных минимумов (изображения со сложной текстурой и с обилием различных цветов). Так же использование среды Matlab показывает более качественные результаты, чем использование библиотеки OpenCV.

Так же использование библиотеки OpenCV для решения поставленной задачи показывает большие затраты времени и ёмкость кода.

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

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.