Рубрики
Без рубрики

Часть 6 серии обработки изображений Часть 6: Морфологические операции

В этой статье мы говорим о морфологических операциях по обработке изображений. Большая часть обработки изображений имеет тенденцию к падению под манипуляцией

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

Вывод операции черной шляпы,

Заключение

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

Они используются много времени на зонд Изображение, использующее структурирующий элемент, который мы разработали и вставили.

Надеюсь, вы что-то получили из этой статьи!

С нетерпением ждем больше статей о обработке изображений!

Рекомендации