matlab皮肤色号检测,彩色图像中的人脸(肤色)检测
彩色图像中的人脸(肤色)检测
选了图像工程的课,老师布置了一个小Project,要求用OpenCV或者Matlab实现人脸肤色检测,具体算法参考文献“Face Detection In Corlor Images”。我觉得Python调用OpenCv可能会来得比较快些(没有Matlab基础的我哭晕),唉毕竟为了快速完成任务,虽然得到了结果,但也只停留在知其然不知其所以然的阶段。
算法原理
此算法首先要估算和纠正基于光照补偿技术的偏色效果,纠正过的RGB 颜色成分非线性地转换到YCbCr 彩色空间。检测到的肤色像素用来作为空间转换的椭圆皮肤模型。
算法步骤
肤色检测及光照补偿;
人脸特征定位,包括眼睛定位,嘴部定位,人脸边界定位。
色素和皮肤模型的非线性转换
将RGB颜色空间转换到YCbCr颜色空间,然后直接使用以下公式即可。
其中( 5 )式和( 6 )式中的Ci 表示任一Cb 或Cr , Wcb=46.97, WLcb=23, WHcb=14, Wcr=38.76, WLcr=20,WHcr=10,K1=125,Kh=188。这些参数值是从HHI图像的子集的皮肤块的训练数据中估算出来的,Ymin 和Ymax 在YcbCr 彩色空间的值分别是16 和235。椭圆模型的描述如(9)式和(10)式:
其中cx=109.38,cy =152.02,θ=2.53(弧度),ecx =1.60,ecy=2.41,a=25.39,b=14.03。
OpenCV实现(使用Python)
import numpy as np
import cv2
from matplotlib import pyplot as plt
test_image = cv2.imread('test.jpg')
# RGB到YCbCr色彩空间
image_YCbCr = cv2.cvtColor(test_image, cv2.COLOR_RGB2YCrCb)
# 返回行数,列数,通道个数
shape = image_YCbCr.shape
Kl, Kh = 125, 188
Ymin, Ymax = 16, 235
Wlcb, Wlcr = 23, 20
Whcb, Whcr = 14, 10
Wcb, Wcr = 46.97, 38.76
# 椭圆模型参数
Cx, Cy = 109.38, 152.02
ecx, ecy = 1.60, 2.41
a, b = 25.39, 14.03
Theta = 2.53 / np.pi * 180
# 每行
for row in range(shape[0]):
# 每列
for col in range(shape[1]):
Y = image_YCbCr[row, col, 0]
CbY = image_YCbCr[row, col, 1]
CrY = image_YCbCr[row, col, 2]
if Y < Kl or Y > Kh:
# 求Cb, Cr的均值
if Y < Kl:
# 公式(7)
CbY_aver = 108 + (Kl - Y) * (118 - 108) / (Kl - Ymin)
# 公式(8)
CrY_aver = 154 - (Kl - Y) * (154 - 144) / (Kl - Ymin)
# 公式(6)
WcbY = Wlcb + (Y - Ymin) * (Wcb - Wlcb) / (Kl - Ymin)
WcrY = Wlcr + (Y - Ymin) * (Wcr - Wlcr) / (Kl - Ymin)
elif Y > Kh:
# 公式(7)
CbY_aver = 108 + (Y - Kh) * (118 - 108) / (Ymax - Kh)
# 公式(8)
CrY_aver = 154 + (Y - Kh) * (154 - 132) / (Ymax - Kh)
# 公式(6)
WcbY = Whcb + (Ymax - Y) * (Wcb - Whcb) / (Ymax - Kh)
WcrY = Whcr + (Ymax - Y) * (Wcr - Whcr) / (Ymax - Kh)
# 求Cb(Kh), Cr(Kh)的均值
CbKh_aver = 108 + (Kh - Kh) * (118 - 108) / (Ymax - Kh)
CrKh_aver = 154 + (Kh - Kh) * (154 - 132) / (Ymax - Kh)
# 公式(5)
Cb = (CbY - CbY_aver) * Wcb / WcbY + CbKh_aver
Cr = (CrY - CrY_aver) * Wcr / WcrY + CrKh_aver
else:
# 公式(5)
Cb = CbY
Cr = CrY
# Cb,Cr代入椭圆模型
cosTheta = np.cos(Theta)
sinTehta = np.sin(Theta)
matrixA = np.array([[cosTheta, sinTehta], [-sinTehta, cosTheta]], dtype=np.double)
matrixB = np.array([[Cb - Cx], [Cr - Cy]], dtype=np.double)
# 矩阵相乘
matrixC = np.dot(matrixA, matrixB)
x = matrixC[0, 0]
y = matrixC[1, 0]
ellipse = (x - ecx) ** 2 / a ** 2 + (y - ecy) ** 2 / b ** 2
if ellipse <= 1:
# 白
image_YCbCr[row, col] = [255, 255, 255]
# 黑
else:
image_YCbCr[row, col] = [0, 0, 0]
# 绘图
original = plt.imread('test.jpg')
plt.subplot(121)
plt.imshow(original)
plt.title('Original')
plt.subplot(122)
plt.imshow(image_YCbCr)
plt.title('New')
plt.show()
看下几个样例处理得咋样。
matlab皮肤色号检测,彩色图像中的人脸(肤色)检测相关推荐
- OpenCV视频中的人脸标志检测
OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...
- OpenCV图像中的人脸界标检测
OpenCV图像中的人脸界标检测 图像中的人脸界标检测 简介 命令参数的描述{tutorial_face_training_parameters} 源代码 检测结果 图像中的人脸界标检测 简介 此应用 ...
- 检测视频中的人脸,并画出矩形框
检测视频中的人脸,并画出矩形框,这是一个测试程序,由于很多人经常会用到,写下以备不时之需. #include"stdafx.h" #include <opencv2/core ...
- c# opencv 轮廓检测_C#中OpenCVSharp实现轮廓检测
OpenCv提供了函数 findContours()用于对物体轮廓进行检测,该函数实现算法是由S.suzuki K.Abe于1985年发表的.OpenCVSharp封装了这个函数,有2个参数(cont ...
- python人脸实时检测_openCV+python实现人脸实时检测
一.静态的图像人脸检测 import numpy as np import cv2 as cv path = 'haarcascade_frontalface_default.xml' face_ca ...
- Face detection in color images, 彩色图像中的人脸检测
人脸检测在视频监督,人机交互,人脸识别和人脸图像数据库管理等应用领域处于很重要的地位. 论文<Face detection in color images>中给出一种在YCbCr空间检测人 ...
- Python3 调用 FaceAPI 读取并检测视频中的人脸
本文地址:https://blog.csdn.net/shanglianlm/article/details/80727006 faceAPI.py 封装Face ++ 的Face Detection ...
- python检测图像中的矩形_检测图像中的矩形并裁剪
如果你努力的话,那是件容易的事.这是我的输出(图像和它的一小部分) 我做了什么?先调整图像的大小,因为它在我的屏幕上太大了 侵蚀.扩张以去除小点并加厚线条 阈值图像 洪水泛滥,从正确的点开始 倒洪 找 ...
- python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测
安装的是anaconde3.python3.7.3,3.7环境安装dlib太麻烦, 在anaconde3中新建环境python3.6.8, 在3.6环境下安装dlib-19.6.1-cp36-cp36 ...
最新文章
- 深入浅出SQL Server Replication第一篇:走近Replication(上)
- bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏
- qt 信号多个链接槽_Qt原理窥探信号槽的实现细节
- python生词本的生词_【Anki小工具】有道生词本转Anki 1.0
- 苏教版国标本小学语文第一册汉字笔画
- Android 图片识别、图像识别
- mysql更新一条语句_MySQL一条更新语句是如何执行的
- Python CheckiO 题解系列 丨 博客目录索引
- 【知识图谱】一、知识表示与知识建模
- Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序
- 菜鸟春招启动:面向全球毕业生开放八类岗位 超8成是物流运营人员
- 小米笔记本重装win10系统教程
- 查询所有银行在各省的分行、支行
- 关于MySQL中出现相对应引用词报错“ambiguous”的问题
- matlab 1g等于多少byte,1G大还是1GB大???它们和MB,KB,字节又怎么换算??
- 数据治理与数据安全研读开篇
- Last Day Of Summer
- 杭州seo工资高吗?杭州做seo工资一般多少
- 划重点 iOS15正式发布, 全新的通知推送系统,你必须要知道
- EtherCAT总线伺服电机/一体化伺服电机IO线端子对应定义