图像处理:均值滤波算法

news2024/11/14 17:31:19

目录

前言

概念介绍

基本原理

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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4月23号软件更新资讯合集.....

微软发布 Web 渲染引擎 Babylon.js 6.0 Babylon.js 是一个强大、简单、开放的游戏和 Web 渲染引擎,并被封装在一个友好的 JavaScript 框架中。 Babylon.js 6.0 带来了性能改进、渲染增强和一系列新功能。 新物理插件 Havok 团队通过一个特殊的新 WASM 插件和对 Ba…

sar基本命令格式操作及使用方法学习笔记

目录 SAR说明Centos7安装Sar命令sar命令显示时间改为24小时制查询某天某个时间段内的数据 SAR说明 sar是一个采集,报告和存储计算机负载信息的工具。自下载安装好后每10分钟对系统性能进行一次采集,每天的日志文件保存再/var/log/sa/下,sa17…

Docker 部署Redis

由于项目需要,上了redis。公司用的是OKD4.x,所以在自己的环境上也直接上docker,比下载、编译、安装省心多了。 1、下载镜像 官网地址:https://hub.docker.com/_/redis 我选择的是docker pull redis:7.0-bullseye 具体版本号的含…

Web3D包装生产线 HTML5+Threejs(webgl)开发

生产线三维可视化解决方案就是通过物联网、虚实联动和三维建模等先进技术,以一个3D立体模型展现出来,可以让我们很直观的看到生产线的运作以及对数据的监控。3D运用数据孪生技术可以让工业3D物联网管理系统的界面变得非常的简单易看,并且能够…

软件测试的新技术和方法

作为一位资深的IT领域博主,我一直在关注软件测试领域的发展趋势。随着技术的不断发展,软件测试领域也在不断更新换代。在本文中,我将分享一些最新的软件测试技术和方法,希望能对广大软件测试工程师提供一些参考。 一、自动化测试…

【教程】保姆级红米AX6000刷UBoot和OpenWrt固件

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 开启SSH 刷入UBoot 刷入Openwrt 设置Openwrt 刷回小米原厂固件 开启SSH 1、下载官方指定版本固件:https://share.qust.me/redmi-ax6000-1.2.8.bin 2、进入路由器后台升级固件:h…

Nginx +Tomcat 负载均衡,动静分离集群

介绍 通常情况下,一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等情况,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案 Nginx 是一款非常优秀的http服务软件,它能够支持高达 50000 个并发…

IndexedDB的包装器JsStore - 分页功能

JsStore是IndexedDB的包装器。它提供了简单的SQL像api,这是容易学习和使用。IndexedDb查询可以在web worker内部执行,JsStore通过提供一个单独的worker文件来保持这种功能。 由于之前使用IndexedDB时,提供api不太丰富,就自己写了一…

Ubuntu2204安装pycharm社区版

最近在学习人工智能相关的知识,比较流行的开源框架对windows操作系统的支持并不太友好,因此把学习测试的环境搭在了Ubuntu2204上。一开始我都是在win10系统中的pycharm上写python代码,然后再上传到Ubuntu2204中运行测试,这么做降低…

GIS基础概念与开发实践

GIS的应用价值 呈现、还原、规划空间信息数据挖掘、统计分析等等 Q:这么多软件可以做GIS,但是格式又不一样,怎么办?这普需要一个标准的出现。 GIS标准:OGC标准 不同GIS软件对空间数据定义和存储结构不同&#xff0…

远程访问及控制ssh

SSH远程管理 OpenSSH服务器 SSH(Secure Shell) 协议 是一种安全通道协议。主要用来实现字符界面的远程登录、远程复制等功能。对通信数据进行了加密处理,用于远程管理其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性------------(同样…

C嘎嘎~~ 【初识C++ 下篇】

初识C 下篇 1.引用1.1引用的概念1.2引用的特点1.3常引用1.4引用使用的场景1.5引用和指针的区别 2.指针空值 --- nullptr3.内联函数3.1 内联函数的概念3.2内联函数的使用场景3.3内联函数的特性 1.引用 1.1引用的概念 相信大家小时候, 肯定有小名、绰号、亲朋好友的昵…

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

导读: MOKA 主要有两大业务线 MOKA 招聘(智能化招聘管理系统)和 MOKA People(智能化人力资源管理系统),MOKA BI 通过全方位数据统计和可灵活配置的实时报表,赋能于智能化招聘管理系统和人力资源…

scratch甲壳虫走迷宫 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年3月

目录 scratch甲壳虫走迷宫 一、题目要求 1、准备工作 2、功能实现 二、案例分析

ESP32学习二-环境搭建(ESP-IDF V5.0,Ubuntu18.4)

一、准备事项 Ubuntu 18.04.5。具体安装可以参考如下链接。使用VMware安装Ubuntu虚拟机和VMware Tools_t_guest的博客-CSDN博客 乐鑫官方也提供了安装的相关操作。有兴趣可以参考。 快速入门 - ESP32 - — ESP-IDF 编程指南 v5.0.1 文档 注:提前说明,因…

Android权限描述

问题 我们常常在写apk的时候申请一些相关权限。想知道每个权限的作用&#xff0c;可以查询权限声明的地方。 1、三方页面&#xff1a; https://manifestdestiny.reveb.la/ 2、源码注释 /frameworks/base/core/res/AndroidManifest.xml <!-- SystemApi TestApi Allows a…

部署 Exsi 7.0.3

文章目录 1. 下载介质2. u盘引导安装启动盘3. 硬件连接4. 安装 EXSI 7.0.3 1. 下载介质 下载 VMware-VMvisor-Installer-7.0U3l-21424296.x86_64.iso 安装 EXSI 7.0.3 可参考: https://www.dinghui.org/vmware-iso-download.html 2. u盘引导安装启动盘 工具 https://www.v…

fitlog使用教程(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 fitlog包是用于自动版本管理和自动日志记录的Python包&#xff0c;是fastNLP团队开发的。 fitlog 中文文档 — fitlog 文档 他们团队的文档写的真的不行&#xff0c;崩溃&#xff0c;FastNLP也很难用&#xff0c;fitlog也很难用&#xff0c;中…

数据库系统概论--第四章课后习题

1.什么是数据库的安全性&#xff1f; 答&#xff1a; 数据库安全&#xff0c;是指以保护数据库系统、数据库服务器和数据库中的数据、应用、存储&#xff0c;以及相关网络连接为目的&#xff0c;是防止数据库系统及其数据遭到泄露、篡改或破坏的安全技术。 数据库安全与一般应…

超级国际象棋:第二个里程碑已完成

获取Cartesi资助的项目的最新进展&#xff0c;现在将完全去中心化的Web3国际象棋带到你的手中 “Ultrachess是一个完全基于区块链的国际象棋应用程序&#xff0c;由Cartesi Rollup技术支持&#xff0c;允许用户将真实价值投入到比赛中&#xff0c;不仅仅是他们的Elo分数。 此…