1

私の方法とmatplotlib OpenCVとNumPyのみを使用してLogファイラーを構築する必要があります(ただし、計算を支援するためだけにフィルターを実行する組み込み関数は使用しません)

def edgeDetectionZeroCrossingLOG(img: np.ndarray) -> (np.ndarray):
    """
    Detecting edges using the "ZeroCrossingLOG" method
    :param I: Input image
    :return: :return: Edge matrix
    """
    kernel = np.ndarray((3, 3))
    b_img = blurImage1(img, kernel)
    k = np.array([[0, 1, 0],
                  [1, -4, 1],
                  [0, 1, 0]])
    img_dervative = conv2D(img, k)
    ***Zero-Crossing***

手順:

  1. ガウス フィルターを使用して画像をぼかす
def blurImage1(in_image: np.ndarray, kernel_size: np.ndarray) -> np.ndarray:
    """
    Blur an image using a Gaussian kernel
    :param inImage: Input image
    :param kernelSize: Kernel size
    :return: The Blurred image
    """

    gaussian = np.ndarray(kernel_size)
    sigma = 0.3 * ((kernel_size[0] - 1) * 0.5 - 1) + 0.8
    for x in range(0, kernel_size[0]):
        for y in range(0, kernel_size[1]):
            gaussian[x, y] = math.exp(-((x ** 2 + y ** 2) / (2.0 * sigma ** 2))) / (math.pi * (sigma ** 2) * 2)
    return conv2D(in_image, gaussian)
  1. 派生ラプラシアン カーネル Ix,Iy を使用
    k = np.array([[0, 1, 0],
                  [1, -4, 1],
                  [0, 1, 0]])
  1. 画像の2D配列ですべての「ゼロクロッシング」を見つけて、それらを1と残りのゼロとしてマークする必要があります

私の主な問題はゼロクロッシングです。それを行う方法が見つかりません。

しきい値なしですべての交差をチェックする必要があります -> { (-+),(+-),(-0+),(+0-)}、およびすべての交差を 1 として作成し、残りはゼロのままにします。

(畳み込みは、関数 conv2D によっても実装されています)

4

1 に答える 1