图像滤波与形态学操作

图像滤波

https://mp.weixin.qq.com/s?__biz=MzU0NjgzMDIxMQ==&mid=2247591782&idx=2&sn=0e8d98fe35ec1599affefd5551468bb9&chksm=fb54858acc230c9c18f0e1b042dfbc18bdee6f911c2eaf3f5228b1957384369963bec0f38793&scene=27

修改像素值,改变像素周围像素值:去噪、平滑、锐化

应用

* 去噪声

* 锐化、平滑

* 边缘检测

* 形态学处理:处理二值图像

* 图像重构:强化重点,弱化其他内容(语义上的去噪声)

分类

线性:通过将目标像素周围的像素进行加权平均或者求和,得到目标像素的灰度值。**卷积核**

* 均值滤波

用每一个像素周围的像素的平均值代替自身

均值滤波与卷积

卷积

`cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst`

- src:输入图像

- ddepth:输出图像的深度,如果为-1,则输出图像的深度与输入图像一致。

- kernel:卷积核

- dst:输出图像

- anchor:卷积核中心的位置,默认值为(-1, -1),表示卷积核的中心点为卷积核的中心。

- delta:可选的增量,用于调整卷积的结果。

- borderType:边界填充方式,默认值为cv2.BORDER_DEFAULT。

import cv2

img = cv2.imread("../../dataset/noise_lena.png", 0)
h, w = img.shape
# 定义滤波核
kernel_size = 11
kernel = np.ones((kernel_size, kernel_size), dtype=np.float32)
# 方案一
# 添加pand
padding = kernel_size // 2
# 对图像进行填充,这里使用了复制边界的方式
img_pad = cv2.copyMakeBorder(img, padding, padding, padding, padding, cv2.BORDER_REPLICATE)
print(img_pad.shape, img.shape)
# 构建输出图像
img_out = np.zeros((h, w), dtype=np.uint8)
# 进行卷积操作
for i in range(padding, h+padding):
    for j in range(padding, w+padding):
        # 对于每个像素,取它周围kernel_size*kernel_size个像素的平均值,作为它的输出值
        roi = img[i-padding:i+padding+1, j-padding:j+padding+1]
        img_out[i-padding, j-padding] = np.mean(roi, axis=(0, 1))
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.subplot(1, 2, 2)
plt.imshow(img_out)
plt.show()
# 方案二
# 定义均值卷积核
kernel = np.ones((kernel_size, kernel_size), np.float32) / kernel_size**2
# 对图像进行卷积操作
img_out = cv2.filter2D(img, -1, kernel)
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.subplot(1, 2, 2)
plt.imshow(img_out)
plt.show()

* 中值滤波(非线性):

处理椒盐噪声(雪花点)和斑点

* 高斯滤波:

去除高斯噪声&#

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值