Автор оригинала: 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