学习笔记-使用Python对含有椒盐噪声的图像进行均值滤波,高斯滤波和中值滤波
2021/9/21 17:40:19
本文主要是介绍学习笔记-使用Python对含有椒盐噪声的图像进行均值滤波,高斯滤波和中值滤波,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import cv2 as cv from pylab import * from scipy import ndimage import matplotlib.pyplot as plt import random # ....................................................................................... # ..................................我是分界线............................................. # ....................................................................................... def pepper_and_salt(img,percentage): # 第一个参量为输入图片路径,第二个是噪声占图片像素的百分比 num = int(percentage*img.shape[0]*img.shape[1]) # 计算椒盐噪声点数量 random.randint(0, img.shape[0]) # 参数1、参数2必须是整数函数;返回值是参数1和参数2之间的任意整数生成随机位置 img2 = img.copy() # 浅度复制,复制的数不会随着被复制数的嵌套序列的元素的改变而改变; for i in range(num): X=random.randint(0,img2.shape[0]-1) # 从0到图像长度之间的一个随机整数,因为是闭区间所以-1 Y=random.randint(0,img2.shape[1]-1) if random.randint(0,1) ==0: # 黑白色概率55开 img2[X,Y] = (255,255,255) # 白色 else: img2[X,Y] =(0,0,0) # 黑色 return img2 # ..................................我是分界线............................................. if __name__ == '__main__': #对自备图片进行均值滤波 plt.ion() # 读取图片 img = cv.imread("g07.tif") # pycharm文件和图片在同一个文件夹里,故可直接写图片名称来表示路径 # 加入噪音 img = pepper_and_salt(img, 0.01) source = cv.cvtColor(img, cv.COLOR_BGR2RGB) # 颜色空间转换函数 # 均值滤波 result = cv.blur(source, (5, 5)) # 以周围5x5的像素值为依据进行滤波,越大越模糊 # 显示图形 titles = ['Source Image', 'Blur Image'] images = [source, result] for i in range(2): # 将两个图合并为一个图输出 plt.subplot(1, 2, i + 1) # plt.subplot(i,j,n)形式,其中ij是行列数,n是第几个图 plt.imshow(images[i]) # 对图像进行处理,并显示其格式, plt.title(titles[i]) # 设置图像标题 plt.xticks([]), plt.yticks([]) plt.show() # plt.show则是将plt.imshow处理后的函数显示出来 plt.pause(3) # 该句显示图片3秒 plt.close() # 清空窗口 # 高斯模糊模板 kernel_3X3 = np.array([ # 产生二维数组 [1/16, 2/16, 1/16], [2/16, 4/16, 2/16], [1/16, 2/16, 1/16], ]) gray = cv.cvtColor(source, cv.COLOR_BGR2GRAY) # 将彩色图片变为灰度图 kernel_3X3 = kernel_3X3/kernel_3X3.sum() # .sum()是对序列进行求和,在这里这段代码无意义 k = ndimage.convolve(gray, kernel_3X3, mode='constant', cval=0.0) # 卷积 # ndimage.convolve()第一个参数表示输入的一维数组,第二个参数是输入的二维数组 # mode='reflect'(默认值),外部值会反映在输入的边以填充缺失值。 # mode='constant', cval=0.0表示边界补0;mode='constant', cval=1.0表示边界补1 cv.imshow("Gaussian Blur ", k) # 图片显示 cv.waitKey(5000) cv.destroyAllWindows() #添加椒盐噪声 img = cv.imread("g07.tif") img1 = pepper_and_salt(img, 0.05) # 百分之5的椒盐噪音 img_median = cv.medianBlur(img1, 3) # 中值滤波 htitch = np.hstack((img1, img_median)) # 将添加噪声的图和中值滤波后的图合并到一起显示 cv.imshow("pepper_and_salt", htitch) cv.waitKey(5000) cv.destroyAllWindows()
二、图象平滑
1,对自备图片(封面图图)进行均值滤波(自选模板大小)
2,对自备图片利用二维高斯模板,对其进行加权平滑滤波,并比较其效果;二维高斯模板为:
3,对自备图像之一添加椒盐噪声,再进行中值滤波;
这篇关于学习笔记-使用Python对含有椒盐噪声的图像进行均值滤波,高斯滤波和中值滤波的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型