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

open cv均值 中值 高斯 双边高斯 滤波及模糊

/*
模糊与消噪

模糊原理(线性滤波)

●Smooth/Blur 是图像处理中最简单和常用的操作之一
●使用该操作的原因之一-就为了给图像预处理时候减低噪声
●使用Smooth/Blur操作其背后是数学的卷积计算
●通常这些卷积算子(kernel掩膜)计算都是线性操作 ,所以又叫线性滤波

降低噪点 OCR识别 特征提取 通过smooth让二值化对象提取更准确

归一化盒子滤波(均值滤波)
高斯滤波(能最大限度保留像素的质量与大小)

相关API
●均值模糊
x坐标 y坐标 中心像素的位置

  • blur(Mat src,IMat dst, Size(xradius, yradius), Point(-1,-1);

●高斯模糊(各像素权重不一样,按高斯分布)(类似于图像混合)
窗口大小 正态分布的情况

  • GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay);
    其中Size ( x,y) ,x, y必须是正数而且是奇数

filter2D也可以做模糊

https://blog.csdn.net/Vici__/article/details/102476784?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-9&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-9

中值滤波
●统计排序滤波器
●中值对椒盐噪声(白点和黑点)有 很好的抑制作用 噪声所在的位置叫做噪点

双边滤波(效果好)

●均值模糊无法克服边缘像素信息丢失缺陷。原因是均
值滤波是基于平均权重
●高斯模糊部分克服 了该缺陷,但是无法完全避免,因
为没有考虑像素值的不同
●高斯双边模糊- 是边缘保留的滤波方法,避免了边缘
信息丢失,保留了图像轮廓不变
空域核 值域和 保留值域

相关API
●中值模糊medianBlur ( Mat src, Mat dest, ksize )
●双边模糊bilateralFilter(src, dest, d=15, 150, 3);
15 计算的半径.半径之内的像数都会被纳入计算, 如果提供1则根据sgma space参数取值
150 sigma color决定多少差值之内的像素会被计算
3 sigma space如果d的值大于0刚声明无效。否则根据它来计算d值
中值模糊的ksize(卷积核)大小必须是大于1而且必须是奇数(偶数不好找中心像素)

*/

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <windows.h>

using namespace cv;
using namespace std;

int main()
{
	Mat src, dst, gsblur, zaoblur, shuangblur,ts1,ts2,ts3;
	src = imread("D:/实验台/机器视觉/测试图片/机器人正面.jpg");//以灰度图形式读取
	zaoblur = imread("D:/实验台/机器视觉/测试图片/机器人正面.jpg");
	if (!src.data)
	{
		cout << "加载失败" << endl;
		return -1;
	}
	char input[] = "原图";
	char output[] = "模糊";
	imshow(input,src);



	blur(src, dst, Size(11, 11), Point(-1, -1));        

	//均值模糊,参数分为为待处理图像,处理后图像
	//Size卷积模板x方向和y方向窗口的大小 核的大小 
	//只能为正的奇数,值越大,对应方向模糊程度越明显
	//模板中间像素位置一般固定为Point(-1,-1)
	imshow("blur均值模糊", dst);



	GaussianBlur(src, gsblur, Size(9, 9), 12, 12);            
	//高斯模糊,参数分别为待处理图像,处理后图像
	//卷积模板x方向和y方向窗口的大小
	//(只能为正的奇数,值越大,对应方向模糊程度越明显)
	//高斯公式的两个方向的sigma值(用来调节正态分布)
	//9,9表示x和y方向的方差,如果y=0则y方向的方差与x相等
	//12,12表示模糊的程度 差越大越模糊
	imshow("Gaussianblur高斯模糊",gsblur);

	
	medianBlur(src,src,3);//中值滤波  
	//src为待处理图像,dest为处理后图像,3(ksize)为卷积模板的大小
	//其值必须大于1且为奇数 这个数越大图片越模糊
	//namedWindow("中值滤波消噪", 0);
	imshow("中值滤波消噪medianBlur", src);

	/*配合掩膜有油画的感觉 可以增强简单的轮廓
	Mat kernel = (Mat_<char>(3, 3) << 0,-1, 0,
														  -1, 5, -1,
														   0, -1, 0);
	filter2D(zaoblur, zaoblur, zaoblur.depth(), kernel);
	*/


	//效果最好(高斯双边模糊+对比度提升)
	
	bilateralFilter(src,dst,15,30,3);//高斯双边模糊
	;//src为待处理图像,dst为处理后图像,
	//15为计算的半径,半径之内的像素都会被纳入计算(大小不影响滤波程度)
	//30为空间过滤器的sigma值 值越大 该像素领域中会有越宽广的颜色被混在一起(越大越模糊)
	//3为高斯分布的sigma值(若d的值大于0则声明无效,否则根据用它计算d值代替30
	imshow("双边高斯模糊", dst);


	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,
		-1, 5, -1,
		0, -1, 0);

	//filter2D(dst, dst, dst.depth(), kernel);
	//namedWindow("双边高斯模糊+对比度提升",0);
	//imshow("双边高斯模糊+对比度提升",dst);
	waitKey(0);
	return 0;
}

/*
对比:高斯滤波会保留像素原有的特征值,若原像素值很大
,根据高斯分布按权相加,越靠近中心权重越大,
待处理像素位置有最大的权值,经过高斯滤波仍会是一个较大的像素值
。而在均值滤波中,一个较大像素值周围都是小的像素值,平均后会变小,
所以均值模糊获得的图像会更模糊一些。

均值模糊 无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重。

高斯模糊 部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同。
例如边界处像素值差别会比较大,对其进行高斯滤波时,边界处像素值受周围像素值的影响较大。(虽然周围像素值所占权重较小,但也会受影响)

高斯双边模糊 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。(设定一个阈值,若周围像素值与其模板中心像素值的差值大于某一个阈值,不参与计算)利用双边滤波,可以消除微小差异,保留图像轮廓,类似磨皮的效果。

*/在这里插入图片描述

相关文章:

  • C语言运算符优先级
  • open cv膨胀与腐蚀
  • 浅谈外链因何而存在?
  • open cv形态学操作
  • 微软发布Surface平板电脑 再度挑战苹果
  • open cv提取水平线与垂直线
  • 用VBScript实现Zip解压缩目录中的所有文件
  • open cv图像上采样与下采样
  • C#中的Main方法
  • open cv阈值的基本操作
  • GridView 点击子View时设置子View的背景色为透明
  • open cv常见算子与自定义线性滤波
  • open cv边缘的处理
  • open cvSobel算子与Scharr算子
  • 如何学习一个新的PHP框架
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【comparator, comparable】小总结
  • gf框架之分页模块(五) - 自定义分页
  • Hibernate最全面试题
  • Python连接Oracle
  • vue--为什么data属性必须是一个函数
  • windows下使用nginx调试简介
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聊聊directory traversal attack
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我的业余项目总结
  • ​queue --- 一个同步的队列类​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #{} 和 ${}区别
  • ( 10 )MySQL中的外键
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)uboot源码分析
  • (三)终结任务
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • ... 是什么 ?... 有什么用处?
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .naturalWidth 和naturalHeight属性,
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 流——流的类型体系简单介绍
  • /boot 内存空间不够
  • /etc/fstab 只读无法修改的解决办法
  • @EnableWebMvc介绍和使用详细demo
  • [.NET]桃源网络硬盘 v7.4
  • [20160902]rm -rf的惨案.txt
  • [bzoj1324]Exca王者之剑_最小割
  • [codevs] 1029 遍历问题
  • [HCTF 2018]WarmUp (代码审计)
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [IE编程] IE8 新增的C++开发接口