深入理解OpenCV:实用计算机视觉项目解析 笔记

深入理解OpenCV:实用计算机视觉项目解析

目录

  • 1 Android系统上的卡通化和皮肤变换
  • 2 iPhone或iPad上基于标记的增强现实
  • 3 无标记的增强现实
  • 4 使用OpenCV研究从运动中恢复结构(SfM)
  • 5 基于SVM和神经网络的车牌识别
  • 6 非刚性人脸跟踪
  • 7 基于AAM和POSIT的三维头部姿态估计
  • 8 基于特征脸或Fisher脸的人脸识别

Android系统上的卡通化和皮肤变换

  1. 访问摄像机:略
  2. 双边滤波器:bilateralFilter(...
  3. 边缘滤波器:Scharr threshold medianBlur Lapacian(这里函数命名的风格怎么不统一?)
  4. floodFill:外部掩码图像
  5. 皮肤变色?
    1. RGB效果不好(?),HSV色度以红色开始红色结束。。。,YCrCb(YUV的变种):cvtColor(from, to, CV_BGR2YCrCb);
  6. Java到JNI传递图像数据:byte[] --> jbyte* --> Mat对象

iPhone或iPad上基于标记的增强现实

  1. 标记检测:adaptiveThreshold --> findContours --> approxPolyDP
    1. p49 用Otsu算法得到图像二值化处理时的阈值
      1. threshold(..., THRESH_BINARY|THRESH_OTSU);
    2. getPerspectiveTransform --> warpPerspective
  2. 标记编码的识别
    1. 可能有4种不同的表示:2位信息3位海明校验,正确的位置其海明码=0
    2. 细化角点:cornerSubPx?
  3. 摄像机标定(超出本书范围)
  4. 标记姿态估计:solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec, tvec, useExtrinsGuess=false)
    1. p55 按最小化重投影误差来计算摄像机的变换
    2. 可用cv::Rodrigues将旋转向量转换为3X3的矩阵
  5. 渲染OpenGL虚拟物体
    1. p60 可通过正交投影,并将当前帧图像作为屏幕纹理来轻松绘制背景(嗯?CameraCapture视图不是已经显示了吗)
    2. 首先需要用摄像机的内(标定)矩阵来调整OpenGL投影矩阵(p61代码)

无标记的增强现实

  1. 特征描述符
    1. cv:;Ptr<cv::FeatureDetector> detector = new cv::SurfFeatureDetector(); //或SIFT(都是受商业保护的?)
      1. detector->dectect(image, keypoints); //每个关键点包括圆心、半径、角度和得分
    2. 免费的替代品:ORB或FREAK
  2. 特征点匹配
    1. 一组描述符与另一组的最近邻搜索:{BF,FlannBased}Matcher
    2. 删除离群值
    3. 估计单应性:findHomography
    4. 单应细化?:refineMatchesWithHomography
  3. 桌面版本:从2.4.2开始,OpenCV在窗口里支持OpenGL

使用OpenCV研究从运动中恢复结构(SfM)

  1. 从两幅图像估计摄像机运动(Hartley & Sturm?)
    1. 基础矩阵和本征矩阵?
    2. 通过光流进行点匹配:calcOpticalFlowPyrLK
      1. -> findFundamentalMatrix
    3. ...读者只须了解SVD将本征矩阵分为2部分:旋转和平移
    4. p102 为了重构场景,需要2台摄像机
  2. 重构场景
    1. 三角形法?在OpenCV里解方程?
  3. 从多视图中重构
    1. 透视N点法(PNP)?
    2. 迭代最近点(ICP)
    3. p107 solvePnPRansac对噪声有更好的鲁棒性
  4. 重构的细化(光束调整,BA)
    1. SSBA代码(略)
  5. 用PCL来可视化3D点云
    1. p112 “统计孤立点删除”(SOR)?

基于SVM和神经网络的车牌识别

  1. ?getStructureElement --> morphologyEx --> findContours --> ...?--> warpAffine --> equalizeHist?
  2. CvSVM分类器?(仅判断是不是?)
  3. 车牌号识别
    1. 特征提取:累积直方图?
    2. OCR:MLP
      1. CvANN_MLP:神经网络层数、神经元数、激励函数、alpha和beta
      2. 在train之后,调用predict进行classify
      3. p135 最低错误率在8%以下,神经元个数=20,10*10的图像块

非刚性人脸跟踪

  1. ‘数据驱动’
  2. 90s,Cootes和Taylor提出的主动形状模型(ASM)
  3. 训练数据类型:
    1. 图像
    2. 标注
    3. 对称性索引
    4. 连通性索引
    • MUCT数据集
  4. 几何约束
    1. Procrustes分析
    2. 线性形状模型:PCA/SVD?
    3. 局部-全局相结合的表示
      1. p151 clamp子空间坐标(训练box约束)
    4. 训练与可视化
  5. 面部特征检测器
    1. ...最著名的基于Haar特征的级联检测器,用来实现Viola-Jones人脸检测器
    2. 相关性块模型(响应矩阵?)
  6. 人脸跟踪*

基于AAM和POSIT的三维头部姿态估计

  1. AAM
    1. 三角剖分:cvCreateSubdivDelaunay2D
    2. 搜索和拟合
  2. POSIT(含义是反复迭代由正交投影和尺寸变换提取姿态)

基于特征脸或Fisher脸的人脸识别

  1. 基于Haar的:检查所有情况下的相对位置的明暗信息?基于LBP的(更快):比较的是像素亮度直方图
    1. CascadeClassifier?
      1. detectMultiScale:参数:minFeatureSize、searchScaleFactor、minNeighbors、flags
      2. p197 睁眼闭眼戴眼镜的都要分开来处理???靠
  2. v2.4.1提供了3种人脸识别算法:
    1. FaceRecognizer.Eigenfaces:特征脸,也称PCA
    2. .Fisherfaces:也称LDA
    3. .LBPH(局部二值模式直方图) 

你可能感兴趣的:(算法,opencv,OpenGL,人脸识别,计算机视觉)