局部均方差滤波(磨皮)

news2024/11/23 20:04:15

note

锚点灰度值 用 原图像对应点的原灰度值 和 局部均值加权得到

局部均值 由 掩膜 区域计算得到

权重 由 局部方差 与用户输入参数计算确定

code

// 局部均方差滤波
/*
 \brief 局部均方差滤波
 \param src:原矩阵,单通道
 \param res:结果矩阵
 \param size:掩膜矩形大小,长宽都是奇数
 \param parameter:均值,方差权重因子
*/
void MyPartMeanVarianceFilter(Mat& src, Mat& res, Size& size, double parameter) {
	if ((src.channels() > 1) || (res.channels() > 1)) {
		return;
	}
	if ((size.width / 2 == 0) || (size.height / 2 == 0)) {
		return;
	}
	if (parameter < 0) {
		return;
	}
	int srcType = src.type();
	src.copyTo(res);
	src.convertTo(src, CV_64FC1);
	res.convertTo(res, CV_64FC1);
	int anchor_c = size.width / 2;
	int anchor_r = size.height / 2;
	for (int r = 0; r+size.height <= src.rows; r=r+1) {
		for (int c = 0; c+size.width <= src.cols; c=c+1) {
			Rect roi;
			roi.x = c;
			roi.y = r;
			roi.width = size.width;
			roi.height = size.height;
			Mat tmp = src(roi);
			Mat mean;	// 均值
			Mat sigma;	// 标准差
			meanStdDev(tmp, mean, sigma);
			double fMean = mean.at<double>(0);
			double fSigma = sigma.at<double>(0);
			double fSigma2 = fSigma * fSigma;	// 方差
			double k = fSigma2 / (fSigma2 + parameter);
			double origin = src.at<double>(r+anchor_r,c+anchor_c);
			double out = (1 - k) * fMean + k * origin;	// 锚点灰度值由原灰度值和局部均值加权得到
			res.at<double>(r+anchor_r,c+anchor_c) = out;
			// printf("origin:%lf, fMean:%lf, out:%lf\n", origin, fMean, out);
		}
	}
	src.convertTo(src, srcType);
	res.convertTo(res, srcType);
}

test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux学习之磁盘分区(fdisk、parted、df)、文件大小查看(ls、du)和文件写入(dd)

我用来演示的系统使用CentOS Linux release 7.9.2009 (Core)&#xff0c;内核版本是3.10.0-1160.71.1.el7.x86_64。 fdisk fdisk -l可以查看分区&#xff0c;因为我这里使用的不是root用户&#xff0c;所以前边加上sudo。 可以看到当前只有sda一块磁盘&#xff0c;第二磁盘…

全志V3S嵌入式驱动开发(软、硬件调试方法总结)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 v3s开发板本身是比较小巧的&#xff0c;ddr也是嵌入在soc里面的&#xff0c;电路设计也不复杂&#xff0c;因此很受电子爱好者的喜欢。不过大部分朋…

对话小红书剑寒:如何跨方向技术融合,全局优化打造更智能的音视频系统?...

编者按&#xff1a;在 AI 时代&#xff0c;随着 ChatGPT 掀起技术狂潮&#xff0c;构建更智能的音视频系统已经成为音视频领域从业者的共同目标。 然而&#xff0c;音视频系统的智能化&#xff0c;每个从业者对其都有自己独特的视角和理解&#xff0c;正如“一千个人眼中有一千…

华为官宣2024年推出面向商用的5.5G全套网络设备

2023年6月29日华为董事、ICT产品与解决方案总裁杨超斌在2023 MWC上海展5G Advanced论坛上宣布&#xff0c;2024年&#xff0c;华为将会推出面向商用的5.5G全套网络设备。这也标志着ICT行业即将迈入5.5G时代。 经过四年的高速发展&#xff0c;5G建设已经取得了丰硕的成果。目前…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册7

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

MySql的操作跟命令

概述 仅仅为了加强记忆&#xff0c;废话不说&#xff0c;直接上正文。 快速开始 创建数据库。 进入MySql客户端&#xff0c;输入root用户的密码 Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server vers…

第3章 创建项目并初始化业务数据(过程记录)

项目声明和依赖 ECommerceRecommendSystem [pom.xml] 公用的声明、依赖、插件 properties 声明 log4g&#xff1a;处理日志的框架&#xff08;日志的具体实现&#xff09;sel4g&#xff1a;简单日志门面&#xff08;简单日志的接口&#xff09;mongodb-spark&#xff1a;Mong…

Python 元类实现ORM

目录 ORM概念 __new__、__init__、__call__的介绍 通过元类简单实现ORM中的insert功能 抽取到基类中 ORM概念 ORM&#xff08;Object Ralational Mapping&#xff0c;对象关系映射&#xff09;用来把对象模型表示的对象映射到基于 SQL 的关系模型数据库结构中去。这样&am…

隔断推拉门滑动不畅常见的原因和解决方法

隔断推拉门滑动不畅常见的原因和解决方法如下&#xff1a; 1. 滑轨污秽&#xff1a;如果滑轨上有灰尘、油垢或杂物积聚&#xff0c;会影响推拉门的滑动效果。解决方法是定期清洁滑轨&#xff0c;使用吸尘器或刷子清除污垢&#xff0c;并用湿布擦拭干净。 2. 滑轨损坏&#xff1…

Git---分支管理

文章目录 前言一、理解分支二、创建分支三、切换分支四、合并分支五、删除分支六、合并冲突七、分支管理策略八、分支策略九、bug分支十、删除临时分支总结 前言 本篇博客开始介绍Git的杀手级功能之一 : 分支.分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习C的时候,另…

MySQL学习基础篇(六)---多表查询

MySQL学习基础篇(六)—多表查询 对于多表查询的理解&#xff1a; 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是…

浅析EasyCVR视频技术与AR实景智能管理平台在智慧厂区中的应用

一、背景分析 新型智慧厂区是运用人工智能、大数据、物联网和设备监控技术加强厂区安保和信息管理。通过先进技术&#xff0c;保障厂区生产运营安全&#xff0c;同时减少生产线上的人工干预、及时正确地采集各类生产数据&#xff0c;以及合理的生产计划编排与生产进度&#xff…

线性规划的对偶问题(The Dual of LP)

线性规划的对偶问题&#xff08;The Dual of LP&#xff09; 对偶理论是线性规划中最重要的理论之一&#xff0c;是深入了 解线性规划问题结构的重要理论基础。同时&#xff0c;由于问题提 出本身所具有的经济意义&#xff0c;使得它成为对线性规划问题系 统进行经济分析和敏感…

原生 js点击空白处 关闭遮罩层(关闭某个div)

如图所示 点击空白处关闭此div document.addEventListener(click, function(e) {//监听页面点击事件var screenDoc document.querySelector(.controlHead);//需要关闭的divvar control document.querySelector(.control);//设置的按钮if (screenDoc && !screenDoc.co…

基于TF-IDF+Tensorflow+pyQT+孪生神经网络的智能聊天机器人(深度学习)含全部工程源码及模型+训练数据集

目录 前言总体设计系统整体结构图系统流程图孪生神经网络结构图 运行环境Python 环境TensorFlow 环境 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 模型应用 系统测试1. 训练准确率2. 测试效果3. 模型应用 工程源代码下载其它资料下载 前言 本项目利用TF-IDF&…

【Docker、Dockerfile】使用Dockerfile创建镜像并运行容器

创建SpringBoot项目 创建一个Springboot的Java项目&#xff0c;然后打包成可运行的Jar 编写Dockerfile文件 在项目文件夹下创建Dockerfile文件&#xff0c;内容如下 # 定义用于构建镜像的 JDK 版本参数&#xff0c;可以在构建过程中通过 --build-arg 选项传递给 docker bui…

如何用adb命令统计app冷启耗时

第一步&#xff1a;杀掉App&#xff0c;然后重启&#xff0c;过滤Displayed日志&#xff0c;找到App启动的第一个Activity&#xff1b; adb logcat | grep Displayed 第二步&#xff1a;再次杀掉App&#xff0c;使用adb shell am start命令来启动app&#xff1a; adb shell a…

podman容器的使用

podman 安装 如果你想在rhel系统中玩podman&#xff0c;必须是rhel8.2版本以上。podman版本是1.9.3。从centos8.2开始默认情况下&#xff0c;除了最小化安装之外&#xff0c;系统都会默认安装podman。 如果你使用rhel8.2以上的版本&#xff0c;那么就直接安装podman就可以了。…

关于多grib文件合并以及netcdf和grib的方法

前言 之前在使用WRF做敏感性试验时&#xff0c;曾修改初始场的grib文件&#xff0c;并涉及到多个grib文件合并的情况&#xff0c;下面介绍一些好用的工具处理netcdf和grib 1、 grib_copy 官网&#xff1a;https://confluence.ecmwf.int/display/ECC/grib_copy 在Linux系统上…

从零实现深度学习框架——Seq2Seq模型尝试优化

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 💡系列文章完整目录: 👉点此👈 要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽…