⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cv中文参考手册 - fsawiki.htm

📁 Opencv的中文参考指南
💻 HTM
📖 第 1 页 / 共 5 页
字号:
|1 -4  1|
|0  1  0|
</PRE>
<P>类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。 </P>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=5">编辑</A>]</DIV><A 
name=Canny></A>
<H3>Canny</H3>
<P>采用 Canny 算法做边缘检测 </P><PRE>void cvCanny( const CvArr* image, CvArr* edges, double threshold1,
              double threshold2, int aperture_size=3 );
</PRE>
<DL>
  <DT>image 
  <DD>输入图像. 
  <DT>edges 
  <DD>输出的边缘图像 
  <DT>threshold1 
  <DD>第一个阈值 
  <DT>threshold2 
  <DD>第二个阈值 
  <DT>aperture_size 
  <DD>Sobel 算子内核大小 (见 cvSobel). </DD></DL>
<P>函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 
当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。 </P>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=6">编辑</A>]</DIV><A 
name=PreCornerDetect></A>
<H3>PreCornerDetect</H3>
<P>计算用于角点检测的特征图, </P><PRE>void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );
</PRE>
<DL>
  <DT>image 
  <DD>输入图像. 
  <DT>corners 
  <DD>保存候选角点的特征图 
  <DT>aperture_size 
  <DD>Sobel 算子的核大小(见cvSobel). </DD></DL>
<P>函数 cvPreCornerDetect 计算函数 Dx2Dyy+Dy2Dxx - 2DxDyDxy 其中 D? 表示一阶图像差分,D?? 
表示二阶图像差分。 角点被认为是函数的局部最大值: </P><PRE>// 假设图像格式为浮点数
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( &amp;corners );
cvReleaseImage( &amp;dilated_corners );
</PRE>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=7">编辑</A>]</DIV><A 
name=CornerEigenValsAndVecs></A>
<H3>CornerEigenValsAndVecs</H3>
<P>计算图像块的特征值和特征向量,用于角点检测 </P><PRE>void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
                               int block_size, int aperture_size=3 );
</PRE>
<DL>
  <DT>image 
  <DD>输入图像. 
  <DT>eigenvv 
  <DD>保存结果的数组。必须比输入图像宽 6 倍。 
  <DT>block_size 
  <DD>邻域大小 (见讨论). 
  <DT>aperture_size 
  <DD>Sobel 算子的核尺寸(见 cvSobel). </DD></DL>
<P>对每个象素,函数 cvCornerEigenValsAndVecs 考虑 block_size × block_size 大小的邻域 
S(p),然後在邻域上计算图像差分的相关矩阵: </P><PRE>    | sumS(p)(dI/dx)2   sumS(p)(dI/dx•dI/dy)|
M = |                                 |
    | sumS(p)(dI/dx•dI/dy)  sumS(p)(dI/dy)2 |
</PRE>
<P>然後它计算矩阵的特征值和特征向量,并且按如下方式(λ1, λ2, x1, y1, x2, y2)存储这些值到输出图像中,其中 </P>
<DL>
  <DD>λ1, λ2 - M 的特征值,没有排序 
  <DD>(x1, y1) - 特征向量,对 λ1 
  <DD>(x2, y2) - 特征向量,对 λ2 </DD></DL>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=8">编辑</A>]</DIV><A 
name=CornerMinEigenVal></A>
<H3>CornerMinEigenVal</H3>
<P>计算梯度矩阵的最小特征值,用于角点检测 </P><PRE>void cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval, int block_size, int aperture_size=3 );
</PRE>
<DL>
  <DT>image 
  <DD>输入图像. 
  <DT>eigenval 
  <DD>保存最小特征值的图像. 与输入图像大小一致 
  <DT>block_size 
  <DD>邻域大小 (见讨论 cvCornerEigenValsAndVecs). 
  <DT>aperture_size 
  <DD>Sobel 算子的核尺寸(见 cvSobel). 当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数. </DD></DL>
<P>函数 cvCornerMinEigenVal 与 cvCornerEigenValsAndVecs 
类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的 min(λ1, λ2) </P>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=9">编辑</A>]</DIV><A 
name=FindCornerSubPix></A>
<H3>FindCornerSubPix</H3>
<P>精确角点位置 </P><PRE>void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
                         int count, CvSize win, CvSize zero_zone,
                         CvTermCriteria criteria );
</PRE>
<DL>
  <DT>image 
  <DD>输入图像. 
  <DT>corners 
  <DD>输入角点的初始坐标,也存储精确的输出坐标 
  <DT>count 
  <DD>角点数目 
  <DT>win 
  <DD>搜索窗口的一半尺寸。如果 win=(5,5) 那么使用 5*2+1 × 5*2+1 = 11 × 11 大小的搜索窗口 
  <DT>zero_zone 
  <DD>死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。它是用来避免自相关矩阵出现的某些可能的奇异性。当值为 (-1,-1) 表示没有死区。 
  <DT>criteria 
  <DD>求角点的迭代过程的终止条件。即角点位置的确定,要么迭代数大于某个设定值,或者是精确度达到某个设定值。 criteria 
  可以是最大迭代数目,或者是设定的精确度,也可以是它们的组合。 </DD></DL>
<P>函数 cvFindCornerSubPix 通过迭代来发现具有子象素精度的角点位置,或如图所示的放射鞍点(radial saddle points)。 
</P>
<P><A class=image title=Image:Cornersubpix.png 
href="http://fsa.ia.ac.cn/mediawiki/index.php/Image:Cornersubpix.png"><IMG 
height=221 alt=Image:Cornersubpix.png 
src="Cv中文参考手册 - FSAWiki.files/Cornersubpix.png" width=519 
longDesc=/mediawiki/index.php/Image:Cornersubpix.png></A> </P>
<P>子象素级角点定位的实现是基于对向量正交性的观测而实现的,即从中央点q到其邻域点p 的向量和p点处的图像梯度正交(服从图像和测量噪声)。考虑以下的表达式: 
</P><PRE>εi=DIpiT•(q-pi)
</PRE>
<P>其中,DIpi表示在q的一个邻域点pi处的图像梯度,q的值通过最小化εi得到。通过将εi设为0,可以建立系统方程如下: </P><PRE>sumi(DIpi•DIpiT)•q - sumi(DIpi•DIpiT•pi) = 0
</PRE>
<P>其中q的邻域(搜索窗)中的梯度被累加。调用第一个梯度参数G和第二个梯度参数b,得到: </P><PRE>q=G-1•b
</PRE>
<P>该算法将搜索窗的中心设为新的中心q,然後迭代,直到找到低于某个阈值点的中心位置。 </P>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=10">编辑</A>]</DIV><A 
name=GoodFeaturesToTrack></A>
<H3>GoodFeaturesToTrack</H3>
<P>确定图像的强角点 </P><PRE>void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image,
                            CvPoint2D32f* corners, int* corner_count,
                            double quality_level, double min_distance,
                            const CvArr* mask=NULL );
</PRE>
<DL>
  <DT>image 
  <DD>输入图像,8-位或浮点32-比特,单信道 
  <DT>eig_image 
  <DD>临时浮点32-位图像,尺寸与输入图像一致 
  <DT>temp_image 
  <DD>另外一个临时图像,格式与尺寸与 eig_image 一致 
  <DT>corners 
  <DD>输出参数,检测到的角点 
  <DT>corner_count 
  <DD>输出参数,检测到的角点数目 
  <DT>quality_level 
  <DD>最大最小特征值的乘法因子。定义可接受图像角点的最小质量因子。 
  <DT>min_distance 
  <DD>限制因子。得到的角点的最小距离。使用 Euclidian 距离 
  <DT>mask 
  <DD>ROI:感兴趣区域。函数在ROI中计算角点,如果 mask 为 NULL,则选择整个图像。 </DD></DL>
<P>函数 cvGoodFeaturesToTrack 在图像中寻找具有大特征值的角点。该函数,首先用cvCornerMinEigenVal 
计算输入图像的每一个象素点的最小特征值,并将结果存储到变量 eig_image 
中。然後进行非最大值抑制(仅保留3x3邻域中的局部最大值)。下一步将最小特征值小于 quality_level•max(eig_image(x,y)) 
排除掉。最後,函数确保所有发现的角点之间具有足够的距离,(最强的角点第一个保留,然後检查新的角点与已有角点之间的距离大于 min_distance )。 
</P>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=11">编辑</A>]</DIV><A 
name=.E9.87.87.E6.A0.B7.E3.80.81.E5.B7.AE.E5.80.BC.E5.92.8C.E5.87.A0.E4.BD.95.E5.8F.98.E6.8D.A2></A>
<H2>采样、差值和几何变换</H2>
<DIV class=editsection style="FLOAT: right; MARGIN-LEFT: 5px">[<A title=Cv中文参考手册 
href="http://fsa.ia.ac.cn/mediawiki/index.php?title=Cv%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C&amp;action=edit&amp;section=12">编辑</A>]</DIV><A 
name=InitLineIterator></A>
<H3>InitLineIterator</H3>
<P>初始化线段迭代器 </P><PRE>int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2,
                        CvLineIterator* line_iterator, int connectivity=8 );
</PRE>
<DL>
  <DT>image 
  <DD>带采线段的输入图像. 
  <DT>pt1 
  <DD>线段起始点 
  <DT>pt2 
  <DD>线段结束点 
  <DT>line_iterator 
  <DD>指向线段迭代器状态结构的指针 
  <DT>connectivity 
  <DD>被扫描线段的连通数,4 或 8. </DD></DL>
<P>函数 cvInitLineIterator 
初始化线段迭代器,并返回两点之间的象素点数目。两个点必须在图像内。当迭代器初始化後,连接两点的光栅线上所有点,都可以连续通过调用 
CV_NEXT_LINE_POINT 来得到。线段上的点是使用 4-连通或8-连通利用 Bresenham 算法逐点计算的。 </P>
<P>例子:使用线段迭代器计算彩色线上象素值的和 </P><PRE>CvScalar sum_line_pixels( IplImage* image, CvPoint pt1, CvPoint pt2 )
{
    CvLineIterator iterator;
    int blue_sum = 0, green_sum = 0, red_sum = 0;
    int count = cvInitLineIterator( image, pt1, pt2, &amp;iterator, 8 );

    for( int i = 0; i &lt; count; i++ ){
        blue_sum += iterator.ptr[0];
        green_sum += iterator.ptr[1];
        red_sum += iterator.ptr[2];
        CV_NEXT_LINE_POINT(iterator);

        /* print the p

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -