Рубрики

Сегментация изображения с использованием морфологических операций в Python

Если мы хотим извлечь или определить что-то из остальной части изображения, например. Обнаружив объект на заднем плане, мы можем разбить изображение на сегменты, в которых мы можем сделать больше обработки. Обычно это называется сегментация .

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

Для обработки мы будем использовать пороговый алгоритм OTSU, в котором он удаляет более сегментированный результат из-за шума или любых других неровностей изображения и реализует его с помощью OpenCV.

Подходить :

  • Пометьте область, в которой мы уверены, что мы являемся передним планом или объектом одного цвета (или интенсивности). Пометьте область, в которой мы уверены, что она является фоном или необъектом другого цвета.
  • Наконец, регион, в котором мы ни в чем не уверены, пометьте его 0. Это наш маркер. Затем примените алгоритм водораздела.
  • Тогда наш маркер будет обновлен с метками, которые мы дали, и границы объектов будут иметь значение -1.

Начнем с примера, рассмотрим изображение монеты.

Входное изображение:

# Python программа для преобразования изображения с помощью
# порог.

import numpy as np

import cv2

from matplotlib import pyplot as plt

  
# Работа с изображением с использованием порога

img = cv2.imread('c4.jpg')

  

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

  

ret, thresh = cv2.threshold(gray, 0, 255,

                            cv2.THRESH_BINARY_INV +

                            cv2.THRESH_OTSU)

cv2.imshow('image', thresh)

Выход :


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

Теперь нам нужно удалить любые маленькие белые шумы на изображении, т.е. на переднем плане. Для этого мы можем использовать морфологическое закрытие. Чтобы удалить любые маленькие отверстия в объекте переднего плана, мы можем использовать морфологическое закрытие. Чтобы получить фон, мы расширяем изображение. Расширение увеличивает границу объекта до фона.

Давайте посмотрим код:

# Удаление шума с помощью морфологического
# операция закрытия

kernel = np.ones((3, 3), np.uint8)

closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE,

                            kernel, iterations = 2)

  
# Фоновая область с использованием набора номера

bg = cv2.dilate(closing, kernel, iterations = 1)

  
# Нахождение переднего плана

dist_transform = cv2.distanceTransform(closing, cv2.DIST_L2, 0)

ret, fg = cv2.threshold(dist_transform, 0.02

                        * dist_transform.max(), 255, 0)

  

cv2.imshow('image', fg)

Выход :

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

Ссылка :
https://docs.opencv.org/3.3.1/d3/db4/tutorial_py_watershed.html

Рекомендуемые посты:

Сегментация изображения с использованием морфологических операций в Python

0.00 (0%) 0 votes