Морфологическая реконструкция в OpenCV

У меня проблемы с обработкой изображений в OpenCV. У меня есть текст на моем изображении, и во время использования операции открытия я получаю неправильный вывод. Проблема очень похожа на ту, что описана в этой статье: http://www.cpe.eng.cmu.ac.th/wp-content/uploads/CPE752_06part2.pdf.

Что я вижу, люди предлагают использовать операции реконструкции в этих случаях. Мой вопрос: есть ли какой-нибудь встроенный механизм в OpenCV или какая-нибудь известная библиотека / код, который реализует это? Спасибо за помощь.

1 ответ

Вот моя реализация Python3 по аналогии с алгоритмом imreconstruct в MatLab:

import cv2
import numpy as np


def imreconstruct(marker: np.ndarray, mask: np.ndarray, radius: int = 1):
    """Iteratively expand the markers white keeping them limited by the mask during each iteration.

    :param marker: Grayscale image where initial seed is white on black background.
    :param mask: Grayscale mask where the valid area is white on black background.
    :param radius Can be increased to improve expansion speed while causing decreased isolation from nearby areas.
    :returns A copy of the last expansion.
    Written By Semnodime.
    """
    kernel = np.ones(shape=(radius * 2 + 1,) * 2, dtype=np.uint8)
    while True:
        expanded = cv2.dilate(src=marker, kernel=kernel)
        cv2.bitwise_and(src1=expanded, src2=mask, dst=expanded)

        # Termination criterion: Expansion didn't change the image at all
        if (marker == expanded).all():
            return expanded
        marker = expanded

Этот ответ приходит поздно, но вот основной алгоритм для реконструкции:

  1. Входными данными являются два изображения: ImReference и ImMarker, с маркером <= ссылка
  2. Промежуточное изображение: ImRec
  3. Выходное изображение: ImResult
  4. Скопируйте ImMarker в ImRec
  5. скопировать ImRec в ImResult
  6. ImDilated = Dilation (ImResult)
  7. ImRec = Минимум (ImDilated, ImReference)
  8. Если ImRec!= ImResult, вернитесь к шагу 5.

Это не самый оптимальный алгоритм, но он использует только основные операции.

Другие вопросы по тегам