opencv#32 可分离滤波
滤波的可分离性
就是将一个线性滤波变成多个线性滤波,这里面具体所指的是变成x方向的线性滤波和y方向的线性滤波。无论先做x方向的滤波还是y方向滤波,两者的叠加结果是一致的,这个性质取决于滤波操作是并行的,也就是每一个图像在滤波的时候,图像滤波区域内的像素是独立进计算的,如果性能允许,我们可以在整个图像内同时计算。
可分离滤波的含义
线性滤波可以将滤波器分解为x方向和y方向两个滤波器,并且滤波结果与顺序无关。

比如现在有行滤波器和列滤波器,这两个滤波器分别作用在图像中,比如先用行滤波器进行处理,之后再进行列滤波器对图像进行处理,得到的结果与行和列滤波器乘在一起的整体(联合)滤波器对图像进行滤波所得到的结果是一致的。
进行滤波器分离后,好处是滤波时采用的数据变少了,因为进行行滤波时,使用的是三个数据,进行列滤波时,使用的是三个数据,而如果直接用联合滤波器使用的是九个数据,从上可知,分离滤波可以极大缩减滤波处理时间,同时也为cpu这种串行处理器上实现滤波加速成为可能。
高斯滤波器用分离形式表示:

可表示成一个列滤波器和一个行滤波器,这两个滤波器的乘积可得到一个联合(整体)滤波器。若先对第一个列滤波器对图像进行操作,得到结果后,再将此结果输入到下一个行滤波器中,得到的最终结果与图像直接输入到联合滤波器中的结果是一致的。这样的形式可以实现两个方向上不同的滤波,例如在行上用5*5尺寸的滤波器,而在列上用3*3尺寸的滤波器,这样可以增大灵活性。
可分离滤波函数
sepFilter2D()
void cv::sepFilter2D(InputArray src,OutputArray dst,int ddepth,InputArray kernelX,InputArray kernelY,Point anchor = Point(-1,-1),double deta = 0;int borderType = BORDER_DEFAULT)
·src:待滤波图像。
·dst:输出图像,与输入图像src具有相同的尺寸,通道数和数据类型。
·ddepth:输出图像的数据类型(深度),可以通过此参数修改输出图像的数据类型,因为滤波与卷积相类似,卷积过程中 可能在求和时使数据变得更大,例如方框滤波,所得结果远大于原先数据,若此时还使用原数据类型,那么可能会造成数据丢失,因此允许从此参数去设置输出的数据类型。
·kernelX:X方向的滤波器。
·kernelY:Y方向的滤波器。
·anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置。
·delta:偏值,在计算结果上加上偏值。
·borderType:像素外推法选择标志。
示例
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv; //opencv的命名空间
using namespace std;//主函数
int main()
{float points[25] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 };Mat data(5, 5, CV_32FC1, points);//X方向,Y方向和联合滤波器的构建Mat a = (Mat_<float>(3, 1) << -1, 3, -1);Mat b = a.reshape(1, 1);//将3*1的矩阵变为1*3的通道的矩阵Mat ab = a * b;//验证高斯滤波的可分离性Mat gaussX = getGaussianKernel(3, 1); //此函数可自动生成一定尺寸的高斯滤波器,第一个参数是尺寸,第二个参数是标准差Mat gaussData, gaussDataXY;GaussianBlur(data, gaussData, Size(3, 3), 1, 1, BORDER_CONSTANT);sepFilter2D(data, gaussDataXY, -1, gaussX, gaussX, Point(-1, -1), 0, BORDER_CONSTANT);//输入两种高斯滤波的计算结果cout << "gaussData=" << endl << gaussData << endl;cout << "gaussDataXY=" << endl << gaussDataXY << endl;//线性滤波的可分离性Mat dataYX, dataY, dataXY, dataXY_sep;filter2D(data, dataY, -1, a, Point(-1, -1), 0, BORDER_CONSTANT); //进行y方向滤波filter2D(dataY, dataYX, -1, b, Point(-1, -1), 0, BORDER_CONSTANT); //进行x方向滤波filter2D(data,dataXY, -1, ab, Point(-1, -1), 0, BORDER_CONSTANT); //xy联合滤波,此结果应当与前两个操作的结果一致sepFilter2D(data, dataXY_sep, -1, b, b, Point(-1, -1), 0, BORDER_CONSTANT); //使用分离滤波函数进行滤波的结果,若与上面的结果一致,那么可以得到结论:分离滤波函数可以接受两个同尺寸的滤波器//输出分离滤波和联合滤波的计算结果cout << "dataYX=" << endl << dataYX << endl;cout << "dataXY=" << endl << dataXY << endl;cout << "dataXY_sep=" << endl << dataXY_sep << endl;//对于图像的可分离操作Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lenac.png");if (img.empty()){cout << "请确认图像文件名是否正确" << endl;}Mat imgYX, imgY, imgXY;filter2D(img, imgY, -1, a, Point(-1, -1), 0, BORDER_CONSTANT);filter2D(imgY, imgYX, -1, b, Point(-1, -1), 0, BORDER_CONSTANT);filter2D(img, imgXY, -1, ab, Point(-1, -1), 0, BORDER_CONSTANT);imshow("img", img);imshow("imgY", imgY);imshow("imgYX", imgYX);imshow("imgXY", imgXY);waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出return 0;}
结果


由运行结果可知,对于图像的滤波可以经过线性分离实现,这样可以极大的所见程序运行所需要的数据,我们不需要将两个方向的滤波器乘在一起得到联合滤波器,也缩减了我们的工作量。
相关文章:
opencv#32 可分离滤波
滤波的可分离性 就是将一个线性滤波变成多个线性滤波,这里面具体所指的是变成x方向的线性滤波和y方向的线性滤波。无论先做x方向的滤波还是y方向滤波,两者的叠加结果是一致的,这个性质取决于滤波操作是并行的,也就是每一个图像在滤…...
android 导航app 稳定性问题总结
一 重写全局异常处理: 1 是过滤掉一些已知的无法处理的 问题,比如TimeoutException 这种无法根除只能缓解的问题可以直接catch掉 2 是 一些无法继续的问题可以直接杀死重启,一些影响不是很大的,可以局部还原 比如: p…...
第11次修改了可删除可持久保存的前端html备忘录:将样式分离,可以自由秒添加秒删除样式
第11次修改了可删除可持久保存的前端html备忘录:将样式分离,可以自由秒添加秒删除样式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…...
hcip高级网络知识
一:计算机间信息传递原理 抽象语言----编码 编码---二进制 二进制---转换为电流(数字信号) 处理和传递数字信号 二:OSI--七层参考模型 ISO--1979 规定计算机系统互联的组织: OSI/RM ---- 开放式系统互联参考模型 --- 1…...
常用电子器件学习——MOS管
MOS管介绍 MOS,是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…...
System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
目录 背景: 过程: SQL Express的认识: 背景: 正在运行程序的时候,我遇到一个错误提示,错误信息如下,当我将错误信息仔细阅读了一番,信息提示的很明显,错误出现的来源就是连接数据库代码这块string connStr "s…...
数据库(SQL语句:DMLDQL)
目录 有关数据表的DML操作 1.1 INSERT 语句 1.2 REPLACE 语句 replace语句的语法格式(三种) REPLACE 语句 和 INSERT 语句的区别 1.3 DELETE 语句 | | TRUNCATE 语句 DELETE TRUNCATE DROP 1.4 UPDATE 数据 1.5 SELECT 语句 (DQL数…...
AnimatedDrawings:让绘图动起来
老样子,先上图片和官网。这个项目是让绘制的动画图片动起来,还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹,启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…...
红黑树浅浅学习
红黑树浅浅学习 红黑树概念红黑树平衡性调整 红黑树概念 二叉树:二叉树是每个节点最多有两个子树的树结构。二叉查找树:又称“二叉搜索树”,左孩子比父节点小,右孩子比父节点大,还有一个特性就是”中序遍历“可以让结…...
QGraphicsView 如何让图形大小适配窗口
1. setSceneRect 做什么用? setSceneRect是一个Qt中的函数,用于设置QGraphicsView中的场景矩形(QRectF)。 QGraphicsView是一个用于显示和编辑图形场景的控件,而setSceneRect函数用于设置场景矩形,即指定…...
sqlmap使用教程(3)-探测注入漏洞
1、探测GET参数 以下为探测DVWA靶场low级别的sql注入,以下提交方式为GET,问号(?)将分隔URL和传输的数据,而参数之间以&相连。--auth-credadmin:password --auth-typebasic (DVWA靶场需要登录…...
期待已久!阿里云容器服务 ACK AI 助手正式上线
作者:行疾 大模型技术的蓬勃发展持续引领 AI 出圈潮流,各行各业都在尝试采用 AI 工具实现智能增效。 2023 年云栖大会上,阿里云容器服务团队正式发布 ACK AI 助手,带来大模型增强智能诊断,帮助企业和开发者降低 K8s …...
[BUG] Authentication Error
前言 给服务器安装了一个todesk,但是远程一直就是,点击用户,进入输入密码界面,还没等输入就自动返回了 解决 服务器是无桌面版本,或者桌面程序死掉了,重新安装就好 sudo apt install xorg sudo apt inst…...
23种设计模式概述
学习设计模式对我们有什么帮助? 1.提高代码质量和可维护性:设计模式是经过验证的解决方案,有助于解决常见的设计问题。使用设计模式可以减少代码冗余,增强代码的可读性和可维护性,并提高代码的可靠性。 2.提升开发效率…...
英文阅读-LinkedIn‘s Tips for Highly Effective Code Review
LinkedIn的CR技巧 LinkedIn团队CodeReview经验与方法,原文来自https://thenewstack.io/linkedin-code-review/ 总结 Do I Understand the “Why”? 在提交pr的同时需要描述本次修改的“动机”,有助于提高代码文档质量。 Am I Giving Positive Feedbac…...
性能优化-高通的Hexagon DSP和NPU
原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU,这些为处理简单大量运算而设计的硬件。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能…...
第137期 Oracle的数据生命周期管理(20240123)
数据库管理137期 2024-01-23 第137期 Oracle的数据生命周期管理(20240123)1 ILM2 Heat Map3 ADO4 优点5 对比总结 第137期 Oracle的数据生命周期管理(20240123) 作者:胖头鱼的鱼缸(尹海文) Orac…...
电脑的GPU太强了,pytorch版本跟不上,将cuda驱动进行降级
我的情况: 我买的电脑的GPU版本为rtx4060,但是装上相应的驱动后,cuda的版本为12.3,而现在pytorch中cuda安装命令的最新版本为12.1,所以我将电脑的驱动进行降级为cuda版本为10.1的。 最后成功安装cuda10.1版本的驱动 …...
1 认识微服务
1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构:将业务的所有…...
PHP+SOCKET 服务端多进程处理多客户端请求 demo
服务端 $socket socket_create(AF_INET,SOCK_STREAM,SOL_TCP); socket_bind($socket,0,95012) or die( server bind fail: . socket_strerror(socket_last_error())); socket_listen($socket,5);$child 0; //初始化子进程数 while(true){$client socket_accept($socket);$pi…...
QT 5.14.0实战:手把手教你用QLineEdit打造一个带验证码的登录框(附完整样式代码)
QT 5.14.0实战:手把手教你用QLineEdit打造一个带验证码的登录框(附完整样式代码) 在GUI开发中,登录界面是最基础也最考验细节的组件之一。一个优秀的登录框不仅需要功能完整,还要在用户体验上下足功夫——比如实时输入…...
Qwen3-14B部署后效果追踪:30天使用数据与关键指标增长分析
Qwen3-14B部署后效果追踪:30天使用数据与关键指标增长分析 1. 部署效果概览 在RTX 4090D 24GB显存环境下部署Qwen3-14B镜像后,我们对系统进行了为期30天的持续监测。数据显示,这套优化配置展现出令人印象深刻的稳定性和性能表现:…...
AWCII 040 CPU模块
AWCII 040 CPU 模块AWCII 040 是工业自动化控制系统中的中央处理单元(CPU 模块),主要用于执行控制程序、数据运算及系统管理,是整个控制系统的核心“大脑”。一、基本概述AWCII 040 CPU 模块集成了处理器、存储单元及系统管理功能…...
新手零障碍入门:在免激活的快马平台完成你的第一个Python小游戏
作为一个刚接触编程的新手,我最近在InsCode(快马)平台上完成了人生第一个Python小游戏——猜数字。整个过程比想象中简单得多,特别适合像我这样零基础的小白入门。下面分享我的学习笔记,希望能帮到同样想尝试编程的朋友。 为什么选择猜数字游…...
RIFE智能帧插值技术全解析:从原理到实战的视频流畅度提升指南
RIFE智能帧插值技术全解析:从原理到实战的视频流畅度提升指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/v…...
Windows系统优化工具WinUtil:从新手到专家的完整使用指南
Windows系统优化工具WinUtil:从新手到专家的完整使用指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌倦了Windows系统…...
利用快马平台快速生成virtualbox虚拟机配置脚本,搭建云端开发原型环境
今天想和大家分享一个快速搭建云端开发环境的小技巧。最近在尝试用VirtualBox创建Ubuntu服务器环境时,发现手动配置特别耗时,于是研究了一套自动化脚本方案,配合InsCode(快马)平台的快速生成功能,整个过程变得异常简单。 为什么需…...
食品批发厂家口碑推荐榜
在食品批发行业,选择一家口碑良好的厂家至关重要。优质的食品批发厂家不仅能提供高品质的产品,还能保障稳定的供应和良好的售后服务。今天,我们就来为大家推荐一些口碑出众的食品批发厂家,其中惠州市佳德旺食品有限公司表现尤为突…...
3大场景×5项优化:ComfyUI视频合成VHS_VideoCombine节点全场景应用指南
3大场景5项优化:ComfyUI视频合成VHS_VideoCombine节点全场景应用指南 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 一、基础认知:视频合…...
从Prompt到成稿|像素剧本圣殿输入剧情大纲→输出标准剧本全流程
从Prompt到成稿|像素剧本圣殿输入剧情大纲→输出标准剧本全流程 1. 工具介绍:像素剧本圣殿 像素剧本圣殿是一款基于Qwen2.5-14B-Instruct大模型深度优化的专业剧本创作工具。它将先进的AI文本生成能力与独特的8-Bit复古视觉风格相结合,为编…...
