首页 / 时尚 / 珠宝 / 正文

中值滤波器(Python 图像处理 - 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波)

放大字体  缩小字体 来源:轻钢别墅耐用吗 2026-04-17 17:09  浏览次数:5
Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

头图 | CSDN付费下载自视觉中国

本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波、方框滤波、高斯滤波和中值滤波。全文均是基础知识,希望对您有所帮助。知识点如下:

2.均值滤波

4.高斯滤波

PS:本文介绍图像平滑,想让大家先看看图像处理的效果,后面还会补充一些基础知识供大家学习。文章参考自己的博客及网易云课堂李大洋老师的讲解,强烈推荐大家学习。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

1.图像增强

2.图像平滑

简单平滑-邻域平均法

图像简单平滑是指通过邻域简单平均对图像进行平滑处理的方法,用这种方法在一定程度上消除原始图像中的噪声、降低原始图像对比度的作用。它利用卷积运算对图像邻域的像素灰度进行平均,从而达到减小图像中噪声影响、降低图像对比度的目的。

首先给出为图像增加噪声的代码。

# -*- coding:utf-8 -*-import cv2import numpy as np

#读取图片img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)rows, cols, chn = img.shape

#加噪声for i in range(5000): x = np.random.randint(0, rows) y = np.random.randint(0, cols) img[x,y,:] = 255

cv2.imshow("noise", img)
#等待显示cv2.waitKey(0)cv2.destroyAllWindows

均值滤波

均值滤波是指任意一点的像素值,都是周围N*M个像素值的均值。例如下图中,红色点的像素值为蓝色背景区域像素值之和除25。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

其中5*5的矩阵称为核,针对原始图像内的像素点,采用核进行处理,得到结果图像。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

2.代码

result = cv2.blur(原始图像,核大小)

代码如下所示:

#encoding:utf-8import cv2 import numpy as np import matplotlib.pyplot as plt
#读取图片img = cv2.imread('test01.png')source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#均值滤波result = cv2.blur(source, (5,5))
#显示图形titles = ['Source Image', 'Blur Image'] images = [source, result] for i in xrange(2): plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show

核设置为(10,10)和(20,20)会让图像变得更加模糊。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

方框滤波

result = cv2.boxFilter(原始图像, 目标图像深度, 核大小, normalize属性)

normalize属性表示是否对目标图像进行归一化处理。当normalize为true时需要执行均值化处理,当normalize为false时,不进行均值化处理,实际上为求周围各像素的和,很容易发生溢出,溢出时均为白色,对应像素值为255。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

代码如下所示:

#encoding:utf-8import cv2 import numpy as np import matplotlib.pyplot as plt
#读取图片img = cv2.imread('test01.png')source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#方框滤波result = cv2.boxFilter(source, -1, (5,5), normalize=1)
#显示图形titles = ['Source Image', 'BoxFilter Image'] images = [source, result] for i in xrange(2): plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show

下面是图像左上角处理前后的像素结果:

print(source[0:3, 0:3, 0])#[[115 180 106]# [ 83 152 72]# [ 55 58 55]]print(result[0:3, 0:3, 0])#[[92 90 78]# [92 89 77]# [82 80 72]]

输出结果如下图所示:

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

result = cv2.boxFilter(source, -1, (2,2), normalize=0)

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

为了克服简单局部平均法的弊端(图像模糊),目前已提出许多保持边缘、细节的局部平滑算法。它们的出发点都集中在如何选择邻域的大小、形状和方向、参数加平均及邻域各店的权重系数等。

高斯滤波让临近的像素具有更高的重要度,对周围像素计算加权平均值,较近的像素具有较大的权重值。如下图所示,中心位置权重最高为0.4。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

dst = cv2.GaussianBlur(src, ksize, sigmaX)

代码如下:

#encoding:utf-8import cv2 import numpy as np import matplotlib.pyplot as plt
#读取图片img = cv2.imread('test01.png')source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#高斯滤波result = cv2.GaussianBlur(source, (3,3), 0)

#显示图形titles = ['Source Image', 'GaussianBlur Image'] images = [source, result] for i in xrange(2): plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show

如果使用15*15的核,则图形将更加模糊。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

1.概念

如下图所示,将临近像素按照大小排列,取排序像素中位于中间位置的值作为中值滤波的像素值。

OpenCV主要调用medianBlur函数实现中值滤波。图像平滑里中值滤波的效果最好。

其中,src表示源文件,ksize表示核大小。核必须是大于1的奇数,如3、5、7等。

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

输出结果如下图所示:

Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波nerror="javascript:errorimg.call(this);">

希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。

原文链接:

一文带你看网络协议之因特网中的转发和编址!| 原力计划

头条和百度“大打出手”时,微信搜索去哪儿了?

干货 | 基于SRS直播平台的监控系统之实现思路与过程

挖矿仍然有利可图吗?

打赏
0相关评论
热门搜索排行
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:115904045
头条快讯网 版权所有
中国互联网举报中心