当前位置: 首页 > news >正文

什么叫图像的中值滤波,并附利用OpenCV和MATLB实现均值滤波的代码

图像的中值滤波(Median Filtering)是一种非线性数字滤波技术,常用于图像处理以减少噪声,同时保留图像边缘细节。其基本思想是用图像中某个窗口内像素的中值替代该窗口中心像素的值。具体步骤如下:

  1. 选择窗口:定义一个窗口(也称为滤波器或核),通常为3x3、5x5或7x7的方形矩阵。窗口的大小可以根据需要调整。

  2. 移动窗口:将窗口滑动到图像中的每一个像素点,使得每次窗口覆盖一个像素和其周围的像素。

  3. 排序并取中值:对于窗口内的所有像素值进行排序,然后选择排序后的中值。这一步是中值滤波的核心。

  4. 替换中心像素:用排序后的中值替代窗口中心像素的值。

  5. 重复:对图像中的每一个像素重复上述步骤,直到整个图像都经过滤波处理。

示例

假设有一个3x3的窗口,中心像素值为125,周围像素值如下:

[100, 102, 104]
[120, 125, 130]
[135, 140, 150]
  1. 排序:将窗口内的所有像素值排序得到:[100, 102, 104, 120, 125, 130, 135, 140, 150]
  2. 取中值:排序后的中值是125
  3. 替换中心像素:将中心像素值(125)替换为中值(125)

优点

  • 噪声抑制:中值滤波对抑制椒盐噪声(salt-and-pepper noise)特别有效。
  • 保留边缘:相比于均值滤波,中值滤波更能保留图像的边缘细节,不会模糊图像的边缘。

缺点

  • 计算复杂度较高:中值滤波需要对窗口内的像素值进行排序,计算量较大。
  • 边界处理:在处理图像边缘像素时,窗口可能超出图像范围,需要特殊处理,如填充边界。

中值滤波是一种常用的图像处理技术,广泛应用于去噪声、图像增强等领域。

下面是使用OpenCV实现中值滤波的C++代码:

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat src = cv::imread("image.jpg", cv::IMREAD_COLOR);if (src.empty()) {std::cerr << "无法读取图像文件!" << std::endl;return -1;}// 应用中值滤波cv::Mat dst;int kernel_size = 5; // 滤波器大小cv::medianBlur(src, dst, kernel_size);// 显示结果cv::imshow("原始图像", src);cv::imshow("中值滤波后的图像", dst);cv::waitKey(0);// 保存结果图像cv::imwrite("median_filtered.jpg", dst);return 0;
}

使用OpenCV和MATLAB实现中值滤波的代码见本博文原文,链接:
https://www.hhai.cc/thread-247-1-1.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Go 初始化一个字典
  • Android人脸解锁源码解析
  • el-table 动态添加删除 -- 鼠标移入移出显隐删除图标
  • 2024前端面试题之Vue3
  • 【面试题】防火墙的部署模式有哪些?
  • 3D问界-深入理解骨骼绑定与蒙皮绑定在三维动画中的角色
  • 从数据仓库到数据湖(下):热门的数据湖开源框架
  • NAS 必备导航页 Homarr 可视化配置 布局简单且美观
  • 将swagger注解导入apifox的IDEA配置
  • Docker 部署 Nginx 并在容器内配置申请免费 SSL 证书
  • 如何隐藏 Ubuntu 顶部状态栏
  • 时间轮算法理解、Kafka实现
  • 数列分块<1>
  • vs2017/2019串口Qt Serial Port/modbus使用报错
  • 将vue项目整合到springboot项目中并在阿里云上运行
  • hexo+github搭建个人博客
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【EOS】Cleos基础
  • Apache的80端口被占用以及访问时报错403
  • C学习-枚举(九)
  • Django 博客开发教程 8 - 博客文章详情页
  • Linux后台研发超实用命令总结
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • RxJS: 简单入门
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue.js-Day01
  • 成为一名优秀的Developer的书单
  • 多线程事务回滚
  • 聚簇索引和非聚簇索引
  • 蓝海存储开关机注意事项总结
  • 模型微调
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 小而合理的前端理论:rscss和rsjs
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 国内开源镜像站点
  • ​iOS实时查看App运行日志
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (23)Linux的软硬连接
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (vue)页面文件上传获取:action地址
  • (力扣)1314.矩阵区域和
  • (十八)Flink CEP 详解
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)Linux Shell编程——输入输出重定向
  • (转)ABI是什么
  • (转)菜鸟学数据库(三)——存储过程
  • (转)大型网站的系统架构
  • (转)可以带来幸福的一本书
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .form文件_一篇文章学会文件上传
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复