opencv几种滤波器介绍

前言:

因为平时能用到各种滤波器,但是对各种滤波器效果并不清楚,现在准备把逐渐能用到的滤波器写下来,方便自己以后查阅。

1.中值滤波

中值滤波器是一种非线性滤波器,常用于消除图像中的椒盐噪声。与低通滤波不同的是,中值滤波有利于保留边缘的尖锐度,但它会洗去均匀介质区域中的纹理。

适用于椒盐噪声

      椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。对于彩色图像,则表现为在单个像素BGR三个通道随机出现的255与0,如下图所示。

中值滤波原理

        在输入图像x(n1, n2)中,以任一像素为中心设置一个确定的邻域AA的边长为2N+1,(N=0,1,2,…)。将邻域内各像素的强度值按大小顺序排列,取位于中间位置的那个值(中值)作为该像素点的输出值,遍历整幅图像就可完成整个滤波过程:A=x(i,j),  y=Med{ x1, x2, x3,…,x2N+1}。

函数
void medianBlur( InputArray src, OutputArray dst,int ksize );
参数
src — 输入图像
dst — 输出图像, 必须与 src 相同类型
ksize — 内核大小 (只需一个值,因为使用正方形窗口),必须为奇数。

《opencv几种滤波器介绍》
《opencv几种滤波器介绍》

代码

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

//盐噪声
void salt(Mat&image, int n) {
	int i,j;
	for (int k=0; k<n/2; k++) {

		// rand() is the random number generator
		i = rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22
		j = rand()%image.rows; 

		if (image.type() == CV_8UC1) { // gray-level image

			image.at<uchar>(j,i)= 255; //at方法需要指定Mat变量返回值类型,如uchar等

		} else if (image.type() == CV_8UC3) { // color image

			image.at<Vec3b>(j,i)[0]= 255; //Vec3b为opencv定义的一个3个值的向量类型
			image.at<Vec3b>(j,i)[1]= 255; //[]指定通道,B:0,G:1,R:2
			image.at<Vec3b>(j,i)[2]= 255; 
		}
	}
}
//椒噪声
void pepper(Mat &image, int n) {
	int i,j;
	for (int k=0; k<n; k++) {

		// rand() is the random number generator
		i = rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22
		j = rand()%image.rows; 

		if (image.type() == CV_8UC1) { // gray-level image

			image.at<uchar>(j,i)= 0; //at方法需要指定Mat变量返回值类型,如uchar等

		} else if (image.type() == CV_8UC3) { // color image

			image.at<Vec3b>(j,i)[0]= 0; //Vec3b为opencv定义的一个3个值的向量类型
			image.at<Vec3b>(j,i)[1]= 0; //[]指定通道,B:0,G:1,R:2
			image.at<Vec3b>(j,i)[2]= 0; 
		}
	}
}
int main()
{   Mat pepper_salt,medianBl;
    Mat img = imread("D://vvoo//1.jpg");
	img.copyTo(pepper_salt);
	medianBl=Mat::zeros(img.rows,img.cols,img.type());
	salt(pepper_salt,2000);
	pepper(pepper_salt,2000);
	medianBlur(pepper_salt,medianBl,3);


	imshow("img",img);
	imshow("pepper_salt",pepper_salt);
	imshow("medianBl",medianBl);
    waitKey(0);  
    return 0;
}


    原文作者:五仁月饼哭了
    原文地址: https://blog.csdn.net/qq_29540745/article/details/72899270
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞