上一篇介绍了基于生长的棋盘格角点检测方法的大概原理,详见:基于生长的棋盘格角点检测方法–(1)原理介绍
本文进一步从代码解读角度出发,更深入地理解工程中是如何实现的。
本文中用到的代码可以从以下链接下载
http://www.cvlibs.net/software/libcbdetect/
这里我把代码中主要的函数提取出来作为算法骨架,这样比较好和论文对应,可以帮助读者在茫茫代码中抓住重点。
代码框架结构如下,包括了主要的函数。其中缩进表示包含从属关系。
代码框架
I = imread('image.jpg');
corners = findCorners(I,0.01,1);
function template = createCorrelationPatch(angle_1,angle_2,radius)
corners.p = nonMaximumSuppression(img_corners,3,0.025,5);
corners = refineCorners(img_du,img_dv,img_angle,img_weight,corners,10);
[v1,v2] = edgeOrientations(img_angle_sub,img_weight_sub);
corners = scoreCorners(img,img_angle,img_weight,corners,radius);
chessboards = chessboardsFromCorners(corners);
chessboard = initChessboard(corners,i);
energy = chessboardEnergy(chessboard,corners)
proposal{j} = growChessboard(chessboard,corners,j);
pred = predictCorners(p1,p2,p3)
idx = assignClosestCorners(cand,pred);
plotChessboards(chessboards,corners);
本篇先介绍第一个重要函数:
findCorners
该函数的目的是从一幅包含棋盘