对“lena”图像采用Sobel算子对其进行锐化,并设置不同参数,对比锐化效果的python代码
时间: 2024-10-24 21:05:27 浏览: 55
图像锐化MATLAB实现(包含laplacian算子、Prewitt算子、Robert算子、sobel算子)
在Python中,我们可以使用OpenCV库来对"lena"图像应用Sobel算子进行锐化。Sobel算子是一种常见的边缘检测算子,通过计算像素点周围灰度值的变化来识别边缘。以下是使用不同阈值(一般用于调整模糊程度)对比锐化效果的基本步骤:
```python
import cv2
import numpy as np
# 加载 Lena 图像
lena = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# Sobel 算子有水平和垂直两个方向,这里以水平为例
def apply_sobel(image, sobel_kernel=3, threshold=50):
# 应用 Soble 运算
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=sobel_kernel)
# 计算梯度强度并转换为8位无符号整型
abs_grad = cv2.convertScaleAbs(sobel_x)
# 如果需要,可以应用二值化操作
binary = cv2.threshold(abs_grad, threshold, 255, cv2.THRESH_BINARY)[1]
return binary
# 设置不同的参数值
sharpness_levels = [1, 3, 5] # 不同大小的Sobel核
threshold_values = [20, 50, 70] # 不同的阈值
results = []
for kernel in sharpness_levels:
for t in threshold_values:
result = apply_sobel(lena, sobel_kernel=kernel, threshold=t)
results.append((result, f"Sobel Kernel {kernel}, Threshold {t}"))
# 显示原始图像和处理后的结果对比
fig, axs = plt.subplots(1, len(results), figsize=(15, 5))
axs[0].imshow(lena, cmap='gray')
axs[0].set_title('Original Lena')
for i, (image, title) in enumerate(results):
axs[i+1].imshow(image, cmap='gray')
axs[i+1].set_title(title)
plt.show()
阅读全文