做婚礼网站的公司简介,wordpress静态链接设置完了404,北京招聘网站建设,南安seo关键词OpenCv中文论坛精华地址http://www.opencv.org.cn/index.php/User:Ollydbg23http://sivp.sourceforge.net/(sivp)一、基础操作1. 数据类型 数据结构了解图像相关#xff1a;cvArr cvMat IplImage数据数组的维数#xff0c; 与数据的通道数 见P46 (76)2. 常见的矩阵操作熟悉3…OpenCv中文论坛精华地址http://www.opencv.org.cn/index.php/User:Ollydbg23http://sivp.sourceforge.net/(sivp)一、基础操作1. 数据类型 数据结构了解图像相关cvArr cvMat IplImage数据数组的维数 与数据的通道数 见P46 (76)2. 常见的矩阵操作熟悉3. 数据的保存和读取4. 图像的加载和显示5. 视频的操作6. 内存与序列a. 内存存储器CvMemStorage双向链表 动态对象(cvSeq cvSet)的内存cvCreateMemStoragecvReleaseMemStoragecvClearMemStorage 不返还系统cvMemStorageAllocb. 序列是内存存储器可以存储的一种对象。 双端队列CvSeq方法cvCreateSeqcvClearSeqcvGetSeqElemcvCloneSeq cvSeqSlice cvSeqRemoveSlice cvSeqInsertSlicecvSeqSortcvSeqSearchcvSeqInvertcvSeqPartition堆栈操作 cvSeqPush cvSeqPushFront cvSeqPop cvSeqPopFront cvSeqPushMulti cvSeqPopMulticvSeqInsert cvSeqRemovecvSetSeqBlockSize读出和写入: CvSeqWriter结构 cvStartWriteSeq cvStartAppendToSeq cvEndWriteSeq cvFlushSeqWriterCV_WRITE_SEQ_ELEM CV_WRITE_SEQ_ELEM_VARCvSeqReader结构 cvStartReadSeq cvGetSeqReaderPos cvSetSeqReaderPosCV_NEXT_SEQ_ELEM V_PREV_SEQ_ELEM CV_READ_SEQ_ELEM CV_REV_READ_SEQ_ELEM数组互相转换 cvCvtSeqToArray cvMakeSeqHeaderForArray二. 图像的处理1. 图像的平滑 cvSmooth主要应用: 去除噪声 失真降低图像的分辨率。主要方法: CV_BLUR CV_BLUR_NO_SCALE CV_MEDIAN CV_GAUSSIAN CV_BILATERAL2. 图像形态学 cvErode cvDilate cvMorphologyEx主要作用 消除噪声 分割等相关方法a. 腐蚀 消除噪声斑点b. 膨胀 连通被噪声、阴影分割的区域c. 开运算 先腐蚀后膨胀d. 闭运算 先膨胀后腐蚀e. 形态梯度f. 礼貌g. 黑帽3. 漫水填充算法 cvFloodFill作用 标记或者分离图像的一部分。 从输入图像获取掩码区域。原理: 把邻近区域所有相似点填充为种子点同样的颜色。4. 尺寸调整 cvResizeROI的影响插值方法的选择5. 图像金字塔 cvPyrDown cvPyrUp cvPyrSegmentation简介源于同一原始图像的连续降采样获得的一个图像的集合。方法高斯图像金字塔 拉普拉斯图像金字塔应用图像分割6. 阀值化 cvThreshold cvAdaptiveThreshold一般阀值化自适应阀值化 针对有很强照明或反射梯度的图像需要根据梯度进行阀值化三、图像的变换1. 卷积 cvFilter2D数学公式: z(t)f(t)*g(t) ∫f(m)g(t-m)dmh(x)(f*g)(x)描述变换的基础卷积核 参考点 核支撑计算方法图像参考点 Σ 核点*对应图像点卷积边界: cvCopyMakeBorder2. 梯度和Sobel导数 cvSobel导数的计算最重要且是最基本的卷积注意 Sobel导数并不是真正的导数它是离散空间的拟合。用大核可以对导数有更好的逼近。scharr滤波器: sobel算子小核时精度低应使用scharr滤波器。3. 拉普拉斯变换 cvLaplace描述 二阶导数 二阶Sobel导数应用: 检测团块 边缘检测4. Canny算子 cvCanny描述 轮廓拼装应用: 边缘检测5. 霍夫变换应用 在图像中寻找直线、圆等其他简单图形的方法。霍夫线变换 cvHoughLines2霍夫圆变换 (霍夫梯度法) cvHoughCircles6. 重映射 cvRemap7. 拉伸 收缩 扭曲 旋转仿射变换稠密仿射变换: cvWarpAffine计算变换矩阵: cvGetAffineTransform cv2DRotationMatrix稀疏仿射变换: cvTransform应用于一系列孤立点的映射透射变换密集透射变换: cvWarpPerspective计算变换矩阵: cvGetPerspectiveTransform稀疏透射变换: cvPerspectiveTransform8. cvCartToPolar cvPolarToCart笛卡尔坐标系和极坐标系的转换9. LogPolar对数极坐标变换 cvLogPolarcvDFT函数(实现了FFT算法)cvGetOptimalDFTSize cvGetSubRectcvMulSpectrums11. 离散余弦变换 DCT实数的处理 cvDCT12. 积分图像 cvIntegral作用子区域的快速求和应用人脸识别13. 距离变换 cvDistTransform输入为边缘检测的图像14. 直方图均衡化 cvEqualizeHist应用图像亮度分布比较集中 将亮度分布范围拉宽四、直方图直方图信息的一种表达方式数据分布的统计图。对边缘 色彩 角 亮度等特征的统计bin区间 即竖条1. 数据结构CvHistogram2. 操作函数cvCreateHistcvQueryHistValue_1DcvGetHistValue_1DcvNormalizeHistcvThreshHistcvCopyHistcvGetMinMaxHistValuecvCalcHistcvCompareHist (五种比较方法 CV_COMP_CORREL CV_COMP_CHISQR CV_COMP_INTERSECT CV_COMP_BHATTACHARYYA EMD)寻找相关和匹配3. 应用HSV: H(色调) S(饱和度) V(亮度值)a. EMD 方法 利用直方图的距离测量来代替直方图的匹配策略光线的变化引起图像颜色值的变化cvCalcEMD2b. 反向投影(back projection)寻找目标cvCalcBackProject()计算一个像素是否是一个已知目标的一部分cvCalcBackProjectPatch()计算一块区域是否包含已知的目标 (区域检测器 目标检测器)得到目标图像的概率值 用cvMinMaxLoc()确定目标在图像的位置c. 模板匹配 cvMatchTemplate不是基于直方图。通过在输入图像上滑动图像快对实际的图像快和输入图像进行匹配。cvNormalize五、轮廓 cvFindContours()根据边缘像素(canny)组装成轮廓。用序列的数据结构表示轮廓信息。处理的图像 cvCanny()输出图像或者 cvThreshold() cvAdaptiveThreshold()的输出图像重要概念轮廓树外轮廓(c) 内轮廓(h hole)1. cvFindContours()输入图像 8通道 二值化的图像2. 方法cvFindContourscvStartFindContourscvFindNextContourcvSubstituteContourcvEndFindContourcvApproxChains3. 绘制轮廓cvDrawContours4. 轮廓的识别和处理简化或拟合轮廓匹配轮廓到模板a. 多边形逼近cvApproxPolycvFindDominantPoints 寻找关键点b. 特性概括长度 其他度量 轮廓矩长度 cvContourPerimeter() cvArcLength面积 cvContourArea边界框 cvBoundingRect cvMinAreaRect2cvMinEnclosingCircle 最小包围圆cvFitEllipse2 最佳拟合圆c. 几何 几个实用函数cvMaxRectcvBoxPointscvPointSeqFromMatcvPointPolygonTest5. 轮廓匹配a. 矩轮廓矩比较2个轮廓最简单的方式struct CvMomentscvContoursMoments 输入的是轮廓(CvSeq表示)cvMoments 输入的是图像cvGetCentralMomentcvGetNormalizedCentralMomentcvGetHuMoments Hu矩是中心矩和归一化矩的线性组合b. cvMatchShapes 用Hu矩匹配c. 等级匹配轮廓树此处的概念和之前的不同。轮廓树的创建过程。比较2个树的相似度。cvCreateContourTree 创建轮廓树cvContourFromContourTreecvMatchContourTrees 比较六、图像的局部和分割如何从图像中将目标或部分目标分割出来。1. 背景减除快速背景建模方法光照变化不大的室内codebook方法 室内外环境周期性运动 灯光缓慢变化(速度较慢)背景和前景a. 背景减除缺点假设所有像素是独立的。亮度的变化b. 场景建模前景与背景的转化新的前景-旧的前景-背景c. 像素片段像素在一段时间内变化。对这种波动建立模型。cvInitLineIteratorCV_NEXT_LINE_POINT()d. 帧差最简单的背景减除方法就是用一帧减去另一帧将差别作为前景。cvAbsDiffe. 平均背景法适用于背景场景不包含运动的部分要求光线保持不变。cvAcc() cvAbsDiff() cvInRange()其他类似cvAcc()的累积函数cvRunningAvg cvSquareAcc cvMultiplyAcc方法: 得到每个像素或一组像素的时间序列模型。(消耗大量内存)codebook(编码本): 一个像素现在的观测值和先前的观测值的比较。RGB空间YUV空间、HSV空间(与亮度相关) // hue色度saturation纯度value亮度codebook算法(注意 它不能处理不同模式的光)f.1 结构struct code_bookstruct cef.2 方法update_codebook: 定时调用训练和学习 (创建codebook模型)clear_stale_entries 调用update_codebook一段时间后调用这个函数做清除操作 (清除很少使用的码本条目)background_diff: 使用经验模型在先前的背景中将前景目标的像素分割出来f.3 codebook算法操作步骤见P318(348 )g. 清除前景的连通部分 (学习开运算 闭运算 轮廓 好的例程)功能强大的在背景中去除噪声的技术find_connected_components2. 分水岭算法 cvWatershed标记图像 根据标记来分割图像3. 用Inpainting来修补图像 cvInpaint()修复图像4. 均值漂移分割cvPyrMeanShiftFiltering: finds the peaks of color distributions over space (从空间考虑)cvMeanShift (运动跟踪章节): finds the peak of a color-spatial (or other feature) distribution over time(时间考虑)参考图像金字塔(cvPyrUp, cvPyrDown)5. Delaunay三角剖分和Voronoi划分Delaunay三角剖分是表现三维形状的基础 是连接计算机视觉与计算机图形学的桥梁。opencv仅实现了二维的Delaunay三角剖分.二维的Delaunay三角剖分的应用 运动场景跟踪 目标识别 不同摄像机的场景匹配七、运动与跟踪1. 跟踪基础识别 矩 颜色直方图跟踪视觉上重要的关键点而不是整个物体。lucas-Kanade Horn-Schunk方法 (稀疏和稠密光流)建模2. 寻找角点 cvGoodFeaturesToTrack关键点特征点一个点在两个正交的方向都有明显的导数。Harris角点: 角点位于图像二阶导数的自相关矩阵有两个最大特征值的地方。同时对移动和旋转不变3. 亚像素角点 cvFindCornerSubPix精确测量应用 标定跟踪三维重建4. 不变特征SIFT5. 光流a. 稀疏光流a.1 LK算法 cvCalcOpticalFlowLK感兴趣点的小窗口。缺点: 点会移出小窗口a.1.1 原理3个假设 亮度恒定时间连续或者运动是小运动空间一致v - It/Ixa.1.2 一维光流前2个假设(迭代的方法解决假设不十分正确的情况)a.1.2 二维光流考虑第3个假设解不定方程a.2 金字塔LK算法 cvCalcOpticalFlowPyrLK解决大而不连贯的运动即不满足小而连贯的假设b. 稠密光流b.1 Horm-SchunckcvCalcOpticalFlowHSb.2 块匹配方法cvCalcOpticalFlowBM6. MEAN-SHIFT CAM-SHIFTa. mean-shift cvMeanShift通用方法可以跟踪物体的运动b. cam-shift cvCamShift建立在mean-shift之上跟踪视频中尺寸可能产生变换的目标窗口可以调整7. 运动模板应用 姿态识别实心轮廓的获取建立模板cvUpdateMotionHistory (需要传入轮廓)计算梯度cvCalcMotionGradient分割 cvSegmentMotion8. 预估器应用目标跟踪分两个阶段 预估阶段 校正阶段a. Kalman Filter八、 标定http://www.vision.caltech.edu/bouguetj/calib_doc/http://www.opencv.org.cn/forum/viewtopic.php?f1t4603张正友经典的论文《A Flexible New Technique for Camera Calibration》针孔模型透镜的畸变标定过程 摄像机几何模型 透镜的畸变模型单应变换 homograph transform2件事情 矫正畸变效应根据获得的图像重构三维场景1. 摄像机模型针孔模型主点 光轴与图像平面的交点cx, cy: 芯片通常不在光轴上故引入这2个变量fx F * sx fy F * syx f*(X/Z) --- xs fx*(X/Z) cxa. 基本投影几何投影变换q M*QM 为(fx, fy, cx, cy)表示的摄像机内参数矩阵Q: 物理点q: 图像平面的点(用投影变换的n1维坐标表示)cvConvertPointsHomogenious 齐次坐标处理函数b. 透镜畸变针孔成像光线少且成像慢故使用透镜但是会引入畸变。径向畸变来自透镜的形状。远离中心畸变越厉害便宜的网络摄像机非常厉害。xc x(1k1*r*rk2*r*r*r*rk3*r*r*r*r*r*r) 注意r的影响切向畸变来自整个摄像机的组装过程透镜本身与图像平面不平行造成的。xc x[2*p1*yp2*(r*r2x*x)]畸变向量 k1 k2 p1 p2 k32. 标定 cvCalibrateCamera2标定方法 摄像机对准一个有很多独立可标识点的物体。通过旋转和移动物体在不同角度观看这个物体可以利用通过每个图像计算摄像机的相对位置和方向以及摄像机的内参数。a. 旋转矩阵和平移向量摄像机坐标系 物体坐标系(世界坐标系)Pc R*(Po - T)3个旋转3个平移 共6个参数64个内参数 10 至少需要2个视角b. 棋盘 cvFindChessboardCornersOPENCV不是使用基于3D构造物体的视场而是使用平面物体的多个视场。cvFindCornerSubPix()提高精度cvDrawChessboardCornersc. 单应性变换 homograph transform单应性从一个平面到另一个平面的投影映射。 (Z 0)如二维平面上的点映射到摄像机成像仪上的映射。q s*M*W*QW [R t] 物理变换M: 内参矩阵H s*M*W 单应性矩阵关注点 不是空间中所有的Q而只是平面上的Q 故使Z 0。opencv 正是利用从多个视场计算多个单应性矩阵的方法来求解摄像机内参数。cvFindHomographyd. 摄像机标定 cvCalibrateCamera2为摄像机内参数和畸变参数进行摄像机标定。d.1.至少需要10幅 7X8的图像d.2 cvFindExtrinsicCameraParams2 只计算外参数3. 矫正a. cvUndistort2b. cvInitUndistortMap cvRemapc. cvUndistortPoints4. 标定完整程序5. cvRodrigues2函数提供2种表示之间的相互转换旋转的表示方法直观的方法 向量r表示简单的方法 旋转矩阵R九、投影和三维视觉1.1 训练集和测试集特征聚类算法 分类算法训练集 测试集 (验证集)分类器训练分类器的方法1.2 监督数据和无监督数据监督数据 数据有标签(人脸有年龄) 分类无监督数据: 数据无标签 聚类分类 回归无监督的聚类数据经常形成一个特征向量供更高层的有监督的分类器使用。两个典型的机器学习任务 分类 聚类计算机视觉的两个基本任务识别 分割1.3 生成模型和判别模型判别算法产生式算法1.4 机器学习算法Mahalanobis (归一化特征的方差) 非分类和聚类算法K均值 非监督的聚类方法朴素贝叶斯分类器 通用的分类器决策树 判别分类器Boosting 多个判别子分类器的组合随机森林 由决策树组成的森林人脸检测/Harr分类器 巧妙使用Boosting期望最大化(EM)K近邻 最简单的分类器神经网络 (字符识别)支持向量机(SVM) 分类和递归1.5 视觉中使用机器学习算法(特征)采集数据 www.flicker.com(图片网站)给数据定标签 (http://www.mturk.com/mturk/welcome)提取特征 (直方图 色彩 ) 处理(归一化)训练集 测试集 验证集选择分类器(计算速度 数据形式 内存大小)1.6 特征向量的重要性决策树随机森林用途减少分类器需要考虑的特征的个数。Breiman的变量重要性算法步骤见P536 (P506)1.7 诊断机器学习中的问题Andrew Ng“Advice for Applying Machine Learning”(http://www.stanford.edu/class/cs229/materials/ML-advice.pdf)a. 大量数据比少量数据好b. 好的特征比好的算法更重要选取特征最大化它们的独立性最小化它们在不同环境之下的变化。c. 欠拟合 模型假设太严格训练和测试都不好d. 过拟合 学习了噪声等训练很好 测试不好e. 常见问题解决 见表13-2f. 评价分类器的性能交叉验证 自抽样法 ROC曲线 混淆矩阵2. ML2.1 函数saveload (先调用clear)cleartrainpredictCvStatModelwriteread2.2 train(行列) (数据样本特征变量)2.3 predict2.4 迭代次数3. Mahalanobis有些分类器(K邻近)很难处理方差很大的数据cvCalcCovarMatrix 计算协方差矩阵cvInvert 计算逆矩阵cvMahalanobis4. K-mean cvKMeans2聚类算法问题和解决 方差最小5. 朴素贝叶斯分类最简单监督学习分类器6. 二叉决策树回归不纯度分类不纯度度量 熵 吉尼系数 错分类特征的重要性 get_var_importance()过拟合 先建立树然后修剪