Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Morphological Reconstruction in OpenCV

When processing an image with text in OpenCV, my opening operation does not result in proper output data. The issue is quite similar to the one described in this article: http://www.cpe.eng.cmu.ac.th/wp-content/uploads/CPE752_06part2.pdf

Screenshot from PDF section

What I can see, people suggest to use reconstruction operations. Is there any build-in mechanism in OpenCV or some known library/code that implements this?

like image 395
user2957984 Avatar asked Mar 16 '23 17:03

user2957984


1 Answers

Here's my Python3 implementation in analogy to MatLab's imreconstruct algorithm:

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
like image 60
Semnodime Avatar answered Mar 28 '23 22:03

Semnodime