cvfitellipse用的什么过拟合解决方法方法

opencv 椭圆检测识别并画出轮廓_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
opencv 椭圆检测识别并画出轮廓
上传于|0|0|文档简介
&&基于opencv椭圆检测识别并画出轮廓
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢5628人阅读
OpenCV(221)
源文地址:OpenCv中文论坛精华地址)一、基础操作1. 数据类型 数据结构了解&& 图像相关:cvArr& cvMat IplImage&&&&& 数据数组的维数, 与数据的通道数 见P46 (76)2. 常见的矩阵操作熟悉&&&3. 数据的保存和读取4. 图像的加载和显示5. 视频的操作6. 内存与序列&& a. 内存存储器&&&&& CvMemStorage&&&&& 双向链表& 动态对象(cvSeq& cvSet)的内存&&&&& cvCreateMemStorage&&&&& cvReleaseMemStorage&&&&& cvClearMemStorage& 不返还系统&&&&& cvMemStorageAlloc&& b. 序列&&&&& 是内存存储器可以存储的一种对象。 双端队列&&&&& CvSeq&&&&&&&&&&& 方法:&&&&& cvCreateSeq&&&&& cvClearSeq&&&&& cvGetSeqElem&&&&& cvCloneSeq cvSeqSlice cvSeqRemoveSlice cvSeqInsertSlice&&&&&& cvSeqSort&&&&&& cvSeqSearch&&&&&& cvSeqInvert&&&&& cvSeqPartition&&&&& 堆栈操作&& cvSeqPush cvSeqPushFront& cvSeqPop& cvSeqPopFront& cvSeqPushMulti& cvSeqPopMulti&&&&& cvSeqInsert cvSeqRemove&&&&& cvSetSeqBlockSize&&&&& 读出和写入:& CvSeqWriter结构& cvStartWriteSeq& cvStartAppendToSeq& cvEndWriteSeq& cvFlushSeqWriter&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CV_WRITE_SEQ_ELEM& CV_WRITE_SEQ_ELEM_VAR&&&&&&&&&&&&&&&&&& CvSeqReader结构& cvStartReadSeq&& cvGetSeqReaderPos&& cvSetSeqReaderPos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CV_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. 尺寸调整& cvResize&& ROI的影响&&&&& 插值方法的选择5. 图像金字塔& cvPyrDown& cvPyrUp& cvPyrSegmentation&& 简介:源于同一原始图像的连续降采样获得的一个图像的集合。&& 方法:高斯图像金字塔& 拉普拉斯图像金字塔&& 应用:图像分割6. 阀值化 cvThreshold& cvAdaptiveThreshold&& 一般阀值化&& 自适应阀值化: 针对有很强照明或反射梯度的图像,需要根据梯度进行阀值化三、图像的变换1. 卷积 cvFilter2D&& 数学公式: z(t)=f(t)*g(t)= ∫f(m)g(t-m)dm&&&&&&&&&&&& h(x)=(f*g)(x)&& 描述:变换的基础&& 卷积核: 参考点& 核支撑&& 计算方法:图像参考点 = Σ 核点*对应图像点&&&&&&& 卷积边界:& cvCopyMakeBorder2. 梯度和Sobel导数& cvSobel&& 导数的计算:最重要且是最基本的卷积&& 注意: Sobel导数并不是真正的导数,它是离散空间的拟合。&&&&&&&&& 用大核可以对导数有更好的逼近。&& scharr滤波器: sobel算子小核时精度低,应使用scharr滤波器。3. 拉普拉斯变换& cvLaplace&& 描述: 二阶导数& 二阶Sobel导数&& 应用:& 检测&团块&& 边缘检测4. Canny算子 cvCanny&& 描述: 轮廓拼装&& 应用:& 边缘检测5. 霍夫变换&& 应用: 在图像中寻找直线、圆等其他简单图形的方法。&& 霍夫线变换 cvHoughLines2&& 霍夫圆变换 (霍夫梯度法) cvHoughCircles6. 重映射 cvRemap&&&7. 拉伸 收缩 扭曲 旋转&& 仿射变换&&&&&&&&& 稠密仿射变换: cvWarpAffine&&&&&&&&&&&&&&&&&& 计算变换矩阵: cvGetAffineTransform& cv2DRotationMatrix&&&&&&&&& 稀疏仿射变换: cvTransform&&&&&&&&&&&&&&&&&& 应用于一系列孤立点的映射&& 透射变换:&&&&& 密集透射变换:& cvWarpPerspective&&&&&&&&&&&&&&&&&& 计算变换矩阵: cvGetPerspectiveTransform&&&& 稀疏透射变换:& cvPerspectiveTransform8. cvCartToPolar cvPolarToCart&& 笛卡尔坐标系和极坐标系的转换9. LogPolar&& 对数极坐标变换& cvLogPolar10. 离散傅立叶变换 DFT&&&&&&&&&&& cvDFT函数(实现了FFT算法)&&& cvGetOptimalDFTSize& cvGetSubRect&&& cvMulSpectrums11. 离散余弦变换 DCT&&& 实数的处理& cvDCT12. 积分图像& cvIntegral&&& 作用:子区域的快速求和&&& 应用:人脸识别13. 距离变换& cvDistTransform&&& 输入为边缘检测的图像14. 直方图均衡化 cvEqualizeHist&&& 应用:图像亮度分布比较集中, 将亮度分布范围拉宽&&&&&四、直方图&&& 直方图:信息的一种表达方式,数据分布的统计图。&&&&&&&&&&&& 对边缘 色彩& 角& 亮度等特征的统计&&& bin:区间 即竖条1. 数据结构&& CvHistogram&&&2. 操作函数&& cvCreateHist&& cvQueryHistValue_1D&& cvGetHistValue_1D&& cvNormalizeHist&& cvThreshHist&&& cvCopyHist&& cvGetMinMaxHistValue&& cvCalcHist&& cvCompareHist& (五种比较方法: CV_COMP_CORREL CV_COMP_CHISQR CV_COMP_INTERSECT CV_COMP_BHATTACHARYYA EMD)&&&&&&&&&&&&&&&&& 寻找相关和匹配3. 应用&& HSV: H(色调)&&& S(饱和度)&&&& V(亮度值)&& a. EMD 方法& 利用直方图的距离测量来代替直方图的匹配策略&&&&& 光线的变化引起图像颜色值的变化&&&&& cvCalcEMD2&& b. 反向投影(back projection)&&&&& 寻找目标&&&&&& cvCalcBackProject()计算一个像素是否是一个已知目标的一部分&&&&& cvCalcBackProjectPatch()计算一块区域是否包含已知的目标& (区域检测器& 目标检测器)&&&&& 得到目标图像的概率值, 用cvMinMaxLoc()确定目标在图像的位置&& c. 模板匹配 cvMatchTemplate&&&&& 不是基于直方图。通过在输入图像上滑动图像快对实际的图像快和输入图像进行匹配。&&&&&&&&&&& cvNormalize五、轮廓 cvFindContours()&& 根据边缘像素(canny)组装成轮廓。&& 用序列的数据结构表示轮廓信息。&& 处理的图像: cvCanny()输出图像或者 cvThreshold() cvAdaptiveThreshold()的输出图像&& 重要概念:轮廓树&&&&&&&&&&&& 外轮廓(c)& 内轮廓(h& hole)1. cvFindContours()&& 输入图像 8通道 二值化的图像2. 方法&& cvFindContours&& cvStartFindContours&& cvFindNextContour&& cvSubstituteContour&& cvEndFindContour&& cvApproxChains3. 绘制轮廓&& cvDrawContours4. 轮廓的识别和处理&& 简化或拟合轮廓,匹配轮廓到模板&& a. 多边形逼近&&&& cvApproxPoly&&&& cvFindDominantPoints 寻找关键点&&&&& b. 特性概括&&&&& 长度& 其他度量& 轮廓矩&&&&& 长度 cvContourPerimeter() cvArcLength&&&&& 面积 cvContourArea&&&&& 边界框 cvBoundingRect& cvMinAreaRect2&&&&&&&&&&&& cvMinEnclosingCircle 最小包围圆&&&&&&&&&&&& cvFitEllipse2& 最佳拟合圆&& c. 几何& 几个实用函数&&&&& cvMaxRect&&&&& cvBoxPoints&&&&& cvPointSeqFromMat&&&&& cvPointPolygonTest5. 轮廓匹配&& a. 矩&&&&& 轮廓矩:比较2个轮廓最简单的方式&&&&& struct CvMoments&&&&& cvContoursMoments& 输入的是轮廓(CvSeq表示)&&&&& cvMoments&&&&&&&&& 输入的是图像&&&&& cvGetCentralMoment&&&&& cvGetNormalizedCentralMoment&&&&& cvGetHuMoments&&&& Hu矩是中心矩和归一化矩的线性组合&& b. cvMatchShapes 用Hu矩匹配&&&&& c. 等级匹配&&&&& 轮廓树:此处的概念和之前的不同。&&&&& 轮廓树的创建过程。&&&&& 比较2个树的相似度。&&&&& cvCreateContourTree& 创建轮廓树&&&&& cvContourFromContourTree&&&&& cvMatchContourTrees& 比较六、图像的局部和分割&&& 如何从图像中将目标或部分目标分割出来。1. 背景减除&& 快速背景建模方法:光照变化不大的室内&& codebook方法:&&& 室内外环境,周期性运动 灯光缓慢变化(速度较慢)&&&&& 背景和前景&& a. 背景减除缺点&& 假设:所有像素是独立的。&&&&& 亮度的变化&& b. 场景建模&& 前景与背景的转化&& 新的前景-旧的前景-背景&& c. 像素片段&&& 像素在一段时间内变化。&&& 对这种波动建立模型。&&& cvInitLineIterator&&& CV_NEXT_LINE_POINT()&&& d. 帧差&& 最简单的背景减除方法就是用一帧减去另一帧,将差别作为前景。&& cvAbsDiff&& e. 平均背景法&& 适用于:背景场景不包含运动的部分,要求光线保持不变。&& cvAcc() cvAbsDiff() cvInRange()&& 其他类似cvAcc()的累积函数:cvRunningAvg& cvSquareAcc& cvMultiplyAcc&& f. 高级背景建模(codebook算法)&&&&&&&&&&& 适用于:有运动目标(摇曳的树),有光线的变化&&&&& 方法: 得到每个像素或一组像素的时间序列模型。(消耗大量内存)&&&&& codebook(编码本): 一个像素现在的观测值和先前的观测值的比较。&&&&& RGB空间&&&&& YUV空间、&&&&& HSV空间(与亮度相关)& // hue色度,saturation纯度,value亮度&&&&&&&&&&& codebook算法(注意 它不能处理不同模式的光)&&&& f.1 结构&&&&& struct code_book&&&&& struct ce&&&& f.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/Ix&&&&&&& a.1.2 一维光流&&&&&&&&&&&&& 前2个假设&&&&&&&&&&&&& (迭代的方法解决假设不十分正确的情况)&&&&&&& a.1.2 二维光流&&&&&&&&&&&&& 考虑第3个假设解不定方程&&&&&&&&&&&&&&&&&& a.2 金字塔LK算法 cvCalcOpticalFlowPyrLK&&&&&&&& 解决大而不连贯的运动,即不满足小而连贯的假设&&&&&&&&&&& b. 稠密光流&&&& b.1 Horm-Schunck&&&&&&& cvCalcOpticalFlowHS&&&& b.2 块匹配方法&&&&&&& cvCalcOpticalFlowBM6. MEAN-SHIFT& CAM-SHIFT&& a. mean-shift& cvMeanShift&& 通用方法,可以跟踪物体的运动&& b. cam-shift cvCamShift&& 建立在mean-shift之上,跟踪视频中尺寸可能产生变换的目标&& 窗口可以调整7. 运动模板&& 应用: 姿态识别&& 实心轮廓的获取&& 建立模板:cvUpdateMotionHistory (需要传入轮廓)&& 计算梯度:cvCalcMotionGradient&&&& 分割:&&& cvSegmentMotion8. 预估器&& 应用:目标跟踪&&&&& 分两个阶段: 预估阶段& 校正阶段&& a. Kalman Filter&& b. Condensation Algorithm& 粒子滤波(参考书 probalistic robotic)&&&&&&八、 标定&&&&&&&& 张正友经典的论文《A Flexible New Technique for Camera Calibration》&&&&& 针孔模型&&&&& 透镜的畸变&&& 标定过程: 摄像机几何模型& 透镜的畸变模型&& 单应变换&& homograph transform&& 2件事情: 矫正畸变效应;&&&&&&&&&&&&&& 根据获得的图像重构三维场景1. 摄像机模型&& 针孔模型&& 主点: 光轴与图像平面的交点&& cx, cy: 芯片通常不在光轴上,故引入这2个变量&& fx = F * sx& fy = F * sy&&&&& x = f*(X/Z)& ---& xs = fx*(X/Z) + cx&& a. 基本投影几何&&&&& 投影变换&&&&& q = M*Q&&&&& M 为(fx, fy, cx, cy)表示的摄像机内参数矩阵&&&&& Q: 物理点&&&&& q: 图像平面的点(用投影变换的n+1维坐标表示)&&&&& cvConvertPointsHomogenious: 齐次坐标处理函数&& b. 透镜畸变&&&&& 针孔成像光线少,且成像慢,故使用透镜,但是会引入畸变。&&&&&& 径向畸变:来自透镜的形状。&&&&&&&&&&&&&&& 远离中心,畸变越厉害,便宜的网络摄像机非常厉害。&&&&&&&&&&&&&&& xc = x(1+k1*r*r+k2*r*r*r*r+k3*r*r*r*r*r*r) 注意r的影响&&&&& 切向畸变:来自整个摄像机的组装过程;透镜本身与图像平面不平行造成的。&&&&&&&&&&&&&&& xc = x+[2*p1*y+p2*(r*r+2x*x)]&&&&& 畸变向量: k1 k2 p1 p2 k32. 标定 cvCalibrateCamera2&& 标定方法: 摄像机对准一个有很多独立可标识点的物体。通过旋转和移动物体,&&&&&&&&&& 在不同角度观看这个物体,可以利用通过每个图像计算摄像机的相对位置&&&&&&&&&& 和方向以及摄像机的内参数。&&&&&&&&& a. 旋转矩阵和平移向量&&&&& 摄像机坐标系& 物体坐标系(世界坐标系)& &之前的公式是建立在一个坐标系的&&&&&& Pc = R*(Po - T)&&&&& 3个旋转+3个平移& 共6个参数&&&&& 6+4个内参数 = 10 至少需要2个视角??&& b. 棋盘 cvFindChessboardCorners&&&&& OPENCV不是使用基于3D构造物体的视场,而是使用平面物体的多个视场。&&&&& cvFindCornerSubPix()提高精度&&&&& cvDrawChessboardCorners&&&&&&&& c. 单应性变换 homograph transform&&&&&&&&&&& 单应性:从一个平面到另一个平面的投影映射。 (Z = 0)&&&&&&&&&&&&& 如二维平面上的点映射到摄像机成像仪上的映射。&&&&&&&&&&& q = s*M*W*Q&&&&&&&&&&& W = [R t] 物理变换&&&&&&&&&&& M: 内参矩阵&&&& H = s*M*W 单应性矩阵&&&& 关注点: 不是空间中所有的Q,而只是平面上的Q, 故使Z = 0。&&&& opencv 正是利用从多个视场计算多个单应性矩阵的方法来求解摄像机内参数。cvFindHomography&& d. 摄像机标定 cvCalibrateCamera2&&&&& 为摄像机内参数和畸变参数进行摄像机标定。&&&&& d.1.&&&&&&& 至少需要10幅 7X8的图像&&&&& d.2 cvFindExtrinsicCameraParams2 只计算外参数&&&3. 矫正& a. cvUndistort2&& b. cvInitUndistortMap&& cvRemap& c. cvUndistortPoints4. 标定完整程序5. cvRodrigues2&& 函数提供2种表示之间的相互转换&& 旋转的表示方法:&& 直观的方法: 向量r表示&& 简单的方法: 旋转矩阵R九、投影和三维视觉十、机器学习&网络资料1. 基本概念&& 目的:把数据转换为信息。&&1.1 训练集和测试集&& 特征&& &聚类&算法 &分类&算法&&& 训练集& 测试集& (验证集)&&& 分类器&&& 训练分类器的方法1.2 监督数据和无监督数据&&& 监督数据:& 数据有标签(人脸有年龄)&&&& 分类&&& 无监督数据: 数据无标签&&&&&&&&&&&&&&&& 聚类&&& 分类& 回归&&& 无监督的聚类数据经常形成一个特征向量供更高层的有监督的分类器使用。&&&&&& 两个典型的机器学习任务:& 分类& 聚类&&& 计算机视觉的两个基本任务:识别& 分割1.3 生成模型和判别模型&&& 判别算法&&& 产生式算法1.4 机器学习算法&&& Mahalanobis&&&&&& (归一化特征的方差) 非分类和聚类算法&&& K均值&&&&&&&&&&&& 非监督的聚类方法&&& 朴素贝叶斯分类器& 通用的分类器&&& 决策树&&&&&&&&&&& 判别分类器&&& Boosting&&&&&&&&& 多个判别子分类器的组合&&& 随机森林&&&&&&&&& 由决策树组成的&森林&&&& 人脸检测/Harr分类器&& 巧妙使用Boosting&&& 期望最大化(EM)&&&&&&& K近邻&&&&&&&&&&&& 最简单的分类器&&& 神经网络&&&&&&&&& (字符识别)&&& 支持向量机(SVM)&& 分类和递归1.5 视觉中使用机器学习算法&&& (特征)&&& 采集数据&&&&&&&(图片网站)&&& 给数据定标签& ()&&& 提取特征 (直方图 色彩 ) 处理(归一化)&&& 训练集 测试集 验证集&&& 选择分类器(计算速度& 数据形式 内存大小)1.6 特征向量的重要性&&& 决策树&&& 随机森林&&& 用途:减少分类器需要考虑的特征的个数。&&& Breiman的变量重要性算法步骤:见P536 (P506)1.7 诊断机器学习中的问题& Andrew Ng“Advice for Applying Machine Learning”&&()&&& a. 大量数据比少量数据好&&& b. 好的特征比好的算法更重要&&&& 选取特征:&&&&&&&&&&&&& 最大化它们的独立性&&&&&&&&&&&&& 最小化它们在不同环境之下的变化。&&& c. 欠拟合&& 模型假设太严格&&&&&& 训练和测试都不好&&& d. 过拟合&& 学习了噪声等&&&&&& 训练很好& 测试不好&&& e. 常见问题解决& 见表13-2&&& f. 评价分类器的性能&&&&&& 交叉验证& 自抽样法& ROC曲线& 混淆矩阵2. ML2.1 函数&&&& save&&& load& (先调用clear)&&& clear&&& train&&& predict&&& CvStatModel&&& write&&& read2.2 train&&& (行,列) =(数据样本,特征变量)2.3 predict2.4 迭代次数3. Mahalanobis&& 有些分类器(K邻近)很难处理方差很大的数据&& cvCalcCovarMatrix& 计算协方差矩阵&& cvInvert&&&&&&&&&& 计算逆矩阵&& cvMahalanobis4. K-mean&& cvKMeans2&& 聚类算法&& 问题和解决: 方差最小5. 朴素贝叶斯分类&& 最简单监督学习分类器6. 二叉决策树&& 回归不纯度&& 分类不纯度&& 度量: 熵&& 吉尼系数& 错分类&& 特征的重要性& get_var_importance()&& 过拟合: 先建立树,然后修剪
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8326403次
积分:94852
积分:94852
排名:第8名
原创:1132篇
转载:2963篇
评论:1355条
(2)(4)(10)(2)(3)(13)(13)(4)(9)(62)(16)(8)(23)(9)(37)(73)(34)(31)(120)(128)(183)(23)(69)(75)(1)(171)(33)(148)(168)(145)(27)(144)(139)(208)(61)(59)(10)(10)(32)(2)(7)(34)(24)(9)(39)(25)(32)(46)(20)(44)(8)(21)(43)(49)(100)(113)(136)(35)(55)(15)(29)(41)(15)(50)(17)(20)(182)(206)(43)(27)(19)(17)(13)(1)(40)(5)(3)(4)(21)(71)(73)(19)(2)(2)(1)(1)(1)(6)(3)1283人阅读
OpenCV(5)
学习OPEN_CV
OpenCv中文论坛精华地址
一、基础操作
1. 数据类型 数据结构了解
&& 图像相关:cvArr& cvMat IplImage
&& 数据数组的维数, 与数据的通道数
2. 常见的矩阵操作熟悉
3. 数据的保存和读取
4. 图像的加载和显示
5. 视频的操作
6. 内存与序列
&& a. 内存存储器
&&&&& CvMemStorage
&&&&& 双向链表& 动态对象(cvSeq& cvSet)的内存
&&&&& cvCreateMemStorage
&&&&& cvReleaseMemStorage
&&&&& cvClearMemStorage& 不返还系统
&&&&& cvMemStorageAlloc
&& b. 序列
&&&&& 是内存存储器可以存储的一种对象。 双端队列
&&&&& CvSeq
&&&&& 方法:
&&&&& cvCreateSeq
&&&&& cvClearSeq
&&&&& cvGetSeqElem
&&&&& cvCloneSeq cvSeqSlice cvSeqRemoveSlice cvSeqInsertSlice
&&&&& cvSeqSort
&&&&& cvSeqSearch
&&&&& cvSeqInvert
&&&&& cvSeqPartition
&&&&& 堆栈操作&& cvSeqPush cvSeqPushFront& cvSeqPop& cvSeqPopFront& cvSeqPushMulti& cvSeqPopMulti
&&&&& cvSeqInsert cvSeqRemove
&&&&& cvSetSeqBlockSize
&&&&& 读出和写入:& CvSeqWriter结构& cvStartWriteSeq& cvStartAppendToSeq& cvEndWriteSeq& cvFlushSeqWriter
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CV_WRITE_SEQ_ELEM& CV_WRITE_SEQ_ELEM_VAR
&&&&&&&&&&&&&&&&&& CvSeqReader结构& cvStartReadSeq&& cvGetSeqReaderPos&& cvSetSeqReaderPos
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CV_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_BILATERAL
2. 图像形态学 cvErode& cvDilate& cvMorphologyEx
&& 主要作用: 消除噪声& 分割等
&& 相关方法
&& a. 腐蚀&& &消除噪声斑点
&& b. 膨胀&& &连通被噪声、阴影分割的区域
&& c. 开运算 &先腐蚀后膨胀
&& d. 闭运算 &先膨胀后腐蚀
&& e. 形态梯度&
&& f. &礼貌&&
&& g. &黑帽&&
3. 漫水填充算法& cvFloodFill
&& 作用: 标记或者分离图像的一部分。从输入图像获取掩码区域。
&& 原理:& 把邻近区域所有相似点填充为种子点同样的颜色。
4. 尺寸调整& cvResize
&& ROI的影响
&& 插值方法的选择
5. 图像金字塔& cvPyrDown& cvPyrUp& cvPyrSegmentation
&& 简介:源于同一原始图像的连续降采样获得的一个图像的集合。
&& 方法:高斯图像金字塔& 拉普拉斯图像金字塔
&& 应用:图像分割
6. 阀值化 cvThreshold& cvAdaptiveThreshold
&& 一般阀值化
&& 自适应阀值化:针对有很强照明或反射梯度的图像,需要根据梯度进行阀值化
三、图像的变换
1. 卷积 cvFilter2D
&& 数学公式: z(t)=f(t)*g(t)= ∫f(m)g(t-m)dm
&&&&&&&&&&&& h(x)=(f*g)(x)
&& 描述:变换的基础
&& 卷积核: 参考点& 核支撑
&& 计算方法:图像参考点 = Σ 核点*对应图像点
&& 卷积边界:& cvCopyMakeBorder
2. 梯度和Sobel导数& cvSobel
&& 导数的计算:最重要且是最基本的卷积
&& 注意: Sobel导数并不是真正的导数,它是离散空间的拟合。
&&&&&&&&& 用大核可以对导数有更好的逼近。
&& scharr滤波器: sobel算子小核时精度低,应使用scharr滤波器。
3. 拉普拉斯变换& cvLaplace
&& 描述: 二阶导数& 二阶Sobel导数
&& 应用:& 检测&团块&& 边缘检测
4. Canny算子 cvCanny
&& 描述: 轮廓拼装
&& 应用:& 边缘检测
5. 霍夫变换
&& 应用:在图像中寻找直线、圆等其他简单图形的方法。
&& 霍夫线变换 cvHoughLines2
&& 霍夫圆变换 (霍夫梯度法) cvHoughCircles
6. 重映射 cvRemap
7. 拉伸 收缩 扭曲 旋转
&& 仿射变换&
&&&& 稠密仿射变换: cvWarpAffine
&&&&&&&&&&&&&&&&&& 计算变换矩阵: cvGetAffineTransform& cv2DRotationMatrix
&&&& 稀疏仿射变换: cvTransform
&&&&&&&&&&&&&&&&&& 应用于一系列孤立点的映射
&& 透射变换:
&&&& 密集透射变换:& cvWarpPerspective
&&&&&&&&&&&&&&&&&& 计算变换矩阵: cvGetPerspectiveTransform
&&&& 稀疏透射变换:& cvPerspectiveTransform
8. cvCartToPolar cvPolarToCart
&& 笛卡尔坐标系和极坐标系的转换
9. LogPolar
&& 对数极坐标变换& cvLogPolar
10. 离散傅立叶变换 DFT
&&& cvDFT函数(实现了FFT算法)
&&& cvGetOptimalDFTSize& cvGetSubRect
&&& cvMulSpectrums
11. 离散余弦变换 DCT
&&& 实数的处理& cvDCT
12. 积分图像& cvIntegral
&&& 作用:子区域的快速求和
&&& 应用:人脸识别
13. 距离变换& cvDistTransform
&&& 输入为边缘检测的图像
14. 直方图均衡化 cvEqualizeHist
&&& 应用:图像亮度分布比较集中, 将亮度分布范围拉宽
四、直方图
&&& 直方图:信息的一种表达方式,数据分布的统计图。
&&&&&&&&&&& 对边缘 色彩& 角& 亮度等特征的统计
&&& bin:区间即竖条
1. 数据结构
&& CvHistogram
2. 操作函数
&& cvCreateHist
&& cvQueryHistValue_1D
&& cvGetHistValue_1D
&& cvNormalizeHist
&& cvThreshHist
&& cvCopyHist
&& cvGetMinMaxHistValue
&& cvCalcHist
&& cvCompareHist& (五种比较方法: CV_COMP_CORREL CV_COMP_CHISQR CV_COMP_INTERSECT CV_COMP_BHATTACHARYYA EMD)
&&&&&&&&&&&&&&&&& 寻找相关和匹配
&& HSV: H(色调)&&& S(饱和度)&&&& V(亮度值)
&& a. EMD 方法& 利用直方图的距离测量来代替直方图的匹配策略
&&&&& 光线的变化引起图像颜色值的变化
&&&&& cvCalcEMD2
&& b. 反向投影(back projection)
&&&&& 寻找目标
&&&&& cvCalcBackProject()计算一个像素是否是一个已知目标的一部分
&&&&& cvCalcBackProjectPatch()计算一块区域是否包含已知的目标& (区域检测器& 目标检测器)
&&&&& 得到目标图像的概率值, 用cvMinMaxLoc()确定目标在图像的位置
&& c. 模板匹配 cvMatchTemplate
&&&&& 不是基于直方图。通过在输入图像上滑动图像快对实际的图像快和输入图像进行匹配。
&&&&& cvNormalize
五、轮廓 cvFindContours()
&& 根据边缘像素(canny)组装成轮廓。
&& 用序列的数据结构表示轮廓信息。
&& 处理的图像: cvCanny()输出图像或者 cvThreshold() cvAdaptiveThreshold()的输出图像
&& 重要概念:轮廓树
&&&&&&&&&&&& 外轮廓(c)& 内轮廓(h& hole)
1. cvFindContours()
&& 输入图像 8通道 二值化的图像
&& cvFindContours
&& cvStartFindContours
&& cvFindNextContour
&& cvSubstituteContour
&& cvEndFindContour
&& cvApproxChains
3. 绘制轮廓
&& cvDrawContours
4. 轮廓的识别和处理
&& 简化或拟合轮廓,匹配轮廓到模板
&& a. 多边形逼近
&&&& cvApproxPoly
&&&& cvFindDominantPoints 寻找关键点
&& b. 特性概括
&&&&& 长度& 其他度量& 轮廓矩
&&&&& 长度 cvContourPerimeter() cvArcLength
&&&&& 面积 cvContourArea
&&&&& 边界框 cvBoundingRect& cvMinAreaRect2
&&&&&&&&&&&& cvMinEnclosingCircle 最小包围圆
&&&&&&&&&&&& cvFitEllipse2& 最佳拟合圆
&& c. 几何& 几个实用函数
&&&&& cvMaxRect
&&&&& cvBoxPoints
&&&&& cvPointSeqFromMat
&&&&& cvPointPolygonTest
5. 轮廓匹配
&&&&& 轮廓矩:比较2个轮廓最简单的方式
&&&&& struct CvMoments
&&&&& cvContoursMoments& 输入的是轮廓(CvSeq表示)
&&&&& cvMoments&&&&&&&&& 输入的是图像
&&&&& cvGetCentralMoment
&&&&& cvGetNormalizedCentralMoment
&&&&& cvGetHuMoments&&&& Hu矩是中心矩和归一化矩的线性组合
&& b. cvMatchShapes 用Hu矩匹配
&& c. 等级匹配
&&&&& 轮廓树:此处的概念和之前的不同。
&&&&& 轮廓树的创建过程。
&&&&& 比较2个树的相似度。
&&&&& cvCreateContourTree& 创建轮廓树
&&&&& cvContourFromContourTree
&&&&& cvMatchContourTrees& 比较
六、图像的局部和分割
&&& 如何从图像中将目标或部分目标分割出来。
1. 背景减除
&& 快速背景建模方法:光照变化不大的室内
&& codebook方法:&&& 室内外环境,周期性运动 灯光缓慢变化(速度较慢)
&& 背景和前景
&& a. 背景减除缺点
&& 假设:所有像素是独立的。
&& 亮度的变化
&& b. 场景建模
&& 前景与背景的转化
&& 新的前景-旧的前景-背景
&& c. 像素片段
&&& 像素在一段时间内变化。
&&& 对这种波动建立模型。
&&& cvInitLineIterator
&&& CV_NEXT_LINE_POINT()
&& d. 帧差
&& 最简单的背景减除方法就是用一帧减去另一帧,将差别作为前景。
&& cvAbsDiff
&& e. 平均背景法
&& 适用于:背景场景不包含运动的部分,要求光线保持不变。
&& cvAcc() cvAbsDiff() cvInRange()
&& 其他类似cvAcc()的累积函数:cvRunningAvg& cvSquareAcc& cvMultiplyAcc
&& f. 高级背景建模(codebook算法)
&&&&& 适用于:有运动目标(摇曳的树),有光线的变化
&&&&& 方法: 得到每个像素或一组像素的时间序列模型。(消耗大量内存)
&&&&& codebook(编码本): 一个像素现在的观测值和先前的观测值的比较。
&&&&& RGB空间
&&&&& YUV空间、
&&&&& HSV空间(与亮度相关)& // hue色度,saturation纯度,value亮度&&
&&&& codebook算法(注意 它不能处理不同模式的光)
&&&& f.1 结构
&&&&& struct code_book
&&&&& struct ce
&&&& f.2 方法
&&&&& update_codebook:&&&&& 定时调用,训练和学习& (创建codebook模型)
&&&&& clear_stale_entries: 调用update_codebook一段时间后,调用这个函数做清除操作 (清除很少使用的码本条目)
&&&&& background_diff:&&&&& 使用经验模型在先前的背景中将前景目标的像素分割出来
&&&& f.3 codebook算法操作步骤
&&&&&&&&& 见P318(348 )
&& g. 清除前景的连通部分 (学习开运算 闭运算 轮廓好的例程)
&&&&&& 功能强大的在背景中去除噪声的技术
&&&&& find_connected_components
2. 分水岭算法&&& 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. 不变特征
&& a. 稀疏光流
&&&& a.1 LK算法 cvCalcOpticalFlowLK
&&&&&&&& 感兴趣点的小窗口。
&&&&&&&& 缺点: 点会移出小窗口
&&&&&&& a.1.1 原理
&&&&&&&&&&&&& 3个假设& 亮度恒定;时间连续或者运动是&小运动;空间一致
&&&&&&&&&&&&& v = - It/Ix
&&&&&&& a.1.2 一维光流
&&&&&&&&&&&&& 前2个假设
&&&&&&&&&&&&& (迭代的方法解决假设不十分正确的情况)
&&&&&&& a.1.2 二维光流
&&&&&&&&&&&&& 考虑第3个假设解不定方程
&&&&&&&&&&&&&
&&&& a.2 金字塔LK算法 cvCalcOpticalFlowPyrLK
&&&&&&&& 解决大而不连贯的运动,即不满足小而连贯的假设
&& b. 稠密光流
&&&& b.1 Horm-Schunck
&&&&&&& cvCalcOpticalFlowHS
&&&& b.2 块匹配方法
&&&&&&& cvCalcOpticalFlowBM
6. MEAN-SHIFT& CAM-SHIFT
&& a. mean-shift& cvMeanShift
&& 通用方法,可以跟踪物体的运动
&& b. cam-shift cvCamShift
&& 建立在mean-shift之上,跟踪视频中尺寸可能产生变换的目标
&& 窗口可以调整
7. 运动模板
&& 应用: 姿态识别
&& 实心轮廓的获取
&& 建立模板:cvUpdateMotionHistory (需要传入轮廓)
&& 计算梯度:cvCalcMotionGradient&
&& 分割:&&& cvSegmentMotion
&& 应用:目标跟踪
&& 分两个阶段: 预估阶段& 校正阶段
&& a. Kalman Filter
&& b. Condensation Algorithm& 粒子滤波(参考书 probalistic robotic)
&& 张正友经典的论文《A Flexible New Technique for Camera Calibration》
&& 针孔模型&&
&& 透镜的畸变
&& 标定过程:摄像机几何模型& 透镜的畸变模型
&& 单应变换&& homograph transform
&& 2件事情:矫正畸变效应;&
&&&&&&&&&&&& 根据获得的图像重构三维场景
1. 摄像机模型
&& 针孔模型
&& 主点: 光轴与图像平面的交点
&& cx, cy: 芯片通常不在光轴上,故引入这2个变量
&& fx = F * sx& fy = F * sy
&& x = f*(X/Z)& ---& xs = fx*(X/Z) + cx
&& a. 基本投影几何
&&&&& 投影变换
&&&&& q = M*Q
&&&&& M 为(fx, fy, cx, cy)表示的摄像机内参数矩阵
&&&&& Q: 物理点
&&&&& q: 图像平面的点(用投影变换的n+1维坐标表示)
&&&&& cvConvertPointsHomogenious: 齐次坐标处理函数
&& b. 透镜畸变
&&&&& 针孔成像光线少,且成像慢,故使用透镜,但是会引入畸变。
&&&&& 径向畸变:来自透镜的形状。
&&&&&&&&&&&&&&& 远离中心,畸变越厉害,便宜的网络摄像机非常厉害。
&&&&&&&&&&&&&&& xc = x(1+k1*r*r+k2*r*r*r*r+k3*r*r*r*r*r*r) 注意r的影响
&&&&& 切向畸变:来自整个摄像机的组装过程;透镜本身与图像平面不平行造成的。
&&&&&&&&&&&&&&& xc = x+[2*p1*y+p2*(r*r+2x*x)]
&&&&& 畸变向量: k1 k2 p1 p2 k3
2. 标定 cvCalibrateCamera2
&& 标定方法:摄像机对准一个有很多独立可标识点的物体。通过旋转和移动物体,
&&&&&&&&&& 在不同角度观看这个物体,可以利用通过每个图像计算摄像机的相对位置
&&&&&&&&&& 和方向以及摄像机的内参数。
&& a. 旋转矩阵和平移向量
&&&&& 摄像机坐标系& 物体坐标系(世界坐标系)& &之前的公式是建立在一个坐标系的&
&&&&& Pc = R*(Po - T)
&&&&& 3个旋转+3个平移& 共6个参数
&&&&& 6+4个内参数 = 10 至少需要2个视角??
&& b. 棋盘 cvFindChessboardCorners
&&&&& OPENCV不是使用基于3D构造物体的视场,而是使用平面物体的多个视场。
&&&&& cvFindCornerSubPix()提高精度
&&&&& cvDrawChessboardCorners
&& c. 单应性变换 homograph transform
&&&&& 单应性:从一个平面到另一个平面的投影映射。 (Z = 0)
&&&&&&&&&&&&& 如二维平面上的点映射到摄像机成像仪上的映射。
&&&&&&&&&&& q = s*M*W*Q
&&&&&&&&&&& W = [R t] 物理变换
&&&&&&&&&&& M: 内参矩阵
&&&& H = s*M*W 单应性矩阵
&&&& 关注点: 不是空间中所有的Q,而只是平面上的Q, 故使Z = 0。
&&&& opencv 正是利用从多个视场计算多个单应性矩阵的方法来求解摄像机内参数。cvFindHomography
&& d. 摄像机标定 cvCalibrateCamera2
&&&&& 为摄像机内参数和畸变参数进行摄像机标定。
&&&&& d.1.
&&&&&& 至少需要10幅 7X8的图像
&&&&& d.2 cvFindExtrinsicCameraParams2 只计算外参数
& a. cvUndistort2
& b. cvInitUndistortMap&& cvRemap
& c. cvUndistortPoints
4. 标定完整程序
5. cvRodrigues2
&& 函数提供2种表示之间的相互转换
&& 旋转的表示方法:
&& 直观的方法: 向量r表示
&& 简单的方法: 旋转矩阵R
九、投影和三维视觉
十、机器学习
1. 基本概念
&& 目的:把数据转换为信息。&&
1.1 训练集和测试集
&& &聚类&算法 &分类&算法
&&& 训练集& 测试集& (验证集)
&&& 分类器
&&& 训练分类器的方法
1.2 监督数据和无监督数据
&&& 监督数据:& 数据有标签(人脸有年龄)&&&& 分类
&&& 无监督数据: 数据无标签&&&&&&&&&&&&&&&& 聚类
&&& 分类& 回归
&&& 无监督的聚类数据经常形成一个特征向量供更高层的有监督的分类器使用。
&&& 两个典型的机器学习任务:& 分类& 聚类
&&& 计算机视觉的两个基本任务:识别& 分割
1.3 生成模型和判别模型
&&& 判别算法
&&& 产生式算法
1.4 机器学习算法
&&& Mahalanobis&&&&&& (归一化特征的方差) 非分类和聚类算法
&&& K均值&&&&&&&&&&&& 非监督的聚类方法
&&& 朴素贝叶斯分类器& 通用的分类器
&&& 决策树&&&&&&&&&&& 判别分类器
&&& Boosting&&&&&&&&& 多个判别子分类器的组合
&&& 随机森林&&&&&&&&& 由决策树组成的&森林&
&&& 人脸检测/Harr分类器&& 巧妙使用Boosting
&&& 期望最大化(EM)&&&
&&& K近邻&&&&&&&&&&&& 最简单的分类器
&&& 神经网络&&&&&&&&& (字符识别)
&&& 支持向量机(SVM)&& 分类和递归
1.5 视觉中使用机器学习算法
&&& (特征)
&&& 采集数据&&&&&& (图片网站)
&&& 给数据定标签& ()
&&& 提取特征 (直方图 色彩) 处理(归一化)
&&& 训练集 测试集验证集
&&& 选择分类器(计算速度& 数据形式 内存大小)
1.6 特征向量的重要性
&&& 决策树
&&& 随机森林
&&& 用途:减少分类器需要考虑的特征的个数。
&&& Breiman的变量重要性算法步骤:见P536 (P506)
1.7 诊断机器学习中的问题
& Andrew Ng“Advice for Applying Machine Learning”
&&& a. 大量数据比少量数据好
&&& b. 好的特征比好的算法更重要
&&&& 选取特征:
&&&&&&&&&&&&& 最大化它们的独立性
&&&&&&&&&&&&& 最小化它们在不同环境之下的变化。
&&& c. 欠拟合&& 模型假设太严格
&&&&&& 训练和测试都不好
&&& d. 过拟合&& 学习了噪声等
&&&&&& 训练很好& 测试不好
&&& e. 常见问题解决& 见表13-2
&&& f. 评价分类器的性能
&&&&&& 交叉验证& 自抽样法& ROC曲线& 混淆矩阵
&&& load& (先调用clear)
&&& predict
&&& CvStatModel
&&& (行,列) =(数据样本,特征变量)
2.3 predict
2.4 迭代次数
3. Mahalanobis
&& 有些分类器(K邻近)很难处理方差很大的数据
&& cvCalcCovarMatrix& 计算协方差矩阵
&& cvInvert&&&&&&&&&& 计算逆矩阵
&& cvMahalanobis
4. K-mean&& cvKMeans2
&& 聚类算法
&& 问题和解决: 方差最小
5. 朴素贝叶斯分类
&& 最简单监督学习分类器
6. 二叉决策树
&& 回归不纯度
&& 分类不纯度
&& 度量:熵&& 吉尼系数& 错分类
&& 特征的重要性& get_var_importance()
&& 过拟合: 先建立树,然后修剪
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:165625次
积分:2476
积分:2476
排名:第12436名
原创:69篇
转载:56篇
评论:26条
(1)(1)(3)(1)(3)(3)(2)(6)(5)(7)(1)(2)(2)(1)(2)(1)(2)(1)(6)(9)(3)(5)(14)(12)(1)(2)(1)(5)(15)(1)(2)(4)(3)(1)

我要回帖

更多关于 过拟合解决方法 的文章

 

随机推荐