OpenCV学习笔记(九)谈谈中值滤波无效性
来源:互联网 发布:sql 关键字 顺序 编辑:程序博客网 时间:2024/05/17 20:25
谈谈中值滤波无效性:
不谈线性滤波,实用性不大,基本没用。
中值滤波的简单在于选择灰度值的中值来替代该像素点的灰度值,该方法去除椒盐噪声,还勉强可以。但对绝大部分图像来说,不合适。但是比起线性滤波来说,优势还是蛮大的。单单从消除噪声来说和保边来说,更胜一筹。
但是对于细节图像来说,就显得捉襟见肘了。这也是在处理细节图像上,不建议使用中值滤波的原因。
下面就验证一下,先生成高斯噪声,用中值滤波看看效果:
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <cstdlib>#include <cmath>#include <limits>#include <iostream>using namespace cv;using namespace std;double generateGaussianNoise(double mu, double sigma){//定义一个特别小的值const double epsilon = numeric_limits<double>::min();//返回目标数据类型能表示的最逼近1的正数和1的差的绝对值static double z0, z1;static bool flag = false;flag = !flag;//flag为假,构造高斯随机变量if (!flag)return z1*sigma + mu;double u1, u2;//构造随机变量do{u1 = rand()*(1.0 / RAND_MAX);u2 = rand()*(1.0 / RAND_MAX);} while (u1 <= epsilon);//flag为真构造高斯随机变量Xz0 = sqrt(-2.0*log(u1))*cos(2 * CV_PI * u2);z1 = sqrt(-2.0*log(u1))*sin(2 * CV_PI * u2);return z0*sigma + mu;}Mat addGaussianNoise(Mat& srcImage){Mat resultImage = srcImage.clone(); //深拷贝,克隆int channels = resultImage.channels(); //获取图像的通道int nRows = resultImage.rows; //图像的行数int nCols = resultImage.cols*channels; //图像的总列数//判断图像的连续性if (resultImage.isContinuous()) //判断矩阵是否连续,若连续,我们相当于只需要遍历一个一维数组 {nCols *= nRows;nRows = 1;}for (int i = 0; i < nRows; i++){for (int j = 0; j < nCols; j++){//添加高斯噪声int val = resultImage.ptr<uchar>(i)[j] + generateGaussianNoise(2, 0.8) * 32;if (val < 0)val = 0;if (val > 255)val = 255;resultImage.ptr<uchar>(i)[j] = (uchar)val;}}return resultImage;}int main(){Mat srcImage = imread("D:\\1.jpg");imshow("srcImage", srcImage);Mat resultImage1 = addGaussianNoise(srcImage);Mat resultImage2;medianBlur(resultImage1, resultImage2, 7);imshow("resultImage1", resultImage1);imshow("resultImage2", resultImage2);waitKey(0);return 0;}
看到了吧,常用的中值滤波,也叫做模糊。
2 0
- OpenCV学习笔记(九)谈谈中值滤波无效性
- 我的OpenCV学习笔记(九):空域滤波之中值滤波
- 学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记
- OpenCV学习笔记(十):非线性滤波:中值滤波、双边滤波
- 我的OpenCV学习笔记(1):空域滤波之中值滤波
- OpenCV学习笔记(九):线性滤波:方框滤波、均值滤波、高斯滤波
- OpenCV之九 非线性滤波专场:中值滤波、双边滤波
- Opencv学习:非线性滤波:中值滤波、双边滤波
- opencv学习之中值滤波和双边滤波
- opencv中值滤波-双边滤波
- OpenCV中值滤波
- OPENCV中值滤波
- 中值滤波 opencv
- OpenCV—中值滤波
- 6.4OpenCV中值滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- linux安装和配置nginx
- Java Tomcat SSL 服务端/客户端双向认证(一)
- 关于phpcms v9 如何在首页调用单网页面内容的代码
- SGL系列 LED调光电路设计 ANBOZ
- 像“匠人”一样做一名程序员
- OpenCV学习笔记(九)谈谈中值滤波无效性
- 帮学生做两道笔试题
- spark持久化(缓存)
- ubuntu搭建git服务器教程及常见问题
- Mysql 开启慢查询
- 数据构造之存储过程
- sql性能调优
- cocoaPods执行update时候报错 error: RPC failed; curl 56 SSLRead() return error -36
- 匿名内部类的使用