OpenCV中导向滤波介绍与应用
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
导向滤波介绍
导向滤波是使用导向图像作为滤波内容图像,在导向图像上实现局部线性函数表达,实现各种不同的线性变换,输出变形之后的导向滤波图像。根据需要,导向图像可以跟输入图像不同或者一致。假设I是导向图像、p是输入图像、q是导向滤波输出图像,导向滤波是作为局部线性模型描述导向图像I与输出图像q之间的关系。
导向滤波算法实现的一般步骤为:
读取导向图像I与输入图像P
输入参数 与 其中 表示窗口半径大小,单位是像素, 表示模糊程度
积分图计算I的均值与方差、输入图像的均值以及I与P的乘积IP
计算线性相关因子a与b
a=(IP-meanImeanP)/(Var_I+ )
b=meanP-ameanI
计算a与b的均值
使用均值得到导向滤波结果Q=meana*I+meanb
导向滤波最常用四个功能是:
边缘保留滤波
图像去噪声
图像边缘羽化
图像增强(对比度)
OpenCV中导向滤波函数
由于导向滤波计算均值与方差可以通过积分图查找快速得到,因此导向滤波的速度会很快,作为边缘保留滤波它比双线性滤波有明显的速度优势,OpenCV中在扩展模块ximgproc中实现了图像的导向滤波函数,相关API函数与参数解释如下:
void cv::ximgproc::guidedFilter ( InputArray guide,// 导向图像InputArray src,// 输入下OutputArray dst,//导向滤波输出int radius,//窗口半径大小double eps,// 模糊程度int dDepth = -1// 输出图像深度
)
eps值越大图像模糊程度越大、半径radius值越大图像模糊程度越高。
代码演示
通过代码演示了导向滤波根据输入的导向图像不一样分别实现了图像滤波的边缘保留、去噪声、羽化、对比度提升功能。完整的演示代码如下:
#include <opencv2/opencv.hpp>
#include <opencv2/ximgproc.hpp>
#include <iostream>
using namespace cv;
using namespace cv::ximgproc;
using namespace std;
void guide_demo(Mat &guide, Mat &input, int r, double e);
void enhance_demo(Mat &guide, Mat &input, int r, double e);
int main(int argc, char** argv) {Mat src = imread("D:/vcprojects/images/guide.png");if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input", CV_WINDOW_AUTOSIZE);imshow("input", src);namedWindow("output", CV_WINDOW_AUTOSIZE);int r = 2;double eps = 0.1;int type = 0;while (true) {char c = waitKey(50);printf("input digit : %d\n", c);if (c == 49) { // 边缘保留type = 1;}else if (c == 50) {type = 2;}else if (c == 51) {type = 3;}else if (c == 52) { // 去噪type = 4;}else if (c == 53) { // 羽化type = 5;}else if (c == 54) { // 提升type = 6;}else if (c == 27) {break;}if (type == 0 || type == 1 || type == 2 || type == 3) {guide_demo(src, src, pow(r, type), eps*eps * pow(r, type));}else if(type == 4){Mat guide = imread("D:/vcprojects/images/gf_guide.png");Mat input = imread("D:/vcprojects/images/gf_noise.png");imshow("input", input);guide_demo(guide, input, 8, 0.02*0.02);}else if (type == 5) {Mat guide = imread("D:/vcprojects/images/twocat.png");Mat input = imread("D:/vcprojects/images/twocat_mask.png", IMREAD_GRAYSCALE);imshow("input", input);guide_demo(guide, input, 60, 10e-6);}else {Mat input = cv::imread("D:/vcprojects/images/demo.png");input.convertTo(input, CV_32F, 1.0 / 255.0);imshow("input", input);int r = 16;double eps = 0.1 * 0.1;enhance_demo(input, input, r, eps);}}waitKey(0);return 0;
}
void guide_demo(Mat &guide, Mat &input, int r, double e) {double eps = e * 255 * 255;Mat dst;guidedFilter(guide, input, dst, r, eps, -1);imshow("output", dst);
}
void enhance_demo(Mat &guide, Mat &input, int r, double e) {Mat dst;guidedFilter(guide, input, dst, r, e, -1);Mat result = (guide - dst) * 5 + dst;imshow("output", result);
}
运行截图如下:
边缘保留
去噪声
边缘羽化
对比度提升
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
OpenCV中导向滤波介绍与应用相关推荐
- Opencv中的ROI介绍
Opencv中的ROI介绍 (2013-03-27 13:36:26) 转载▼ 分类: 模式识别 ROI(Region of Interest)是指图像中的一个矩形区域,可能你后续 ...
- opencv 实现导向滤波
from:http://blog.csdn.net/wds555/article/details/23176313 何凯明去雾算法中的导向滤波实现,原文地址导向滤波. 导向图像I,滤波输入图像p以及输 ...
- openCV中图像滤波之低通滤波
一.简介 滤波是信号和图像处理中的一种基本操作,目的是选择性提取图像中某些方面的内容,例如,滤波可以去除图像中的噪声,提取有用的视觉特征,对图像进行重采样等.下面介绍几个有关滤波的重要概念: 一幅图像 ...
- OpenCV中的透视变换介绍
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 透视变换原理 透视变换是将图像从一个视 ...
- OpenCV—中值滤波
中值滤波器 中值滤波器是一种非线性滤波器,常用于消除图像中的椒盐噪声.与低通滤波不同的是,中值滤波有利于保留边缘的尖锐度,但它会洗去均匀介质区域中的纹理. 椒盐噪声 椒盐噪声是由图像传感器,传输信道, ...
- OpenCv中值滤波
问题1:什么是中值滤波? 使用像素点邻域附近的像素的中值代替该点的像素值.通俗点来说,在这个像素的左边找五个像素点,右边找五个像素点,将这些像素进行排序,排序过后产生一个中值,啊哈哈,就是中间大小的值 ...
- OpenCV中积分图介绍与应用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一:图像积分图概念 积分图像是Crow在1984年首次提出,是为了 ...
- OpenCV 中值滤波
中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值. 中值滤波对椒盐噪声来说尤其有用,因为它不依赖于邻域内那些与典型值差别很大的值. 中值滤波用途:去除椒盐噪 ...
- python中值滤波介绍_Python 实现中值滤波、均值滤波的方法
红包: Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 @auth ...
最新文章
- 线性支持向量机、线性可分支持向量机、非线性支持向量机是怎么区分的?
- 内存对齐与sizeof
- python所有函数用法_Python函数使用方法(高级用法)
- 学生成绩等级评定python_马鞍山市初中学生综合素质评价工作政策解读来了!
- Lucene下载及测试
- stm32烧录软件_使用华为LiteOS Studio开发STM32物联网工程1
- 学习总结——工作中的性能测试完整过程
- C语言关键字能用大写字母,C语言关键字及其解释
- 卸载Symantec——无需密码,卸载干净,Windows
- ARKit玩起来 - AR卡通秀-史小川-专题视频课程
- SRIO IP的学习与应用
- wind 修复 matlab 插件后仍然无效
- Oracle 锁详解(lock)
- 在j2ee的web项目中,执行文件如excel、word导入,文件路径可以是“C:/Users/user/Desktop/abc/abc.xls”这样的路径吗?还是应该是工程的路径:/WEB-INF/
- 蓝桥杯算法训练—关联矩阵
- mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植
- 华为机试真题 C++ 实现【模拟商场优惠打折】【2022.11 Q4 新题】
- MATLAB绘制平面填充图入门详解
- elasticsearch 批量查询
- 民事诉讼和刑事诉讼法知识点整理(1)
热门文章
- Google148亿元收购Fitbit,抢占苹果、三星可穿戴设备市场地盘
- 多模态人物识别技术及其在视频场景中的应用 | CSDN技术公开课
- 微软亚研院CV大佬代季峰跳槽商汤为哪般?
- 华为全球最快AI训练集群Atlas 900诞生
- 英特尔蚕食AMD和NVIDIA?
- 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
- 100万人同时抢1万张火车票,极限并发带来的思考
- Python数据分析之Pandas读写外部数据文件
- PyTorch核心开发者灵魂发问:我们怎么越来越像Julia了?
- 这所高校招收佛学研究生,面试需要写论文,毕业后安排去向,就业前景好!...