Автор оригинала: Pankaj Kumar.
В этой статье мы говорим о морфологических операциях по обработке изображений.
Большая часть обрабатываемой обработки изображений имеет тенденцию к манипуляции изображений, как и, как делают морфологические операции.
Эти операции могут варьироваться от разрушения изображения для заточки изображения для деталей. Размытие и искажение изображения помогают нам найти функции на изображении.
Мы обычно применяем морфологические операции на изображения двоичных или серого, так как это позволяет использовать информацию из форм и структур внутри изображений.
Предпосылки для морфологических операций
Это хорошая идея, чтобы пройти предыдущие статьи по обработке изображений до этого, как это позволит вам быть в курсе основ обработки изображений.
Эта статья не будет охватывать объяснение настроек, как это уже было сделано в предыдущих.
Вот несколько ссылок на серию обработки изображений, которые вы можете посетить для справки.
- Часть 1 серии – Начало работы с обработки изображений
- Вот предыдущая статья Обработка изображений Часть 5: Арифметика, побитовая и маскировка Отказ
Морфологические операции
Теперь давайте перейдем на морфологические операции, которые мы можем занять в обработке изображений.
Настройка среды
Давайте сначала установите исходное изображение для доступа и выполнить несколько операций ввода до морфологических операций.
Вот код для того, чтобы сделать это,
# importing argument parsers import argparse # importing the OpenCV module import cv2 # initializing an argument parser object ap = argparse.ArgumentParser() # adding the argument, providing the user an option # to input the path of the image ap.add_argument("-i", "--image", required=True, help="Path to the image") # parsing the argument args = vars(ap.parse_args()) # reading the image location through args # and reading the image using cv2.imread image = cv2.imread(args["image"]) # conversion of the image to grayscale gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # displaying the original image cv2.imshow("Original", image)
Вы должны получить изображение, которое выглядит что-то подобное,
1. Эрозия операция
Эрозия – это операция, которая буквально делает то, что она говорит – это Эруды Изображение присутствует на переднем плане и делает его меньше.
Чтобы выполнить эрозию, мы определяем структурирующий элемент, а затем переходите из верхнего левого угла изображения в правый нижний правый угол.
Эрозия полезна при удалении каплей или отсоединения двух подключенных объектов.
Вот код для того, чтобы работать с эрозией,
# utilization of erosion threefold times for i in range(0, 3): eroded = cv2.erode(gray.copy(), None, iterations=i + 1) cv2.imshow("Eroded {} times".format(i + 1), eroded) cv2.waitKey(0) # destruction of all the windows cv2.destroyAllWindows() cv2.imshow("Original", image)
Вот несколько примеров вывода эрозии,
1 раз 2 раза 3 раза
2. Работа расширения
Расладка – это совсем противоположное эрозии, где он будет вырастеть пиксели переднего плана, а не питаться в пикселях.
Мы можем использовать cv2.dilate ()
Применить расширения на изображениях.
Вот код для того, чтобы работать с эрозией,
# utilization of dilation threefold times for i in range(0, 3): dilated = cv2.dilate(gray.copy(), None, iterations=i + 1) cv2.imshow("Dilated {} times".format(i + 1), dilated) cv2.waitKey(0) # destruction of all the windows cv2.destroyAllWindows() cv2.imshow("Original", image)
Несколько примеров операций расширения приведены ниже,
После расширенности Дважды расширено Трижды расширено
3. Открытие операции
Работа открытия представляет собой комбинацию эрозии, а затем расширение.
Это позволяет нам удалять капли с изображения.
Затем мы можем расширить, чтобы отразить размер объекта к оригинальной форме.
Вот код для открытия в OpenCV,
# creation of three different kernels to use in morphology kernelSizes = [(3, 3), (5, 5), (7, 7)] # utilization of the morphological Opening operation for kernelSize in kernelSizes: kernel = cv2.getStructuringElement(cv2.MORPH_RECT, kernelSize) opening = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel) cv2.imshow("Opening: ({}, {})".format(kernelSize[0], kernelSize[1]), opening) cv2.waitKey(0) # destruction of all the windows cv2.destroyAllWindows() cv2.imshow("Original", image)
Вот полученные выходы операции открытия для нашего изображения,
(3, 3) (5, 5) (7, 7)
4. Закрытие операции
Закрытие – противоположность отверстия, где мы сначала расширяемся, а затем выполняем операцию эрозии на изображении.
Вот код для выполнения операции закрытия в OpenCV,
# utilization of the morphological closing operation for kernelSize in kernelSizes: kernel = cv2.getStructuringElement(cv2.MORPH_RECT, kernelSize) closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel) cv2.imshow("Closing: ({}, {})".format(kernelSize[0], kernelSize[1]), closing) cv2.waitKey(0) # destruction of all the windows cv2.destroyAllWindows() cv2.imshow("Original", image)
Вот выходы закрытия операций,
Закрытие (3, 3) (5, 5) Ядро (7, 7)
5. Морфологический градиент
Морфологический градиент – это разница между расширением и эрозией изображения.
Мы используем эту операцию, чтобы найти план изображения.
Что мы будем покрывать в ближайшее время!
# utilization of the morphological gradient operation for kernelSize in kernelSizes: kernel = cv2.getStructuringElement(cv2.MORPH_RECT, kernelSize) gradient = cv2.morphologyEx(gray, cv2.MORPH_GRADIENT, kernel) cv2.imshow("Gradient: ({}, {})".format(kernelSize[0], kernelSize[1]), gradient) cv2.waitKey(0)
Вот несколько результатов морфологических операций,
(3, 3) (5, 5) (7, 7)
6. Top Hat & Black Hat
Операции Top Hat и Black Hat – это те, которые находят разницу между оригинальными изображениями и операциями открытия и закрытия соответственно.
Операции Top Hat используются для выявления ярких областей изображений на темных фонах.
Операции Black Hat – это те, которые используются для раскрытия противоположных операций Top Hat.
Вот код для обоих этих операций,
# structuring the kernel to be used in cv2.morphologyEx() rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5)) # performing a blackhat morphological operation blackhat = cv2.morphologyEx(gray, cv2.MORPH_BLACKHAT, rectKernel) # performing a tophat morphological operation tophat = cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, rectKernel) # Displaying the three different images cv2.imshow("Original", image) cv2.imshow("BlackHat", blackhat) cv2.imshow("TopHat", tophat) cv2.waitKey(0)
Вывод операции Top Hat,
Вывод операции черной шляпы,
Заключение
Морфологические операции являются операциями, которые выполняются в изображениях, чтобы изменить их для определения определенных функций.
Они используются много времени на зонд Изображение, использующее структурирующий элемент, который мы разработали и вставили.
Надеюсь, вы что-то получили из этой статьи!
С нетерпением ждем больше статей о обработке изображений!
Рекомендации
- GitHub ссылка на морфологические операции
- GitHub ссылка на операции шляпы
- Серия обработки изображений: рисунок в OpenCV