LoG オペレーター (ガウス ラプラシアン オペレーター)
LoG オペレーターは、ラプラシアン オペレーターから改良されました。ラプラシアン演算子は二次微分演算子であり、線形性と変位不変性を備えたスカラー量であり、周波数領域空間における伝達関数の原点は 0 です。ラプラシアン フィルター処理されたすべての画像の平均グレースケールはゼロです。ただし、この演算子の欠点は、ノイズの影響を受けやすいことです。そのため、実際のアプリケーションでは、通常、最初に画像を平滑化し、次にラプラス演算子を使用して画像のエッジを検出する必要があります。これは、LoG 演算子の背景です (最終的な勾配式は、ガウス関数と元の画像の畳み込み、および 2 次微分演算子です)。
そのフィルター関数モデルは次のとおりです。
フレーム 5*5 の平方根を求めます。
[ 0 0 − 1 0 0 0 − 1 − 2 − 1 0 − 1 − 2 16 − 2 − 1 0 − 1 − 2 − 1 0 0 0 − 1 0 0 ] \left[ \begin{配列} {cccc} 0&0&-1&0&0\\ 0&-1&-2&-1&0\\ -1&-2&16&-2&-1\\ 0&-1&-2&-1&0\\ 0&0&-1&0&0\\ \ end { 配列 } \ right
00− 1000− 1− 2− 10− 1− 216− 2− 10− 1− 2− 1000− 100
コード:
import numpy as np
import cv2
from matplotlib import pyplot as plt
import imgShow as iS
#定义掩膜
m1 = np.array([[0,0,-1,0,0],[0,-1,-2,-1,0],[-1,-2,16,-2,-1],[0,-1,-2,-1,0],[0,0,-1,0,0]]) #LoG算子模板
img = cv2.imread("./originImg/Lena.tif")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#边缘扩充
image = cv2.copyMakeBorder(img, 2, 2, 2, 2, borderType=cv2.BORDER_REPLICATE)
# image = cv2.GaussianBlur(img,(3,3),4)
rows = image.shape[0]
cols = image.shape[1]
temp = 0
image1 = np.zeros(image.shape)
for i in range(2,rows-2):
for j in range(2,cols-2):
temp = np.abs(
(np.dot(np.array([1, 1, 1, 1, 1]), (m1 * image[i - 2:i + 3, j - 2:j + 3])))
.dot(np.array([[1], [1], [1], [1], [1]])))
image1[i,j] = int(temp)
if image1[i, j] > 255:
image1[i, j] = 255
else:
image1[i, j] = 0
iS.showImagegray(image1,img , 25, 15, 'LoG', 'origin', './LoG.jpg')
# cv2.imshow("LoG",image1)
# cv2.waitKey(0)
テスト結果は次のとおりです。