Ім'я файлу: 3.docx
Розширення: docx
Розмір: 45кб.
Дата: 04.04.2020
скачати

Лабораторна робота №3


Тема: Сегментація зображень засобами OpenCV.

Мета: Навчитися працювати з методами та алгоритмами середнього рівня комп’ютерного зору з використання бібліотеки OpenCV на мові програмування Java.


  1. Теоретичні відомості


Сегментація зображення є одним з фундаментальних процесів в багатьох програмних додатках із опрацювання зображень чи відео та в системах комп’ютерного зору.

Серед основних переваг використання аналізу результатів сегментації є:

а) об’єктивний вибір кращої розбивки зображення;

б) можливість контролю якості сегментації під час процесу опрацювання зображення та внесення корективів в роботу алгоритмів в реальному часі;

в) можливість залучати максимально ефективні алгоритми сегментації в роботу програмних систем опрацювання зображень.

Сегментація — це процес розділення цифрового зображення на декілька сегментів. Сегменти якісно просегментованого зображення повинні бути однорідними за текстурою, межі виділених сегментів повинні бути чіткими, сусідні сегменти повинні відрізнятися за певними критеріями. Загалом, усі методи сегментації можна поділити на такі категорії: методи, що базуються на кластеризації, методи з використанням гістограми, методи розростання областей, методи розрізу графа, водорозподілу, методи, що базуються на виділенні країв, багатомасштабна сегментація.

Графічне представлення методів сегментації наведено на рисунку 3.1.

З допомогою моделі

З використанням гістограм

З використанням кластеризація






Виділення країв

Розростання областей

Методи сегментації







Розріз графа

Багатомасштабна

Водорозподілу

Рисунок 3.1 – Методи сегментації зображень
Одним із найчастіше застосовуваних методів кластеризації є метод k-середніх. Перевагою даного методу є висока швидкість обробки. Основною метою даного методу є мінімізація квадратичного відхилення точок кластерів від центру цих кластерів. Алгоритм обробки зображення методом k-середніх наступний:

  1. вибір центроїдів кластерів. Центроїд – це піксель, що є центром кластеру. Зазвичай центри кластерів обираються випадковим чином;

  2. Віднесення кожного пікселя вхідного зображення до певного кластера. Піксель буде віднесено до того кластера, який знаходиться найближче;

  3. Усереднення всіх пікселів в кластері та повторний вибір центру кластеру.

Вищеперераховані дії відбуваються над зображенням до певного етапу. Наприклад, допоки пікселі будуть залишатись у тому ж кластері. Метод k-середніх дуже чутливий до шумів, то потрібно проводити згладжування перед етапом сегментації. В іншому випадку шум, що не відносяться до певно об’єкту буде ідентифіковано як складову цього об’єкту.

Ключовою перевагою використання методу гістограм для сегментації є те, що для його застосування потрібний лище один прохід по пікселях. У цьому методі гістограма обчислюється по всім пікселям зображення і її мінімуми і максимуми використовуються, щоб знайти кластери на зображенні.

Виділення країв – популярний метод сегментації. Даний метод використовує перепад яскравості на границях областей для виокремлення окремих областей. Недоліком даного методу є те, що деякі області на зображенні не мають чітких границь, що у свою чергу не дозволяє у повній мірі виділити об’єкт. Алгоритм Prewitt широко застосовується для виділення горизонтальних та вертикальних країв. Даний алгоритм показав кращі результати на основі значень інтенсивності. Алгоритм Sobel базується на згортці зображення з невеликими сепарабельними цілочисельними фільтрами в вертикальному і горизонтальному напрямках. Оператор обчислює градієнт яскравості зображення в кожній точці. Так знаходиться напрямок найбільшого збільшення яскравості і величина її зміни в цьому напрямку. Краще виділяє границі з високим градієнтом. Алгоритм Roberts був запропонований Lawrence Roberts у 1965 році. Даний алгоритм характеризується високою швидкістю через малий розмір вікна.

У сегментації методом розрізу графа зображення представляється як зважений неорієнтований граф. Зазвичай піксель або група пікселів асоціюється вершиною, а ваги ребер визначають (не) схожість сусідніх пікселів. Після розрізу кожна частина пікселів вважається об’єктом на зображенні.

Метод водоподілу – це заснований на областях метод математичної морфології. Водоподіл – це хребет, що ділить області річкових систем. Процес сегментації зображень методом водоподілу включає наступні етапи:

  1. Обчислення функції сегментації зображень;

  2. Виділення маркерів переднього плану;

  3. Виділення маркерів фону;

  4. Модифікації функції сегментації (мінімум повинен знаходитись на маркерах переднього плану і фону);

  5. Обчислення перетворення водоподілу зміненої функції сегментації .

Недоліком звичайного методу водоподілу є надмірна сегментація зображень та відповідно спотворення результатів. Застосування маркерів максимально вирішує дану проблему.

Для нарощування областей часто використовуються функції енергії, функції Байеса, вейвлети і властивості фракталів, а також апарат нейронних мереж. Нарощування областей можна проводити різними способами. Найбільш простим є поточкове нарощування. Початковий піксель визначається як область, і якщо він відповідає необхідним умовам, до нього приєднується сусідня область. Інші способи засновані на моделях, подібних активному контуру, і Snake-моделі (моделі «Змій»). Алгоритм «Змій» широко використовуються в обробці медичних зображень, сегментації. Основний недолік «змії» полягає в тому, що вплив внутрішньої енергії має тенденцію надмірно витягати модель, вироджуючи її в пряму.

Одним з перших алгоритмів інтерактивної сегментації був алгоритм "Чарівна паличка" (Magic wand). Дія алгоритму відбувається таким чином: користувач вказує деяку точку об'єкта, і алгоритм виділяє навколишні пікселі зі схожим кольором. Розумні ножиці розглядають все зображення як граф, кожна вершина якого відповідає пікселю зображення. Головне обмеження полягає в тому, що в сильно текстурованих областях наявно багато альтернативних шляхів. Методи розрізу графа представляються як зважений неорієнтовані граф. Піксель або група пікселів вважаються вершиною, а ваги ребер визначають схожість або несхожість сусідніх пікселів. Потім граф (зображення) розрізається згідно критерію, створеному для отримання «хороших» кластерів.

MeanShift групує об'єкти з близькими ознаками. Пікселі зі схожими ознаками об'єднуються в один сегмент, на виході отримуємо зображення з однорідними областями. Принцип дії алгоритму meanshift заснований на пошуку максимуму щільності ймовірності деякої функції, яка описує дискретні дані зображення. Ядро визначає вагу різних точок при оцінці середнього.

Порогова сегментація є одним із найпоширенішим методом сегментації зображень. У випадку застосування порогової сегментації кожний піксель вхідного зображення перетворюється у вихідний. Наступне перетворення характеризує порогову сегментацію:
,
де – поріг обробки, та відповідно нові значення яскравості вихідного зображення. В результаті застосування даного методу сегментації отримаємо бінарне зображення із областями фону та об’єктів.

Бінаризація з подвійним обмеженням застосовується для виділення областей, значення яскравості яких може мінятися в заданому діапазоні.

Метод Оцу (Отсу) використовує гістограму розподілу яскравостей вхідного зображення. Діапазон яскравостей розподіляється на два класи з допомогою порогового значення яскравості k. Даний метод розділяє пікселі таким чином, щоб дисперсія в середині класу була мінімальною. Метод Оцу знаходить поріг, що зменшує дисперсію всередині класу, що визначається як зважена сума дисперсій двох класів.

  1. Хід роботи

Детектор Кенні

Приклад функції для застосування детектора Кенні з використанням бібліотеки OpenCV:

/**

* Детектор Кенні

* @param image - Вхідне зображення

* @param size - нижній поріг

* @return Mat результат

*/

public static Mat cannyDetection(Mat image, int size){

Mat grayImage = new Mat();

Mat detectedEdges = new Mat();

// конвертаціяуградаціїсірого

Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_BGR2GRAY);

// видаленняшумів

Imgproc.blur(grayImage, detectedEdges, new Size(3, 3));

Imgproc.Canny(detectedEdges, detectedEdges, size, size/3, 3, false);

return detectedEdges;

}

K-means

Приклад функції для застосування методу k-means з використанням бібліотеки OpenCV:

/**

* @paramsrc - вхідне зображення

* @returnMat результат

*/

public static Mat kmeans(Mat src){

Mat mHSV = new Mat();

Imgproc.cvtColor(src, mHSV, Imgproc.COLOR_RGBA2RGB,3);

Imgproc.cvtColor(src, mHSV, Imgproc.COLOR_RGB2HSV,3);

List hsv_planes = new ArrayList(3);

Core.split(mHSV, hsv_planes);

Mat channel = hsv_planes.get(0);

channel = Mat.zeros(mHSV.rows(),mHSV.cols(),CvType.CV_8UC1);

hsv_planes.set(2,channel);

Core.merge(hsv_planes,mHSV);

Mat clusteredHSV = new Mat();

mHSV.convertTo(mHSV, CvType.CV_32FC3);

TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,200,0.1);

Core.kmeans(mHSV, 3, clusteredHSV, criteria, 30, Core.KMEANS_PP_CENTERS);

returnmHSV;

}

Порогова сегментація

Поріг - це ознака (властивість), що допомагає розділити шуканий сигнал на класи. Операція порогового поділу полягає в зіставленні значення яскравості кожного пікселя зображення з заданим значенням порога.

Imgproc.threshold(src1, frame, minValue, maxValue, Imgproc.THRESH_BINARY_INV + Imgproc.THRESH_OTSU);


  1. Контрольні запитання





  1. Що таке сегментація зображень?


  2. Як існують способи сегментації?

  3. Наведіть принцип роботи порогової сегментації

  4. Наведіть принцип роботи сегментації методом k-means

  5. Наведіть принцип роботи сегментації методом водоподілу



  1. Завдання




  1. Ознайомитись із теоретичним матеріалом.

  2. Запустити алгоритми сегментації зображень.

  3. Провести порівняльний аналіз роботи алгоритмів над власним зображенням.

скачати

© Усі права захищені
написати до нас