(1)用均值滤波对高斯噪声污染的彩色图像进行去噪。
(2)分别用分平面方法、灰度图像方法和向量处理方法对彩
色图像进行边缘提取,显示各自的梯度图像。
提示:灰度图像方法是指,先将彩色图像转为灰度图像,然
后对灰度图像提取边缘的方法。
引自免费微信小程序:皆我百晓生
首先,我们需要导入必要的库并加载彩色图像。这里我们使用Python语言和OpenCV库来实现这个任务。如果你还没有安装这些库,可以使用以下命令安装:
pip install opencv-python
接下来,我们将按照步骤解决你的问题:
第一步:加载图像
import cv2
import numpy as np
# 加载彩色图像
img = cv2.imread('your_color_image.jpg')
if img is None:
print("Image loading failed. Please provide a valid image path.")
else:
# 显示原始图像
cv2.imshow('Original Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
请替换'your_color_image.jpg'
为你的彩色图像文件路径。
第二步:均值滤波去噪
# 定义滤波器大小
kernel_size = 3
# 均值滤波
filtered_img = cv2.boxFilter(img, -1, (kernel_size, kernel_size))
# 显示去噪后的图像
cv2.imshow('Filtered Image', filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
第三步:边缘提取
# 将RGB图像转换为HSV颜色空间
hsv_img = cv2.cvtColor(filtered_img, cv2.COLOR_BGR2HSV)
# 使用Sobel算子在V通道上计算梯度
sobel_vx = cv2.Sobel(hsv_img[:, :, 2], cv2.CV_8U, 1, 0, ksize=3)
sobel_vy = cv2.Sobel(hsv_img[:, :, 2], cv2.CV_8U, 0, 1, ksize=3)
# 求绝对值并合并两个梯度
gradient_img_hsv = np.sqrt(sobel_vx ** 2 + sobel_vy ** 2)
# 回归BGR色彩空间
gradient_img_bgr = cv2.cvtColor(gradient_img_hsv, cv2.COLOR_HSV2BGR)
# 显示梯度图像
cv2.imshow('Gradient Image (HSV Plane)', gradient_img_bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 将RGB图像转换为灰度图像
gray_img = cv2.cvtColor(filtered_img, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测算法
edges_gray = cv2.Canny(gray_img, 50, 150)
# 显示梯度图像
cv2.imshow('Gradient Image (Gray Scale Method)', edges_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 计算每个像素点的颜色差
color_diff = np.abs(np.diff(img, axis=0)) + np.abs(np.diff(img, axis=1))
# 计算总差异
total_diff = np.sum(color_diff, axis=-1)
# 应用阈值来提取边缘
threshold = 100
edges_vector = total_diff > threshold
# 显示梯度图像
cv2.imshow('Gradient Image (Vector Processing)', edges_vector * 255)
cv2.waitKey(0)
cv2.destroyAllWindows()
这段代码会分别展示三种方法得到的梯度图像。记得替换 'your_color_image.jpg'
为你的实际图片路径,并根据需求调整参数(例如滤波器大小、Canny算法的阈值等)。