Изучение морфологического замыкания при обработке изображений с использованием Python и OpenCV

Обработка изображений — это фундаментальный аспект компьютерного зрения, позволяющий нам анализировать и улучшать изображения для различных приложений. Одним из важных методов обработки изображений является морфологическое закрытие, которое помогает сглаживать и заполнять пробелы в объектах. В этой статье мы рассмотрим различные методы применения морфологического закрытия к изображению с использованием Python и OpenCV, а также примеры кода. Итак, приступим!

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

Метод 1: использование квадратного ядра
Самый простой способ выполнения морфологического закрытия — использование структурирующего элемента или ядра квадратной формы. Размер ядра определяет степень расширения и эрозии. Вот пример фрагмента кода:

import cv2
import numpy as np
def morphological_closing(image, kernel_size):
    kernel = np.ones((kernel_size, kernel_size), np.uint8)
    closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
    return closed_image
# Load the image
image = cv2.imread('input_image.jpg', 0)
# Apply morphological closing with a square kernel of size 5
closed_image = morphological_closing(image, 5)
# Display the result
cv2.imshow('Closed Image', closed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Метод 2: использование эллиптического ядра
В некоторых случаях использование элемента структурирования эллиптической формы может обеспечить лучшие результаты по сравнению с квадратным ядром. Эллиптическое ядро ​​помогает сохранить форму объектов и закрыть зазоры. Вот пример:

import cv2
import numpy as np
def morphological_closing(image, kernel_size):
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (kernel_size, kernel_size))
    closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
    return closed_image
# Load the image
image = cv2.imread('input_image.jpg', 0)
# Apply morphological closing with an elliptical kernel of size 7x5
closed_image = morphological_closing(image, 7)
# Display the result
cv2.imshow('Closed Image', closed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Метод 3: итеративное закрытие
В случаях, когда стандартное морфологическое закрытие не закрывает полностью все пробелы, мы можем выполнить итеративное закрытие, многократно применяя операцию закрытия несколько раз. Этот подход может помочь закрыть большие зазоры или дыры. Вот пример:

import cv2
import numpy as np
def iterative_closing(image, kernel_size, iterations):
    kernel = np.ones((kernel_size, kernel_size), np.uint8)
    closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel, iterations=iterations)
    return closed_image
# Load the image
image = cv2.imread('input_image.jpg', 0)
# Apply iterative closing with a square kernel of size 3 and 5 iterations
closed_image = iterative_closing(image, 3, 5)
# Display the result
cv2.imshow('Closed Image', closed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

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