拉普拉斯空间滤波锐化 1) 采用3×3的拉普拉斯算子w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]滤波
时间: 2023-10-03 21:04:15 浏览: 234
拉普拉斯算子可以用于图像锐化,其公式为:
g(x,y) = f(x,y) - w(x,y) * f(x,y)
其中,f(x,y)是原始图像,g(x,y)是锐化后的图像,w(x,y)是拉普拉斯算子。
对于3×3的拉普拉斯算子w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1],可以通过以下步骤进行滤波:
1. 对原始图像进行灰度化处理。
2. 对灰度图像进行边缘填充,可以选择镜像、复制或者扩展等方式。
3. 遍历每个像素点,将该像素点和周围8个像素点的值分别乘以对应的拉普拉斯算子中的权重,然后将这9个值相加,得到该像素点的锐化后的像素值。
4. 最后,将锐化后的像素值进行限制,使其在0-255之间。
下面是一个Python实现的例子:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('lena.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘填充
gray_pad = cv2.copyMakeBorder(gray, 1, 1, 1, 1, cv2.BORDER_DEFAULT)
# 拉普拉斯算子
w = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])
# 滤波
height, width = gray.shape
result = np.zeros((height, width), dtype=np.uint8)
for i in range(1, height + 1):
for j in range(1, width + 1):
roi = gray_pad[i - 1:i + 2, j - 1:j + 2]
result[i - 1, j - 1] = np.clip(np.sum(roi * w), 0, 255)
# 显示图像
cv2.imshow('Original', img)
cv2.imshow('Sharpened', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码中,使用了OpenCV库进行图像处理,其中cv2.copyMakeBorder函数用于边缘填充,np.clip函数用于限制像素值在0-255之间。
阅读全文