9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

本文介绍了使用Python进行图像噪声消除的方法,主要涉及二值形态学中的开启和闭合操作。通过添加随机椒盐噪声到图像,然后利用OpenCV库进行二值化和形态学操作,实现对噪声点的去除。代码示例展示了如何实现这一过程,最终展示去噪前后的图像对比效果。
摘要由CSDN通过智能技术生成

9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

1 算法原理

二值图像中常有一些小孔或小岛。这些小孔或小岛一般是由系统噪声、阈值选取或预处理而造成的。椒盐噪声就是一种典型的,造成二值图中出现小孔或小岛的噪声。

将开启和闭合结合起来就可构成形态学噪声滤除器以消除这类噪声。例如用包括一个中心像素和它的4邻域的像素构成的结构元素去开启图像就能消除椒噪声,而去闭合图像就能消除盐噪声。

2 代码

运行代码说明

1.要改变代码中的图片地址(地址不能有中文)

更改put(path)函数中的路径put(r'../image/image1.jpg')

2.注意最后的plt.savefig('1.new.jpg')是保存plt图像,如果不使用可以注释掉

代码依赖包:

matplotlib  3.4.2
numpy  1.20.3
opencv-python  4.1.2.30
# pip安装
pip install matplotlib numpy opencv-python
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


def random_noise(img,noise_num):
    '''
    添加随机噪点(实际上就是随机在图像上将像素点的灰度值变为255即白色)
    :param image: 需要加噪的图片
    :param noise_num: 添加的噪音点数目,一般是上千级别的
    :return: img_noise
    '''
    #
    # 参数image:,noise_num:
    img_noise = img
    # cv2.imshow("src", img)
    rows, cols, chn = img_noise.shape
    # 加噪声
    x_size = np.random.randint(2, 3)# 加噪声的方块大小的长宽
    y_size = np.random.randint(2, 3)
    for i in range(noise_num):
        x = np.random.randint(0, rows)#随机生成指定范围的整数
        y = np.random.randint(0, cols)
        img_noise[x:x+x_size, y:y+y_size, :] = 0

    return img_noise

# img_noise = random_noise("32-2.jpg",30)

def put(path):
    # 读取图片
    img = cv2.imread(path)
    img = random_noise(img,1000)  # 添加噪声,1000是噪声点数

    src = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转灰度图片

    # 二值化,之前噪声是0,经过翻转二值化后变成255(白色)
    ret, src = cv2.threshold(src, 230, 255, cv2.THRESH_BINARY_INV)  # 翻转二值化
    #ret, src = cv2.threshold(src, 102, 255, cv2.THRESH_BINARY)  # 正常二值化
    # 设置卷积核
    kernel = np.ones((3, 3), np.uint8)

    # 图像开运算
    res3 = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
    # 图像闭运算去噪
    res4 = cv2.morphologyEx(res3, cv2.MORPH_CLOSE, kernel)
    # 图像显示
    plt.subplot(121), plt.imshow(src, plt.cm.gray), plt.title('噪声图片'), plt.axis('off')
    plt.subplot(122), plt.imshow(res4, plt.cm.gray), plt.title('去噪'), plt.axis('off')

    # plt.savefig('2.1new-ing.jpg')
    plt.show()

# 图像处理函数,要传入路径
put(r'image1.jpg')

去噪是针对白色噪声点,要注意二值化方式和添加噪声的像素值

3 效果

image-20210808170435768

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值