人脸红图提取(基于opencv提取人脸热图)

2023-10-12 04:10

本文主要是介绍人脸红图提取(基于opencv提取人脸热图),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、红色图获得原理

观察例图我们可以发现,红色图本质上是提取了原图的红色部分,即温度较高的部分,猜测图2应该是由原始图片经过红外温度扫描成像的,因此要从图1转变为图2应该首先提取红色部分,如何再进行图像增强,提升对比度等操作。

1

1.1红色部分提取

由于脸颊、粉刺和嘴唇的红色略有不同,为了使得提取更加精确我采用了分段式提取。

并确定了最终的色彩范围

H

S

V

mask1

10-14

0-255

188-196

mask2

8-10

0-255

0-255

mask3

1-8

0-255

0-255

之所以选择在HSV色域中进行红色部分的提取,是因为RGB通道并不能很好地反映出物体具体的颜色信息,而相对于RGB空间,HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。(附上HSV色域空间图如下所示)

1.2颜色关系映射

1.2.1 映射关系试算一

在提取红色部分后,我们得到了三个掩膜mask1、mask2、mask3,但仅据此还无法将t1.png转换为t2.png,他们之间存在一个颜色关系映射,但这个映射关系我们无法准确获得,仅能通过概率统计的方式获取一个近似值。分别打印出原始图片t1三个通道的值origin_H、origin_S、origin_V、和红色例图t2的HSV值red_H,red_S,red_V。

我们期望获得从origin(H,S.V)到red(H,S,V)之间的颜色关系映射,这个映射并不直观,但是通过观察我们不难发现t2的H值基本在176附近,因此可近似任务红色图中的H值为定值,而观察red_S我们发现它个origin_H的变化相似只不过符号相反,因此可以尝试用origin_H线性映射到red_S。又发现red_V和red_S之间也有类似的关系,取red_S=red_V,当然不能直接取值,还需要根据值域对公式进行调整,上式只是简单的说明了他们之间的关系,下面是通过上述映射关系得到的成像,可以看到图像失真很严重,这是因为我们仅仅利用了origin_H这一个原始特征进行拟合,信息丢失严重!

1.2.2 映射关系试算二

再次观察数据分布我们发现origin_S的变化也影响着red_S,因此我们可以合理对origin_H和origin_S做线性组合来近似拟合red_S的变化。

经过权重调整,我们最终选定了用这一映射关系来近似拟合red_H。

 

同样的,对red_V进行拟合得到

于是根据这个映射关系,我们可以将原图映射到红图,得到如下结果,相比来说,精度已经提升了很多但是对于一些细节未能得到凸显,处理的效果仍然不好。

1.2.3 映射关系试算三

观察映射关系二中拟合的结果,我们不难发现有很多散点特别分散,根本无法用线性函数进行拟合,而且不同补位,如图像从脸部到嘴唇,色彩鲜艳度应该是剧烈上升,亮度极具下降,而脸部不同皮肤之间的过渡应该缓慢改变S、V值,因此我们考虑用分段函数进行拟合,正如我们对原图进行mask的时候一样,这里我们在原始拟合函数的基础上,根据自变量的不同进行函数参数的调整(这一步很麻烦,需要不停的根据效果图,结合S表示饱和度即鲜艳程度、V表示亮度,反复修改拟合函数的参数),以达到良好的分段效果。

使用调整后的映射关系可得到如下图像,已经能明显识别各个红区了,但图像对比度仍然有所不足。

最后使用图像增强技术,利用gamma变换增加图像的对比度,Gamma变换的本质就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正,得到HSV色域下处理的最终图像。

经过Gamma变换后的输入和输出图像灰度值关系如图所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。

1.3 转HSV色域下处理的最终结果 

这篇关于人脸红图提取(基于opencv提取人脸热图)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/193155

相关文章

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

使用Python提取PDF大纲(书签)的完整指南

《使用Python提取PDF大纲(书签)的完整指南》PDF大纲(Outline)​​是PDF文档中的导航结构,通常显示在阅读器的侧边栏中,方便用户快速跳转到文档的不同部分,大纲通常以层级结构组织,包含... 目录一、PDF大纲简介二、准备工作所需工具常见安装问题三、代码实现完整代码核心功能解析四、使用效果控

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文