彩色图像中的人脸(肤色)检测

选了图像工程的课,老师布置了一个小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皮肤色号检测,彩色图像中的人脸(肤色)检测相关推荐

  1. OpenCV视频中的人脸标志检测

    OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...

  2. OpenCV图像中的人脸界标检测

    OpenCV图像中的人脸界标检测 图像中的人脸界标检测 简介 命令参数的描述{tutorial_face_training_parameters} 源代码 检测结果 图像中的人脸界标检测 简介 此应用 ...

  3. 检测视频中的人脸,并画出矩形框

    检测视频中的人脸,并画出矩形框,这是一个测试程序,由于很多人经常会用到,写下以备不时之需. #include"stdafx.h" #include <opencv2/core ...

  4. c# opencv 轮廓检测_C#中OpenCVSharp实现轮廓检测

    OpenCv提供了函数 findContours()用于对物体轮廓进行检测,该函数实现算法是由S.suzuki K.Abe于1985年发表的.OpenCVSharp封装了这个函数,有2个参数(cont ...

  5. python人脸实时检测_openCV+python实现人脸实时检测

    一.静态的图像人脸检测 import numpy as np import cv2 as cv path = 'haarcascade_frontalface_default.xml' face_ca ...

  6. Face detection in color images, 彩色图像中的人脸检测

    人脸检测在视频监督,人机交互,人脸识别和人脸图像数据库管理等应用领域处于很重要的地位. 论文<Face detection in color images>中给出一种在YCbCr空间检测人 ...

  7. Python3 调用 FaceAPI 读取并检测视频中的人脸

    本文地址:https://blog.csdn.net/shanglianlm/article/details/80727006 faceAPI.py 封装Face ++ 的Face Detection ...

  8. python检测图像中的矩形_检测图像中的矩形并裁剪

    如果你努力的话,那是件容易的事.这是我的输出(图像和它的一小部分) 我做了什么?先调整图像的大小,因为它在我的屏幕上太大了 侵蚀.扩张以去除小点并加厚线条 阈值图像 洪水泛滥,从正确的点开始 倒洪 找 ...

  9. python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测

    安装的是anaconde3.python3.7.3,3.7环境安装dlib太麻烦, 在anaconde3中新建环境python3.6.8, 在3.6环境下安装dlib-19.6.1-cp36-cp36 ...

最新文章

  1. 深入浅出SQL Server Replication第一篇:走近Replication(上)
  2. bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏
  3. qt 信号多个链接槽_Qt原理窥探信号槽的实现细节
  4. python生词本的生词_【Anki小工具】有道生词本转Anki 1.0
  5. 苏教版国标本小学语文第一册汉字笔画
  6. Android 图片识别、图像识别
  7. mysql更新一条语句_MySQL一条更新语句是如何执行的
  8. Python CheckiO 题解系列 丨 博客目录索引
  9. 【知识图谱】一、知识表示与知识建模
  10. Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序
  11. 菜鸟春招启动:面向全球毕业生开放八类岗位 超8成是物流运营人员
  12. 小米笔记本重装win10系统教程
  13. 查询所有银行在各省的分行、支行
  14. 关于MySQL中出现相对应引用词报错“ambiguous”的问题
  15. matlab 1g等于多少byte,1G大还是1GB大???它们和MB,KB,字节又怎么换算??
  16. 数据治理与数据安全研读开篇
  17. Last Day Of Summer
  18. 杭州seo工资高吗?杭州做seo工资一般多少
  19. 划重点 iOS15正式发布, 全新的通知推送系统,你必须要知道
  20. EtherCAT总线伺服电机/一体化伺服电机IO线端子对应定义

热门文章

  1. 内存泄漏问题该如何解决-面试学习笔记
  2. 相思赋予谁 --知错
  3. 一张照片生成3D头像!苹果新模型击败StyleGAN2,表情光线都能调,网友:要用于MR?...
  4. 车载激光扫描系统介绍
  5. C# SmtpClient好像不支持STARTTLS,outlook邮箱不能发了
  6. Java-根据IP获取对应位置信息
  7. 免费https证书生成
  8. 1024人工智能和大数据应用高峰论坛
  9. 算法的时间复杂度与空间复杂度介绍
  10. (实战)[自动驾驶赛车-中国联赛]-合集