私の方法と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***
手順:
- ガウス フィルターを使用して画像をぼかす
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)
- 派生ラプラシアン カーネル Ix,Iy を使用
k = np.array([[0, 1, 0],
[1, -4, 1],
[0, 1, 0]])
- 画像の2D配列ですべての「ゼロクロッシング」を見つけて、それらを1と残りのゼロとしてマークする必要があります
私の主な問題はゼロクロッシングです。それを行う方法が見つかりません。
しきい値なしですべての交差をチェックする必要があります -> { (-+),(+-),(-0+),(+0-)}
、およびすべての交差を 1 として作成し、残りはゼロのままにします。
(畳み込みは、関数 conv2D によっても実装されています)