关于中值滤波

本文参考至这本书,不是打广告,是分享,真不错的书

中值滤波---用途是去掉图像中的噪点

原理,列如:依次选取图像3x3邻域内的9个像素的灰度,然后按照从小到大的顺序排列。

2 3 3 4 4 5 6 6 10

用中间值(第五个像素值)4代替上图红圈中的6,然后接着向右选取,依次选取图像3x3邻域内的9个像素的灰度,

然后按照从小到大的顺序排列。然后选取中间值,替换掉绿圈中的3。然后又接着向右移动替换,当然还有向下移动替换。

程序如下

/*
    中值滤波
  image_in  原图像指针
    image_out 滤波图像指针
    xsize     图像宽度
    ysize     图像高度
*/
int median_value(u8 c[9])//排序
{
    u8 i=0,j=0,buf=0;
    for(j=0;j<8;j++)
    {
        for(i=0;i<8;i++)
        {
            if(c[i+1]<c[i])
            {
                buf=c[i+1];
                c[i+1]=c[i];
                c[i]= buf;
            }
        }
    }
    return c[4];
}
void Median(u8 (*image_in)[image_line], u8 (*image_out)[image_line], int xsize, int ysize)
{
    u8 i=0,j=0;
    u8 c[9]={0};
    for(i = 0; i < ysize-1; i++)
    {
        for(j = 0; j < xsize-1; j++)
        {
            c[0]=*(*(image_in+i-1)+j-1);
            c[1]=*(*(image_in+i-1)+j);   //上
            c[2]=*(*(image_in+i-1)+j+1);

            c[3]=*(*(image_in+i)+j-1);
            c[4]=*(*(image_in+i)+j);      //中
            c[5]=*(*(image_in+i)+j+1);

            c[6]=*(*(image_in+i+1)+j-1);
            c[7]=*(*(image_in+i+1)+j);   //下
            c[8]=*(*(image_in+i+1)+j+1);
            *(*(image_out+i)+j) = median_value(c);
        }
    }
}

效果

去噪点前

去噪点后

时间: 2024-10-15 06:40:13

关于中值滤波的相关文章

基于Opencv的自适应中值滤波函数selfAdaptiveMedianBlur()

终于搞出来了:) #include <iostream> #include <opencv2/opencv.hpp> #include <vector> #include <algorithm> using namespace cv; using namespace std; //下面的宏,定义了在矩阵src的第m行.n列,ks*ks覆盖的矩形区域内的像素,并将像素压到矢量v中 //该覆盖区域的左上角坐标为(m,n),宽为ks,高为ks,要求src必须是单通

中值滤波讲解-Matlab

一.原理: 1:通过从序列中取出奇数个数(偶数也可)据进行排序 2:用排序后的中值,(若取数为偶数,则求中间两数的均值)来取代要处理的数据即可 二.除去高频波动分量和奇异点(即离基本分布点很远的噪点) 三.实例说明 图1-整体效果图 图2-局部效果图 四.代码说明 %中值滤波-Lab10 file='Datanog7'; x=importdata([file,'/A_x.txt']); subplot(2,1,1); plot(x); b=medfilt1(x,1000); subplot(2,

opencv中值滤波和低通滤波器对椒盐噪声处理的效果比较

opencv中值滤波和低通滤波器对椒盐噪声处理的效果比较 效果: 通过比较我们可以看出,中值滤波器有很好的保留了图像的边界信息 代码: void showimage(const std::string &str,const cv::Mat &image){ namedWindow(str,CV_WINDOW_AUTOSIZE); imshow(str,image); } Mat salt(const cv::Mat &image,int n){ Mat result = image

中值滤波与图像锐化

本文主要包括以下内容 中值滤波及其改进算法 图像锐化, 包括梯度算子.拉普拉斯算子.高提升滤波和高斯-拉普拉斯变换 本章的典型囊例分析 对椒盐噪声的平滑效果比较 Laplacian与LoG算子的锐化效果比较 中值滤波 中值滤波本质上是一种统计排序滤波器. 对于原图像中某点(i,j), 中值滤波以该点为中 心的邻域内的所有像素的统计排序中值作为(i, j) 点的响应. 中值不同于均值, 是指排序队列中位于中间位置的元素的值,例如=采用3x3 中值滤披 器, 某点.(i,j) 的8 个邻域的一系列像

高效中值滤波的方法及实现

中值滤波的原理很简单:就是用滑动窗口中灰度中值代替窗口中心像素的灰度值 高效中值滤波: 代码实现: //中值滤波 //窗口大小为width_Aperture*width_Aperture的正方形 void MedianBlur(const Mat &image_Src, Mat &image_Dst, int width_Aperture) { /////////////重新分配图像(如果需要)///////////////////// int width_Dst=image_Src.co

图像的中值滤波处理

#include<iostream>using namespace std;int main(){ int n,m,i,j,k,o,u,p,a[100][100],x[100][100],max[100][100][20],b[100][100]; cout<<"输入矩阵行列数:"<<endl; cin>>n>>m; cout<<"输入原图像的亮度矩阵:"<<endl; for(i=

数字图像处理之快速中值滤波算法

快速中值滤波算法 中值滤波算法: 在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪.中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声.这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能.观察窗口中的数值进行排序,位于观察窗中间的中值作为输出.然后,丢弃最早的值,取得新的采样,重复上面的计算过程.中值滤波是图像处理中的一个常用步骤,它对于斑点噪声和椒盐噪声来说尤其有用.保存边缘的特性使它在不希

高效中值滤波(采用copyMakeBorder处理边界像素)

修改了之前滤波中的中值滤波算法,采用copyMakeBorder处理边界像素 void MedianBlur(const Mat &image_Src, Mat &image_Dst, int width_Aperture) { /////////////////////////////重新分配图像(如果需要)///////////////////////////////////////////// int width_Dst=image_Src.cols; int height_Dst=

Atitit &#160;&#160;图像处理&#160;平滑&#160;也称&#160;模糊,&#160;归一化块滤波、高斯滤波、中值滤波、双边滤波)

Atitit   图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: 归一化块滤波器 (Normalized Box Filter) § 最简单的滤波器, 输出像素值是核窗口内像素值的 均值 ( 所有像素加权系数相等) § 高斯滤波器 (Gaussian Filter) § 最有用的滤波器 (尽管不是最快的). 高斯滤波是将输入数组的每一个像素点与 高斯

数字图像处理------中值滤波

一 中值滤波概念 中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[1]: 如:以3*3的领域为例求中值滤波中像素5的值 图1 1)int pixel[9]中存储像素1,像素2...像素9的值: 2)对数组pixel[9]进行排序操作: 3)像素5的值即为数组pixel[9]的中值pixel[4]. 中值滤波对处理椒盐噪声非常有效. 二 中值滤波代码实现 项目工程:https://github.com/ranjiewwen/Everyday_Prac