iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何实现中值滤波
  • 877
分享到

C++如何实现中值滤波

2023-06-30 13:06:53 877人浏览 独家记忆
摘要

这篇文章主要介绍了c++如何实现中值滤波的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现中值滤波文章都会有所收获,下面我们一起来看看吧。中值滤波器是一种非线性滤波器,或者叫统计排序滤波器。适用对象:

这篇文章主要介绍了c++如何实现中值滤波的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现中值滤波文章都会有所收获,下面我们一起来看看吧。

中值滤波器是一种非线性滤波器,或者叫统计排序滤波器。

适用对象:带椒盐噪声的图像

由于椒盐噪声像素值与原图像素值没有关联,随机性较大,因此使用中值滤波可有效滤掉噪声。

中值滤波需要对像素值进行排序,因此首先写一个冒泡排序算法

冒泡排序实现:

为提高效率加入标志位flag,当第i次寻找最大值时,如果相邻两个数均未发生互换,此时flag位为false,即说明此时数组已经按照递增排列,可提前终止。此处应该注意flag=false所在位置,因为需要保证第i次寻找最大值过程中,遍历到所有未参与排列的数据,所以flag=false应该放在循环条件for(int j=0; j<len-1-i; j++)的外部。

void bubble(std::vector<int> &arr, int len){    bool flag = true;    for (int i = 0; i < len-1; i++)    {        while (flag)        {            flag = false;            for (int j = 0; j < len - i - 1; j++)            {                                if (arr[j + 1] < arr[j])                {                    flag = true;  //只要发生一次交换就继续判断                    int temp = arr[j + 1];                    arr[j + 1] = arr[j];                    arr[j] = temp;                }            }        }    }    }

中值滤波的实现:

需要注意的主要问题:

为了能够遍历到原图的边界,需要对原图进行边界扩充,扩充长度为(窗口的长度-1)/ 2。
注意利用窗口对扩充后的图像遍历时,起始的位置不是0,而是扩充的长度,因为这时对应的才是原图的第一个像素点,同理结束的位置也是原图的最后一个像素点。
另外为了方便将窗口内对应的像素存到容器中,可以写两个循环,循环长度为窗口的长度与宽度,依次将像素值存入容器中。
最后对容器内的像素按照递增排列后,取中值赋给目标矩阵相应的位置,而此时的位置也应该用i-h,对应扩充前的位置。
经实践证明我写的这两个算法可有效使用。

void medianFilter(cv::Mat& src, cv::Mat& dst, cv::Size width){    //判断窗口是否为奇数    if (width.width % 2 == 0 || width.height % 2 == 0)    {        std::cout << "输入窗口大小应该为奇数,请重新输入" << endl;        exit(-1);    }    else    {        //计算边界扩充长度        int h = (width.height - 1) / 2;        int w = (width.width - 1) / 2;         //对原图边界扩充        cv::Mat src_border;        cv::copyMakeBorder(src, src_border, h, h, w, w, cv::BORDER_REFLECT_101);        for (int i = h; i < src.rows + h; i++)        {             for (int j = w; j < src.cols + w; j++)            {                //定义容器存放窗口对应的像素                std::vector <int> v;                for (int ii = i - h; ii <= i + h; ii++)                {                    for (int jj = j - w; jj <= j + w; jj++)                    {                         v.push_back(src_border.at<uchar>(ii, jj));                    }                }                //对容器内存放的像素排序                int len = width.area();                bubble(v, len);                //将中值赋给目标图像对应位置                dst.at<uchar>(i-h, j-w) = v[(len - 1) / 2];                            }        }            } }

关于“C++如何实现中值滤波”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++如何实现中值滤波”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++如何实现中值滤波

本文链接: https://www.lsjlt.com/news/329247.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++如何实现中值滤波
    这篇文章主要介绍了C++如何实现中值滤波的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现中值滤波文章都会有所收获,下面我们一起来看看吧。中值滤波器是一种非线性滤波器,或者叫统计排序滤波器。适用对象:...
    99+
    2023-06-30
  • Python 实现中值滤波、均值滤波
    Python图形界面实现中值滤波、均值滤波 红包: Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 @author: D...
    99+
    2023-01-31
    中值 均值 Python
  • openCV中值滤波和均值滤波的代码实现
    目录一.均值滤波二.中值滤波 在开始我们今天的博客之前,我们需要先了解一下什么是滤波: 首先我们看一下图像滤波的概念。图像滤波,即在尽量保留图像细节特征的条件下对目标图像的...
    99+
    2024-04-02
  • C++实现中值滤波的示例代码
    目录冒泡排序实现:中值滤波的实现:为了加深对中值滤波算法的理解以及方便以后更好的复习,我将该算法的一些重点细节和实现过程踩过的坑记录下来。 中值滤波器是一种非线性滤波器,或者叫统计排...
    99+
    2024-04-02
  • python实现对图片进行均值滤波、中值滤波、高斯滤波处理及其原理和特点
    1.高斯滤波         1)原理:对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值。         2)特点:对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。         3)代码 import ...
    99+
    2023-10-18
    python 开发语言
  • OpenCV实现图像滤波之双边滤波
    本文实例为大家分享了opencv实现双边滤波的具体代码,供大家参考,具体内容如下 1、2D卷积 #!/usr/bin/env python3 # -*- coding: utf-...
    99+
    2024-04-02
  • C++实现OpenCV方框滤波的代码
    一、方框滤波    方框滤波是均值滤波的一种形式。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和的均值,而在方框滤波中,可以自由...
    99+
    2024-04-02
  • OpenCV实现可分离滤波
    自定义滤波 无论是图像卷积还是滤波,在原图像上移动滤波器的过程中每一次的计算结果都不会影响到后面过程的计算结果,因此图像滤波是一个并行的算法,在可以提供并行计算的处理器中可以极大的加...
    99+
    2024-04-02
  • C++ OpenCV实现boxfilter方框滤波的方法详解
    目录box filter简单解释1. 暴力实现——四循环2. 行列分离3. 行列分离优化版代码box filter简单解释 box filter的作用很简单,...
    99+
    2022-11-13
    C++ OpenCV boxfilter盒式滤波 C++ boxfilter盒式滤波 C++ 盒式滤波
  • OpenCV实现双边滤波算法
    本文实例为大家分享了OpenCV实现双边滤波算法的具体代码,供大家参考,具体内容如下 一、双边滤波 双边滤波是一种综合考虑滤波器内图像空域信息和滤波器内图像像素灰度值相似性的滤波算法...
    99+
    2024-04-02
  • C++ opencv图像平滑滤波器如何使用
    这篇文章主要介绍“C++ opencv图像平滑滤波器如何使用”,在日常操作中,相信很多人在C++ opencv图像平滑滤波器如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++&n...
    99+
    2023-06-30
  • python opencv图像的高通滤波和低通滤波怎么实现
    这篇文章主要介绍“python opencv图像的高通滤波和低通滤波怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python opencv图像的高通滤波和低通滤波怎么实...
    99+
    2023-07-02
  • matlab如何调用滤波器
    在MATLAB中,可以使用filter函数来调用滤波器。filter函数的语法如下:y = filter(b, a, x)其中,b是...
    99+
    2023-10-08
    matlab
  • Opencv实现联合双边滤波
    本文实例为大家分享了Opencv实现联合双边滤波的具体代码,供大家参考,具体内容如下 1.介绍 双边滤波是一种可以保边去噪的滤波器,主要是因为它的核比较特殊,公式(1)为它的调用公式...
    99+
    2024-04-02
  • 卡尔曼滤波的Python实现
    为了在Python编程环境下实现卡尔曼滤波算法,特编写此程序 主要用到了以下3个模块 numpy(数学计算)pandas(读取数据)matplotlib(画图展示) 代码的核心是实现了一个Kf_Params类,该类定义了卡尔曼滤波算法的相关...
    99+
    2023-09-11
    python
  • Python如何实现直方图、均衡化、高斯滤波
    这篇文章将为大家详细讲解有关Python如何实现直方图、均衡化、高斯滤波,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python直方图、均衡化、高斯滤波测试原图直方图基本原理matplotlib库绘制直...
    99+
    2023-06-08
  • python OpenCV 实现高斯滤波详解
    目录一、高斯滤波二、C++代码三、python代码四、结果展示1、原始图像2、5x5卷积3、9x9卷积一、高斯滤波    高斯滤波是一种线性平滑滤波,适用于消...
    99+
    2024-04-02
  • python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
    python-opencv 中值滤波{cv2.medianBlur(src, ksize)} 中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的 中值 代替 。与...
    99+
    2024-04-02
  • Python如何实现过滤掉列表中唯一值
    小编给大家分享一下Python如何实现过滤掉列表中唯一值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、filter_uniquefrom colle...
    99+
    2023-06-25
  • python怎么实现图像简单滤波
    这篇文章主要介绍“python怎么实现图像简单滤波”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么实现图像简单滤波”文章能帮助大家解决问题。引言对图像进行滤波,可以有两种效果:一种是平...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作