Morphological Reconstruction in OpenCV

后端 未结 2 1291
没有蜡笔的小新
没有蜡笔的小新 2021-01-20 03:11

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: ht

相关标签:
2条回答
  • 2021-01-20 03:43

    This answer arrives late, but here is the basic algorithm for under-reconstruction:

    1. Inputs are two images: ImReference and ImMarker, with marker <= reference
    2. Intermediate image: ImRec
    3. Output image: ImResult
    4. Copy ImMarker into ImRec
    5. copy ImRec into ImResult
    6. ImDilated = Dilation(ImResult)
    7. ImRec = Minimum(ImDilated, ImReference)
    8. If ImRec != ImResult then return to step 5.

    It's not the most optimal algorithm, but it uses only basic operations.

    0 讨论(0)
  • 2021-01-20 03:49

    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
    
    0 讨论(0)
提交回复
热议问题