您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > opencv中文参考手册
Cv中文参考手册Cv图像处理Wikipedia,自由的百科全书注意:本章描述图像处理和分析的一些函数。大多数函数都是针对两维象素数组的,这里,我们称这些数组为“图像”,但是它们不一定非得是IplImage结构,也可以是CvMat或者CvMatND结构。梯度、边缘和角点Sobel使用扩展Sobel算子计算一阶、二阶、三阶或混合图像差分voidcvSobel(constCvArr*src,CvArr*dst,intxorder,intyorder,intaperture_size=3);src输入图像.dst输出图像.xorderx方向上的差分阶数yordery方向上的差分阶数aperture_size扩展Sobel核的大小,必须是1,3,5或7。除了尺寸为1,其它情况下,aperture_size×aperture_size可分离内核将用来计算差分。对aperture_size=1的情况,使用3x1或1x3内核(不进行高斯平滑操作)。这里有一个特殊变量CV_SCHARR(=-1),对应3x3Scharr滤波器,可以给出比3x3Sobel滤波更精确的结果。Scharr滤波器系数是:对x-方向以及转置矩阵对y-方向。函数cvSobel通过对图像用相应的内核进行卷积操作来计算图像差分:由于Sobel算子结合了Gaussian平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。通常情况,函数调用采用如下参数(xorder=1,yorder=0,aperture_size=3)或(xorder=0,yorder=1,aperture_size=3)来计算一阶x-或y-方向的图像差分。第一种情况对应:第二种对应:或者核的选则依赖于图像原点的定义(origin来自IplImage结构的定义)。由于该函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素通常具有更大的绝对数值(译者注:即象素的深度)。为防止溢出,当输入图像是8位的,要求输出图像是16位的。当然可以用函数cvConvertScale或cvConvertScaleAbs转换为8位的。除了8-比特图像,函数也接受32-位浮点数图像。所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。Laplace计算图像的Laplacian变换voidcvLaplace(constCvArr*src,CvArr*dst,intaperture_size=3);src输入图像.dst输出图像.aperture_size核大小(与cvSobel中定义一样).函数cvLaplace计算输入图像的Laplacian变换,方法是先用sobel算子计算二阶x-和y-差分,再求和:dst(x,y)=d2src/dx2+d2src/dy2对aperture_size=1则给出最快计算结果,相当于对图像采用如下内核做卷积:类似于cvSobel函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。Canny采用Canny算法做边缘检测voidcvCanny(constCvArr*image,CvArr*edges,doublethreshold1,doublethreshold2,intaperture_size=3);image输入图像.edges输出的边缘图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel算子内核大小(见cvSobel).函数cvCanny采用CANNY算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。PreCornerDetect计算用于角点检测的特征图,voidcvPreCornerDetect(constCvArr*image,CvArr*corners,intaperture_size=3);image输入图像.corners保存候选角点的特征图aperture_sizeSobel算子的核大小(见cvSobel).函数cvPreCornerDetect计算函数其中表示一阶图像差分,表示二阶图像差分。角点被认为是函数的局部最大值://假设图像格式为浮点数IplImage*corners=cvCloneImage(image);IplImage*dilated_corners=cvCloneImage(image);IplImage*corner_mask=cvCreateImage(cvGetSize(image),8,1);cvPreCornerDetect(image,corners,3);cvDilate(corners,dilated_corners,0,1);cvSubS(corners,dilated_corners,corners);cvCmpS(corners,0,corner_mask,CV_CMP_GE);cvReleaseImage(&corners);cvReleaseImage(&dilated_corners);CornerEigenValsAndVecs计算图像块的特征值和特征向量,用于角点检测voidcvCornerEigenValsAndVecs(constCvArr*image,CvArr*eigenvv,intblock_size,intaperture_size=3);image输入图像.eigenvv保存结果的数组。必须比输入图像宽6倍。block_size邻域大小(见讨论).aperture_sizeSobel算子的核尺寸(见cvSobel).对每个象素,函数cvCornerEigenValsAndVecs考虑block_size×block_size大小的邻域S(p),然后在邻域上计算图像差分的相关矩阵:然后它计算矩阵的特征值和特征向量,并且按如下方式(λ1,λ2,x1,y1,x2,y2)存储这些值到输出图像中,其中λ1,λ2-M的特征值,没有排序(x1,y1)-特征向量,对λ1(x2,y2)-特征向量,对λ2CornerMinEigenVal计算梯度矩阵的最小特征值,用于角点检测voidcvCornerMinEigenVal(constCvArr*image,CvArr*eigenval,intblock_size,intaperture_size=3);image输入图像.eigenval保存最小特征值的图像.与输入图像大小一致block_size邻域大小(见讨论cvCornerEigenValsAndVecs).aperture_sizeSobel算子的核尺寸(见cvSobel).当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数.函数cvCornerMinEigenVal与cvCornerEigenValsAndVecs类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的min(λ1,λ2)CornerHarris哈里斯(Harris)角点检测voidcvCornerHarris(constCvArr*image,CvArr*harris_responce,intblock_size,intaperture_size=3,doublek=0.04);image输入图像。harris_responce存储哈里斯(Harris)检测responces的图像。与输入图像等大。block_size邻域大小(见关于cvCornerEigenValsAndVecs的讨论)。aperture_size扩展Sobel核的大小(见cvSobel)。格式.当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数。kHarrisdetectorfreeparameter.Seetheformulabelow.harris检测器的自由参数。请看如下公式。ThefunctioncvCornerHarrisrunstheHarrisedgedetectoronimage.SimilarlytocvCornerMinEigenValandcvCornerEigenValsAndVecs,foreachpixelitcalculates2x2gradientcovariationmatrixMoverblock_size×block_sizeneighborhood.Then,itstoresdet(M)-k*trace(M)2tothedestinationimage.Cornersintheimagecanbefoundaslocalmaximaofthedestinationimage.函数cvCornerHarris对输入图像进行Harris边界检测。类似于cvCornerMinEigenVal和cvCornerEigenValsAndVecs。对每个像素,在block_size*block_size大小的邻域上,计算其2*2梯度共变矩阵(或相关异变矩阵)M。然后,将det(M)-k*trace(M)2(此公式有待考证,最后的“2”是否应为平方符号?)保存到输出图像中。输入图像中的角点在输出图像中由局部最大值表示。FindCornerSubPix精确角点位置voidcvFindCornerSubPix(constCvArr*image,CvPoint2D32f*corners,intcount,CvSizewin,CvSizezero_zone,CvTermCriteriacriteria);image输入图像.corners输入角点的初始坐标,也存储精确的输出坐标count角点数目win搜索窗口的一半尺寸。如果win=(5,5)那么使用5*2+1×5*2+1=11×11大小的搜索窗口zero_zone死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。它是用来避免自相关矩阵出现的某些可能的奇异性。当值为(-1,-1)表示没有死区。criteria求角点的迭代过程的终止条件。即角点位置的确定,要么迭代数大于某个设定值,或者是精确度达到某个设定值。criteria可以是最大迭代数目,或者是设定的精确度,也可以是它们的组合。函数cvFindCornerSubPix通过迭代来发现具有子象素精度的角点位置,或如图所示的放射鞍点(radialsaddlepoints)。子象素级角点定位的实现是基于对向量正交性的观测而实现的,即从中央点q到其邻域点p的向量和p点处的图像梯度正交(服从图像和测量噪声)。考虑以下的表达式:εi=DIpiT•(q-pi)其中,DIpi表示在q的一个邻域点pi处的图像梯度,q的值通过最小化εi得到。通过将εi设为0,可以建立系统方程如下:sumi(DIpi•DIpiT)•q-sumi(DIpi•DIpiT•pi)=0其中q的邻域(搜索窗)中的梯度被累加。调用第一个梯度参数G和第二个梯度参数b,得到:q=G-1•b该算法将搜索窗的中心设为新的中心q,然后迭代,直到找到低于某个阈值点的中心位置。GoodFeaturesToTrack确定图像的强角点voidcvGoodFeaturesToTrack(constCvArr*image,CvArr*eig_image,CvArr*temp_image,CvPoint2D32f*corners,int*corner_count,doublequality_level,doublemin_distance,constCvArr*mask=NULL);image输入图像,8-位或浮点32-比特,单通道eig_image临时浮点32-位图像,尺寸与输入图像一致temp_image另外一个临时图像,格式与尺寸与eig_image一致corners输出参数,检测到的角点corner_count输出参数,检测到的角点数目quality_level最大最小特征值的乘法因子。定义可接受图像角点的最小质量因子。mi
本文标题:opencv中文参考手册
链接地址:https://www.777doc.com/doc-5155692 .html