概述
中值滤波
一级标题统计排序滤波器是一种非线性空间滤波器,这种滤波器的响应以滤波器包围的图像区域中所包含的像素排序为基础,然后使用统计排序结果决定的值代替中心像素的值。这一类中最知名的滤波器是中值滤波器,正如其名暗示的那样,它是将像素内灰度的中值(在中值计算中包括原像素值)代替该像素的值。中值滤波器的使用非常普遍,这是因为对于一定类型的随机噪声,它提供了一种优秀的去噪能力,而且比相同尺寸的线性平滑滤波器的模糊程度明显要低。中值滤波器对处理脉冲噪声非常有效,该种噪声也成为椒盐噪声,因为这种噪声是以黑白点的形式叠加在图像上的。
代码展示:
from PIL import Image
import numpy as np
import random
from skimage import io
import cv2 as cv
import numpy as np
import math
def salt_and_pepper_noise(img, proportion=0.05):
noise_img = img
height, width = noise_img.shape[0], noise_img.shape[1]
num = int(height * width * proportion) # 多少个像素点添加椒盐噪声
for i in range(num):
w = random.randint(0, width - 1)
h = random.randint(0, height - 1)
if random.randint(0, 1) == 0:
noise_img[h, w] = 0
else:
noise_img[h, w] = 255
return noise_img
def median_filter(image, win=3):
H, W, C = image.shape
result = image.copy()
for h in range(1, H-2):
for w in range(1, W-2):
for c in range(C):
result[h, w, c] = np.median(result[h:h+win, w:w+win, c])
return result
if __name__ == "__main__":
img = cv.imread(r"E:/pythontupian/5.jpg")
cv.imshow("original", img)
noise_img = salt_and_pepper_noise(img)
cv.imshow("noise_img", noise_img)
MedianFilter_img=median_filter(img)
cv.imshow("MedianFilter_img", MedianFilter_img)
cv.waitKey(0)
cv.destroyAllWindows()
结果展示:
3×3中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
9×9中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
15×15中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
均值滤波
平滑线性滤波器的输出(响应)是包含在滤波器模板邻域内的像素简单平均值。这些滤波器有时也称为均值滤波器。它使用滤波器模板确定的邻域内像素的平均灰度值代替图像中每个像素的值,这种处理的结果降低了图像灰度的尖锐变化。由于典型的随机噪声由灰度级的急剧变化组成,因此,常见的平滑处理应用就是降低噪声。然而,由于图像边缘也是由图像灰度尖锐变化带来的特性,所以均值滤波处理还是存在着不希望有的边缘模糊的负面效应。
代码展示:
from PIL import Image
import numpy as np
import random
from skimage import io
import cv2 as cv
import numpy as np
import math
def salt_and_pepper_noise(img, proportion=0.05):
noise_img = img
height, width = noise_img.shape[0], noise_img.shape[1]
num = int(height * width * proportion) # 多少个像素点添加椒盐噪声
for i in range(num):
w = random.randint(0, width - 1)
h = random.randint(0, height - 1)
if random.randint(0, 1) == 0:
noise_img[h, w] = 0
else:
noise_img[h, w] = 255
return noise_img
def mean_filter(image):
K = ([1, 1, 1],
[1, 1, 1],
[1, 1, 1])
K = np.array(K)
H, W, C = image.shape
result = image.copy()
# 因为卷积核是以左上角为定位,所以遍历时最后要停到H-2处
for h in range(1, H-2):
for w in range(1, W-2):
for c in range(C):
result[h, w, c] = sum(sum(K * result[h:h+K.shape[0], w:w+K.shape[1], c])) // 9
return result
if __name__ == "__main__":
img = cv.imread(r"E:/pythontupian/5.jpg")
cv.imshow("original", img)
noise_img = salt_and_pepper_noise(img)
cv.imshow("noise_img", noise_img)
Mean_img=mean_filter(img)
cv.imshow("MedianFilter_img", Mean_img)
cv.waitKey(0)
cv.destroyAllWindows()
结果展示:
3×3中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
结果比较
3×3中值滤波器(从左到右依次是加椒盐噪声图、3×3均值滤波器、3×3中值滤波器):
最后
以上就是仁爱菠萝为你收集整理的中值滤波、均值滤波----python中值滤波均值滤波结果比较的全部内容,希望文章能够帮你解决中值滤波、均值滤波----python中值滤波均值滤波结果比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复