起个头,老实说,接触cv的开头,或者说对CV感兴趣的开头是faceswap即换脸。才知道视频是由多帧图像组成,换脸就是定位脸、矫正、换脸、还原这几个步骤。至于后来的发现cnn提取图像特征,faster-rcnn、yolo,ssd这些都是后话了。还是faceswap有点意思。
那接下来就先实践定位脸的实现。
人脸检测(获取人脸的位置,dlib)---预处理(缩放、旋转、矫正、灰值化等cv)---特征提取(68个特征点的位置、之间的欧式距离、曲率、角度等特征)---比对
python深度学习一书的做法是人脸识别---CNN网络来做二分类(我的脸、别人的脸)
后续可以考虑1.68个特征点的相对位置。2.vgg网络提取特征值
灰值化:
图像由红黄蓝三色组成,拍摄成黑白图时呈现不同程度的灰度,灰值化是把像素点转化成为[0,255];其中黑为0,白为255.cv2.cvtColor
缩放、旋转、矫正、模糊、去噪音、均值、高斯、膨胀、腐蚀、先膨胀后腐蚀,或者反过来,或者原图和这个差集
色调H:
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。
它们的补色是:黄色为60°,青色为180°,紫色为300°;
饱和度S:
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,
颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。
通常取值范围为0%~100%,值越大,颜色越饱和。
明度V:
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。
通常取值范围为0%(黑)到100%(白)。RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
去白/黑边:
去除周边的无信息的白边,按纵横方向累加像素值,用阀值获取核心区间。
边缘检测
1. 局部阶跃 一阶微分的峰值,二阶微分的0值。
2. 局部最大值 一阶微分的0值,二阶微分的峰值。
canny算子
(1)邻域加权,对图像用高斯滤波器(高斯分布的离散化)进行图像平滑处理。
(2)一阶微分计算梯度和方向
(3)非极大值抑制:如果某点的梯度值大于梯度方向上的点,则设置为边缘点,否则不是。
(4)双阀值连接(低阀值、高阀值):如果选取高阈值T H 和低阈值T L ,比率为2:1或3:1。(一般取TH =0.3 或 0.2, TL =0.1 )
将小于TL 的点赋0;将大于T H 的点赋1。
大于TL ,小于TH 的点与1值像素连接赋1,否则为0
1.FACENET
2.R-CNN
3.fast-RCNN
4.faster-RCNN
5.YOLO/SSD
6.mask-rcnn
7.mobilenet+ssd
脸部特征提取
GAN
换脸实现