人脸红图提取(基于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使用OpenCV实现获取视频时长的小工具

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

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性