Python实现中值滤波去噪⽅式
中值滤波器去噪:
中值滤波的主要原理是将数字图像中的某点⽤该点的邻域中各个像素值的中值所来代替,这样就能让⽬标像素周围能够更好的接近真实值,⽐如⼀张⽩纸上有⼀个⿊点时,⿊点的像素值⽐较⼤,经过中值滤波过后,⿊点附近的像素值可能就会变⼩。经过中值滤波后⼀些相对孤⽴的噪声点就容易被清除掉,这样就能提⾼图像的质量。
所以中值滤波器去噪的⼀个优点就是对椒盐噪声的去除具有很好的效果,具体操作是选取⼀个中⼼邻域,然后给邻域类各个像素的灰度值按⼤⼩进⾏排序,选取排序序列中的中值作为该邻域中⼼点的像素值的灰度值。
它的缺点是当邻域挑选过⼤时,可能会造成图像特征丢失。
实现代码如下:
import numpy as np
import cv2
from PIL import Image
import scipy.signal as signal
import matplotlib.pyplot as plt正则化粒子滤波
#创建⼀个500*500的矩阵
input_images = np.zeros((500, 500))
filename = "E:/pycharm/GraduationDesign/Test/testtwo.png"
#convert将当前图像转换为灰度模式,并且返回新的图像。
#将图⽚在重新定义的矩阵中再显⽰,不然可能会只显⽰部分。
img = Image.open(filename).resize((500, 500)).convert('L')
plt.subplot(221)
plt.title('原图', fontproperties=font_set)
plt.imshow(img)
#图像的尺⼨,按照像素数计算。它的返回值为宽度和⾼度的⼆元组(width, height)。
width = img.size[0]
height = img.size[1]
threshold=130
#可以改写代码使其成为⼆值化,此代码可理解为反向⼆值化
for h in range(height):
for w in range(width):
#getpixel直接获得(h,w)处的像素直接返回这个点三个通道的像素值
#返回给定位置的像素值。如果图像为多通道,则返回⼀个元组(r,g,b,阈值)。
#如果改成(w,h)出现的图像会倒转
pixel((w, h)) < threshold:
input_images[h, w] = 1
else:
input_images[h, w] = 0
plt.subplot(222)
plt.title('⼆值化', fontproperties=font_set)
plt.imshow(input_images)
data = dfilt2d(np.array(img), kernel_size=3) # ⼆维中值滤波
for h in range(0, height):
for w in range(0, width):
if data[h][w] < 128:
input_images[h, w] = 0
else:
input_images[h, w] = 1
plt.subplot(223)
plt.title('中值滤波去噪(3*3)', fontproperties=font_set)
plt.imshow(input_images)
data = dfilt2d(np.array(img), kernel_size=7) # ⼆维中值滤波
for h in range(0, height):
for w in range(0, width):
if data[h][w] < 128:
input_images[h, w] = 0
else:
input_images[h, w] = 1
plt.subplot(224)
plt.title('中值滤波去噪(7*7)', fontproperties=font_set)
plt.imshow(input_images)
plt.show()
效果图:
图中的⼩⿊点是我简单模拟实现图⽚中含有椒盐噪声中所加⼊的。当中值滤波领域选取过⼤时会使图⽚失真。
以上这篇Python实现中值滤波去噪⽅式就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。