//===========================================================================
void Align2DShapes(cv::Mat &src,cv::Mat &dst,double &scale,double &theta)
{
  int n = src.rows/2;
  assert((src.cols == 1) && (dst.rows == 2*n) && (dst.cols == 1));
  int i; double a,b,c;
  for(i = 0, a = b = c = 0.0; i < n; i++){
    a += src.rl(i,0)*src.rl(i  ,0)+src.rl(i+n,0)*src.rl(i+n,0);
    b += src.rl(i,0)*dst.rl(i  ,0)+src.rl(i+n,0)*dst.rl(i+n,0);
    c += src.rl(i,0)*dst.rl(i+n,0)-src.rl(i+n,0)*dst.rl(i  ,0);
  }
  b /= a; c /= a; scale = std::sqrt(b*b+c*c); theta = std::atan2(c,b); return;
}