# Potential bug in Shape Context

Line: 235

In function computeDistance(InputArray contour1, InputArray contour2) the following line seems to be a potential bug. The computation of shape context descriptor of the first shape is fine since it uses its own mean distance for distance noramlisation. However, the second shape is using he mean distance of first shape. The two shapes can be different in the scales so they should use their own mean distance to normalise themselves.

set2SCE.extractSCD(set2, set2SCD, inliers2, set1SCE.getMeanDistance());

edit retag close merge delete

I have to review the paper again, and see if I remember why I did it like this. But in any case, the shape distance should be somewhat invariant to scale transformations, since the affine correction within the TPS transformation is of very low cost. What you say makes sense though.

( 2015-07-25 15:01:39 -0500 )edit

Sort by » oldest newest most voted

I have found the reason. It comes from the reference Matlab implementation, the comments explain it:

   % compute shape contexts for (transformed) model
[BH1,mean_dist_1]=sc_compute(Xk',zeros(1,nsamp1),mean_dist_global,nbins_theta,nbins_r,r_inner,r_outer,out_vec_1);

% compute shape contexts for target, using the scale estimate from
% the warped model
% Note: this is necessary only because out_vec_2 can change on each
% iteration, which affects the shape contexts.  Otherwise, Y does
% not change.
[BH2,mean_dist_2]=sc_compute(Y',zeros(1,nsamp2),mean_dist_1,nbins_theta,nbins_r,r_inner,r_outer,out_vec_2);

more

Official site

GitHub

Wiki

Documentation