📄 opencv用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译) - hunnish的opencv专栏.htm
字号:
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">精确角点位置</SPAN></P><PRE>void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
int count, CvSize win, CvSize zero_zone,
CvTermCriteria criteria );
</PRE>
<P>
<DL>
<DT>image
<DD>输入图像.
<DT>corners
<DD>输入角点的初始坐标,也存储精确的输出坐标
<DT>count
<DD>角点数目
<DT>win
<DD>搜索窗口的一半尺寸。如果 <CODE><SPAN lang=EN-US>win</SPAN></CODE><SPAN
lang=EN-US>=(5,5) 那么使用 5*2+1 × 5*2+1 = 11 × 11 大小的搜索窗口</SPAN>
<DT>zero_zone
<DD>死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。它是用来避免自相关矩阵出现的某些可能的奇异性。当值为<SPAN lang=EN-US>
(-1,-1) 表示没有死区。</SPAN>
<DT>criteria
<DD>求角点的迭代过程的终止条件。即角点位置的确定,要么迭代数大于某个设定值,或者是精确度达到某个设定值。 <CODE><SPAN
lang=EN-US>criteria</SPAN></CODE><SPAN lang=EN-US> 可以是最大迭代数目,也可以是精确度</SPAN>
</DD></DL>
<P>函数 <SPAN lang=EN-US><A
href="file:///C:/DOCUME~1/user/LOCALS~1/Temp/FrontPageTempDir/pvw1.htm#decl_cvFindCornerSubPix">cvFindCornerSubPix</A>
通过迭代来发现具有子象素精度的角点位置,或如图所示的放射鞍点(radial saddle points)。</SPAN></P>
<P><IMG src="" align=center> </P>
<P>Sub-pixel accurate corner locator is based on the observation that every
vector from the center <CODE>q</CODE> to a point <CODE>p</CODE> located within a
neighborhood of <CODE>q</CODE> is orthogonal to the image gradient at
<CODE>p</CODE> subject to image and measurement noise. Consider the
expression:</P><PRE>ε<SUB>i</SUB>=DI<SUB>p<SUB>i</SUB></SUB><SUP>T</SUP>•(q-p<SUB>i</SUB>)
</PRE>
<P>where <CODE>DI<SUB>p<SUB>i</SUB></SUB></CODE> is the image gradient at the
one of the points <CODE>p<SUB>i</SUB></CODE> in a neighborhood of
<CODE>q</CODE>. The value of <CODE>q</CODE> is to be found such that
<CODE>ε<SUB>i</SUB></CODE> is minimized. A system of equations may be set up
with <CODE>ε<SUB>i</SUB></CODE>' set to zero: </P><PRE>sum<SUB>i</SUB>(DI<SUB>p<SUB>i</SUB></SUB>•DI<SUB>p<SUB>i</SUB></SUB><SUP>T</SUP>)•q - sum<SUB>i</SUB>(DI<SUB>p<SUB>i</SUB></SUB>•DI<SUB>p<SUB>i</SUB></SUB><SUP>T</SUP>•p<SUB>i</SUB>) = 0
</PRE>
<P>where the gradients are summed within a neighborhood ("search window") of
<CODE>q</CODE>. Calling the first gradient term <CODE>G</CODE> and the second
gradient term <CODE>b</CODE> gives:</P><PRE>q=G<SUP>-1</SUP>•b
</PRE>
<P>The algorithm sets the center of the neighborhood window at this new center
<CODE>q</CODE> and then iterates until the center keeps within a set
threshold.</P>
<HR>
<H3><A name=decl_cvGoodFeaturesToTrack>GoodFeaturesToTrack</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">确定图像的强角点</SPAN></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>
<P>
<DL>
<DT>image
<DD>输入图像,<SPAN lang=EN-US>8-位或浮点32-比特,单通道</SPAN>
<DT>eig_image
<DD>临时浮点<SPAN lang=EN-US>32-位图像,大小与输入图像一致</SPAN>
<DT>temp_image
<DD>另外一个临时图像,格式与尺寸与 <CODE><SPAN lang=EN-US>eig_image</SPAN></CODE><SPAN
lang=EN-US> 一致</SPAN>
<DT>corners
<DD>输出参数,检测到的角点
<DT>corner_count
<DD>输出参数,检测到的角点数目
<DT>quality_level
<DD>最大最小特征值的乘法因子。定义可接受图像角点的最小质量因子。
<DT>min_distance
<DD>限制因子。得到的角点的最小距离。使用<SPAN lang=EN-US> Euclidian 距离</SPAN>
<DT>mask
<DD><SPAN lang=EN-US>ROI:感兴趣区域。函数在ROI中计算角点,如果 mask 为 NULL,则选择整个图像。</SPAN>
</DD></DL>
<P>函数 <SPAN lang=EN-US><A
href="file:///C:/DOCUME~1/user/LOCALS~1/Temp/FrontPageTempDir/pvw1.htm#decl_cvGoodFeaturesToTrack">cvGoodFeaturesToTrack</A>
在图像中寻找具有大特征值的角点。该函数,首先用<A
href="file:///C:/DOCUME~1/user/LOCALS~1/Temp/FrontPageTempDir/pvw1.htm#decl_cvCornerMinEigenVal">cvCornerMinEigenVal</A>
计算输入图像的每一个象素点的最小特征值,并将结果存储到变量 </SPAN><CODE><SPAN lang=EN-US>eig_image
中。</SPAN></CODE>然后进行非最大值压缩(仅保留<SPAN lang=EN-US>3x3邻域中的局部最大值)。下一步将最小特征值小于
</SPAN><CODE><SPAN lang=EN-US>quality_level</SPAN></CODE><SPAN
lang=EN-US>•max(</SPAN><CODE><SPAN lang=EN-US>eig_image</SPAN></CODE><SPAN
lang=EN-US>(x,y)) 排除掉。最后,函数确保所有发现的角点之间具有足够的距离,(最强的角点第一个保留,然后检查新的角点与已有角点之间的距离大于
</SPAN><CODE><SPAN lang=EN-US>min_distance )。</SPAN></CODE></P><BR><BR>
<P id=TBPingURL>Trackback:
http://tb.blog.csdn.net/TrackBack.aspx?PostId=93171</P></DIV>
<DIV class=postFoot>
<SCRIPT
src="OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译) - HUNNISH的OPENCV专栏.files/PromoteIcon.aspx"></SCRIPT>
[<A href="javascript:StorePage()">点击此处收藏本文</A>] 发表于 2004年09月03日 9:23
AM </DIV></DIV><LINK href="http://blog.csdn.net/hunnish/Services/Pingback.aspx"
rel=pingback><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://blog.csdn.net/hunnish/archive/2004/09/03/93171.aspx"
dc:identifier="http://blog.csdn.net/hunnish/archive/2004/09/03/93171.aspx"
dc:title="OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译)"
trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=93171" />
</rdf:RDF>
-->
<SCRIPT>function hide(){showComment();}</SCRIPT>
<BR>
<SCRIPT>document.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");</SCRIPT>
<BR>
<DIV id=comments>
<H3></H3><A name=95841> </A>
<DIV class=post>
<DIV class=postTitle>victor 发表于2004-09-06 2:32 PM IP:
211.100.22.*</DIV>
<DIV class=postText>牛!</DIV></DIV><BR><A name=129069> </A>
<DIV class=post>
<DIV class=postTitle>大姐 发表于2004-10-09 10:52 AM IP:
61.187.54.*</DIV>
<DIV
class=postText>请问角点提取采用的是哪种算法?能否提供原文?标定模板的交叉角点的提取是不是也是采用这种算法?</DIV></DIV><BR></DIV>
<DIV class=CommentForm id=commentform>
<H3>发表评论</H3>
<TABLE class=CommentForm>
<TBODY>
<TR>
<TD width=69 height=0></TD>
<TD></TD></TR>
<TR>
<TD width=70>大名:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbName style="WIDTH: 300px"
size=40 name=PostComment.ascx:tbName> <SPAN
id=PostComment.ascx_RequiredFieldValidator2
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入尊姓大名"
controltovalidate="PostComment.ascx_tbName"><BR>请输入尊姓大名</SPAN> </TD></TR>
<TR>
<TD width=70>网址:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbUrl style="WIDTH: 300px"
size=40 name=PostComment.ascx:tbUrl> </TD></TR>
<TR>
<TD colSpan=3>评论 <SPAN id=PostComment.ascx_RequiredFieldValidator3
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入评论"
controltovalidate="PostComment.ascx_tbComment"><BR>请输入评论</SPAN> <BR><TEXTAREA id=PostComment.ascx_tbComment style="WIDTH: 381px; HEIGHT: 193px" name=PostComment.ascx:tbComment rows=10 cols=50></TEXTAREA>
</TD></TR>
<TR style="DISPLAY: none">
<TD height=24>验证码</TD>
<TD><INPUT id=PostComment.ascx_ValidationKey style="WIDTH: 150px"
name=PostComment.ascx:ValidationKey> <INPUT id=VCImageSrc type=hidden
value=/VerifyCode.aspx?url=http%3a%2f%2fblog.csdn.net%2fhunnish%2farchive%2f2004%2f09%2f03%2f93171.aspx&datetime=4%2f6%2f2006+6%3a13%3a09+PM&ip=61.167.60.209>
<SPAN id=VCImageSpan></SPAN>
<SCRIPT
src="OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译) - HUNNISH的OPENCV专栏.files/deferShowVerifyImage.js"
type=text/javascript></SCRIPT>
</TD></TR>
<TR>
<TD colSpan=3><INPUT language=javascript class=Button id=PostComment.ascx_btnSubmit onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " type=submit value=提交 name=PostComment.ascx:btnSubmit>
<INPUT id=PostComment.ascx_chkRemember type=checkbox
name=PostComment.ascx:chkRemember><LABEL
for=PostComment.ascx_chkRemember>记住我?</LABEL></TD></TR>
<TR>
<TD colSpan=3><SPAN id=PostComment.ascx_Message
style="COLOR: red"></SPAN></TD></TR></TBODY></TABLE></DIV></DIV>
<P id=footer>Powered by: <BR><A id=Footer1_Hyperlink2
href="http://scottwater.com/blog" name=Hyperlink1><IMG alt=""
src="OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译) - HUNNISH的OPENCV专栏.files/100x30_Logo.gif"
border=0></A> <A id=Footer1_Hyperlink3 href="http://asp.net/"
name=Hyperlink1><IMG alt=""
src="OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译) - HUNNISH的OPENCV专栏.files/PoweredByAsp.Net.gif"
border=0></A> <BR>Copyright © HUNNISH </P>
<SCRIPT
src="OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译) - HUNNISH的OPENCV专栏.files/counter.js"></SCRIPT>
<SCRIPT language=javascript type=text/javascript>
<!--
var Page_Validators = new Array(document.all["PostComment.ascx_RequiredFieldValidator2"], document.all["PostComment.ascx_RequiredFieldValidator3"]);
// -->
</SCRIPT>
<SCRIPT language=javascript type=text/javascript>
<!--
var Page_ValidationActive = false;
if (typeof(clientInformation) != "undefined" && clientInformation.appName.indexOf("Explorer") != -1) {
if ((typeof(Page_ValidationVer) != "undefined") && (Page_ValidationVer == "125"))
ValidatorOnLoad();
}
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
return true;
}
// -->
</SCRIPT>
</FORM>
<SCRIPT language=javascript>
<!--
try{
hide();
}
catch(e){
}
//-->
</SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -