图像处理:均值滤波算法

这篇具有很好参考价值的文章主要介绍了图像处理:均值滤波算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

概念介绍

基本原理

Opencv实现均值滤波

Python手写实现均值滤波

参考文章


前言

在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)。这在此基础上,我想更深入地研究和推导这些算法,以便为将来处理图像的项目打下基础。

概念介绍

均值滤波是一种简单的图像平滑处理方法,其基本思想是用像素点周围的邻域像素的平均值来代替该像素的值。在图像处理中,均值滤波可以用于去除图像中的噪声,使图像变得更加平滑。它的计算简单易懂,但在滤波过程中可能会导致图像细节的损失。因此,在实际应用中,需要根据具体的情况选择适合的滤波算法。

基本原理

我们以5x5大小为例,均值滤波的原理只需要理解到,它其实是将这个范围内的25个值进行求和的平均值,以这个新值来代替这个区域的中心值。

配合这里的图进行理解:

图像处理:均值滤波算法

 右图是经过左图进行均值变换后的值。

print((197+25+106+156+159+149+40+107+17+71+163+198+226+223+156+222+37+68+193+157+42+72+250+41+75)/25)

运行之后,获得新值126,覆盖掉中心值得像素226。

对于边缘像素,只仅仅计算在这个范围内得数值。

图像处理:均值滤波算法

假如,左上角为中心值,而其左边和上边都没有值,我们只需要计算在这5x5区域内有的值就可以了。

计算如下:

print((23+0+25+158+140+238+67+199+197)/9)

得出新值为116,替换中心点23的值。

Opencv实现均值滤波

def blur(src, ksize, dst=None, anchor=None, borderType=None):

在OpenCV中,我们可以使用cv2.blur()函数来实现均值滤波。在使用该函数时,我们需要输入原始图像、滤波核的大小以及边界样式等参数。一般情况下,我们可以直接采用函数默认值即可。

这里我拿的是我个人的一个使用情况来看待的,像锚点,边界样式这种,我基本上没有遇到要修改的情况,现在我们来看看滤波核的大小对图片的影响。

import cv2
import pyps.pyzjr.utility as zjr

path = 'Images/Colnoiselena.jpg'
img = cv2.imread(path)
imgAverage_1 = cv2.blur(img, (1, 1))
imgAverage_3 = cv2.blur(img, (3, 3))
imgAverage_5 = cv2.blur(img, (5, 5))
imgAverage_7 = cv2.blur(img, (7, 7))
imgStack = zjr.stackImages(0.6, ([imgAverage_1, imgAverage_3], [imgAverage_5, imgAverage_7]))
cv2.imshow("imges",imgStack)
cv2.waitKey(0)

实现效果:

图像处理:均值滤波算法

经典的lena的图片,可以看到,随着滤波核的大小逐渐增加,去噪效果越好,但相应的图片会变的模糊,计算时间会增长。所以,还是应了我开头就说过的话,在实际处理中,选择合适的滤波核大小,让模糊与去噪效果之间取得平衡。

pyps并不是什么第三方库,只是我集成在一起的函数文件,你无需在意。

Python手写实现均值滤波

import cv2
import numpy as np
import pyps.pyzjr.utility as zjr

path = 'Images/Colnoiselena.jpg'
img = cv2.imread(path)

def Arerage_Filtering(img, k_size=3):
    if k_size % 2 == 0:
        k_size += 1
    rows, cols = img.shape[:2]
    pad_width = (k_size - 1) // 2
    img_pad = cv2.copyMakeBorder(img, pad_width, pad_width, pad_width, pad_width, cv2.BORDER_REPLICATE)
    img_filter = np.zeros_like(img)
    for i in range(rows):
        for j in range(cols):
            pixel_values = img_pad[i:i+k_size, j:j+k_size].flatten()
            img_filter[i, j] = np.mean(pixel_values)

    return img_filter

imgAverage_1 = Arerage_Filtering(img,k_size=1)
imgAverage_3 = Arerage_Filtering(img,k_size=3)
imgAverage_5 = Arerage_Filtering(img,k_size=5)
imgAverage_7 = Arerage_Filtering(img,k_size=7)
imgStack = zjr.stackImages(0.6, ([imgAverage_1, imgAverage_3], [imgAverage_5, imgAverage_7]))
cv2.imshow("imges",imgStack)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像处理:均值滤波算法

这个算法相对来说比较容易实现,但是相比调用OpenCV的函数,它的计算时间要长很多,而且我这里还只考虑了图像的两个通道,最终输出的结果是灰度图的情况下。

下面是这个函数的具体实现过程:

  1. 首先,判断卷积核的大小是否为奇数,如果为偶数,则将其加1,确保其大小为奇数。
  2. 获取图像的行数和列数。
  3. 计算填充的宽度,即卷积核宽度的一半,用于处理图像边缘。
  4. 使用cv2.copyMakeBorder函数进行边缘填充,将图像的边缘复制并填充到周围,以防止边缘像素点无法进行卷积。
  5. 初始化一个和原始图像大小一样的零矩阵。
  6. 遍历图像中的每一个像素点,计算该像素点周围邻域内的像素值,并求取其平均值,然后将其赋值给零矩阵中的对应像素点。
  7. 返回处理后的图像。

最后,函数通过stackImages函数将处理后的四张图像以2x2的网格形式拼接成一张图像,并展示结果。

参考文章

(6条消息) 图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)_高斯滤波,均值滤波,中值滤波_夏天是冰红茶的博客-CSDN博客

(6条消息) 均值滤波(Mean filtering)_半濠春水的博客-CSDN博客

(7条消息) Opencv之图像滤波:2.均值滤波(cv2.blur)_Justth.的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-422844.html

到了这里,关于图像处理:均值滤波算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】【图像处理】均值滤波 and 高斯滤波 and 中值滤波 (低通滤波器)and Sobel算子边缘提取算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)

     中值滤波: 中值滤波中的MidValueFind函数的实现就是冒泡排序,最后去中间值返回:  Soble算子边缘提取:     总结: 1、均值、高斯滤波和Sobel算子边缘提取的核心,创建卷积核并确定各个点上的权重,然后将边缘灰度级归零(是否边缘归零按业务需求决定),提取非边缘像

    2024年02月05日
    浏览(56)
  • 数字图像处理(七)均值滤波

    题目:使用均值滤波器对图像进行滤波。 采用国际标准测试图像Lena。 3*3的均值滤波器定义如下: c++代码: 结果展示: 均值滤波器的特点: 计算均值会将图像中的边缘信息和特征信息模糊掉,丢失很多特征,使得景物的清晰度降低,画面变得模糊。对于高斯噪声,当滤波器

    2024年02月11日
    浏览(91)
  • Matlab图像处理-均值滤波

    均值滤波 均值滤波所使用的运算是卷积。均值滤波用邻域内像素的平均值来代替中心像素的值,相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。 在 MATLAB 中,可使用 imfilter 函数 来实现线性空间滤波,该函数的语法如下 : J = imfilter ( I,w,filtering_mode,bound

    2024年02月06日
    浏览(44)
  • ZYNQ图像处理(6)——均值滤波和中值滤波

    首先要做的是最简单的均值滤波算法。均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围 8 个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像

    2024年02月08日
    浏览(53)
  • python --opencv图像处理滤波详解(均值滤波、2D 图像卷积、方框滤波、 高斯滤波、中值滤波、双边滤波)

    第一件事情还是先做名词解释,图像平滑到底是个啥? 从字面意思理解貌似图像平滑好像是在说图像滑动。 emmmmmmmmmmmmmmm。。。。 其实半毛钱关系也没有,图像平滑技术通常也被成为图像滤波技术(这个名字看到可能大家会有点感觉)。 每一幅图像都包含某种程度的噪声,

    2024年02月04日
    浏览(64)
  • 图像处理中调用matlab自带均值滤波、高斯滤波和中值滤波函数的案例以及自编均值滤波的案例。

    @[TOC](利用matlab自带均值滤波器的代码,分别对一幅图像实现3*3,5*5,7*7,9*9的均值滤波,并对实验结果进行分析。) @[TOC](分别给干净图像添加高斯和椒盐噪声,然后进行均值滤波、高斯滤波和中值滤波,并对实现结果进行分析。) @[TOC](自编均值滤波器对一幅图像实现填充后,

    2024年02月11日
    浏览(41)
  • FPGA图像处理仿真实验——均值滤波(FIFO)

            之前的博客中用shift ram做的均值滤波,那篇文章里讲了原理,在这里不进行重复。考虑到shift ram的深度有限,在处理高分辨率图片时可能会收到限制,所以这次采用FIFO来进行均值滤波。FIFO可以看成是一个先进先出的堆栈,有两个独立的读使能信号和写使能信号,

    2024年02月13日
    浏览(40)
  • 【图像处理OpenCV(C++版)】——5.3 图像平滑之均值平滑(滤波)

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月04日
    浏览(48)
  • opencv 30 -图像平滑处理01-均值滤波 cv2.blur()

    图像平滑处理(Image Smoothing)是一种图像处理技术,旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像,以便在后续图像处理任务中获得更好的结果。 常用的图像平滑处理方法包括: 均值滤波(Mean Filtering) :用图像中像素周围区域的平

    2024年02月01日
    浏览(57)
  • 图像平滑处理-卷积函数filter2D详解及均值滤波案例

    图像平滑处理-卷积函数filter2D详解及均值滤波案例 图像处理是计算机视觉中的重要分支。在图像处理中,平滑滤波是一项基本任务。平滑滤波可以消除图像中的噪声和细节,使其更加平滑和清晰。OpenCV-Python是一个常用的图像处理库,它提供了各种图像处理函数和算法。这里

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包