Морфологічні операції змінюють зображення на основі структури та розташування пікселів. Вони застосовують ядро до вхідного зображення для зміни його характеристик залежно від розташування сусідніх пікселів. Такі морфологічні операції, як ерозія та розширення, є методами обробки зображень, особливо для бінарних зображень або зображень у градаціях сірого. Вони допомагають аналізувати форми, прибираючи шум і уточнюючи межі об’єктів.
Ерозія
Ерозія в обробці зображень — це морфологічна операція, яка зменшує та розріджує межі об’єктів на зображенні шляхом видалення пікселів на краях об’єктів, що ефективно зменшує об’єкти та усуває невеликий білий шум.
призначення
- Звужує або розмиває межі об’єктів переднього плану (зазвичай білих пікселів).
- Усуває тонкий білий шум і розділяє об’єкти, які торкаються.
Як це працює
- Ядро (зазвичай матриця 3×3 5×5 або 7×7 одиниць) ковзає по зображенню.
- Піксель залишається білим (1), лише якщо всі пікселі під ядром білі; інакше він стає чорним (0).
- Цей процес зменшує розмір об’єкта та стирає краї.
Розширення
Розширення – це морфологічна операція, яка розширює межі об’єктів на зображенні шляхом додавання пікселів до країв об’єкта, завдяки чому об’єкти виглядають більшими та заповнюються невеликі прогалини чи отвори.
Призначення:
- Розширює межі об'єктів переднього плану.
- Підкреслює або збільшує особливості та заповнює невеликі прогалини.
Як це працює:
- Ядро так само згорнуто над зображенням.
- Піксель має білий колір (1), якщо принаймні один відповідних пікселів під ядром є білим.
- В результаті білі області ростуть, зливаючись з маленькими дірками або з’єднуючи зламані частини.
Реалізація ерозії та розширення
Давайте запровадимо Erosion і Dilation за допомогою OpenCV у Python
Крок 1. Імпортуйте бібліотеки
Ми імпортуємо необхідні бібліотеки
- cv2 : Бібліотека OpenCV для обробки зображень.
- numpy : Для числових операцій і створення ядер.
- matplotlib.pyplot : Для відображення зображень у зошитах.
Крок 2: Завантажте вхідне зображення та визначте структурні елементи (ядро)
Ядро визначає околиці для операції. Зазвичай вибирають прямокутники або диски.
PythonВикористане зображення можна завантажити з тут .
img = cv2.imread('input.webp' 0) plt.imshow(img cmap='gray') plt.title('Original Image') plt.axis('off') plt.show() kernel = np.ones((5 5) np.uint8)
Вихід:
ОригіналКрок 3: Застосуйте ерозію
Ерозія працює, ковзаючи ядром по зображенню. Піксель залишається білим (255), лише якщо всі пікселі під ядром білі, інакше він стає чорним (0). Це зменшує межі об’єктів і усуває невеликий білий шум.
Pythonimg_erosion = cv2.erode(img kernel iterations=1) plt.imshow(img_erosion cmap='gray') plt.title('After Erosion') plt.axis('off') plt.show()
Вихід:
Після ерозіїКрок 4: Застосуйте розширення
Розширення ковзає ядром по зображенню, і піксель стає білим, якщо хоча б один піксель під ядром білий. Це потовщує білі області або об’єкти та заповнює маленькі отвори.
Pythonimg_dilation = cv2.dilate(img kernel iterations=1) plt.imshow(img_dilation cmap='gray') plt.title('After Dilation') plt.axis('off') plt.show()
Вихід:
Після розширенняДодатки
Ерозія
- Видалення ізольованого білого шуму із зображення.
- Розділення предметів, які з’єднані або торкаються.
- Пошук меж об’єкта шляхом зменшення розміру об’єкта.
Розширення
- Заповнення невеликих дірок або прогалин в об’єктах.
- З’єднання зламаних або від’єднаних частин одного предмета.
- Використовується після ерозії (як частина операції «відкриття») для відновлення розміру об’єкта, утримуючи при цьому шум.
Ерозія та розширення є фундаментальними морфологічними операціями в обробці зображень, які дозволяють нам уточнювати чисті форми та маніпулювати ними. Використовуючи прості структурні елементи, ці методи допомагають усунути шум, розділяючи або з’єднуючи об’єкти, і покращують функції зображення, що робить їх основними інструментами для ефективної попередньої обробки й аналізу в задачах комп’ютерного зору за допомогою OpenCV і Python.
Створіть вікторину