fixed the cuda optical flow error normalization factor

texture channels were not considered correctly, nor was the cuda texture
normalization
pull/6769/head
Andreas Franek 9 years ago
parent bbc327aaed
commit 8d43e2b945
  1. 16
      modules/cudaoptflow/src/cuda/pyrlk.cu

@ -344,6 +344,18 @@ namespace pyrlk
return ret;
}
template <typename T>
struct DenormalizationFactor
{
static const float factor = 1.0;
};
template <>
struct DenormalizationFactor<uchar>
{
static const float factor = 255.0;
};
template <int cn, int PATCH_X, int PATCH_Y, bool calcErr, typename T>
__global__ void sparseKernel(const float2* prevPts, float2* nextPts, uchar* status, float* err, const int level, const int rows, const int cols)
{
@ -532,7 +544,7 @@ namespace pyrlk
nextPts[blockIdx.x] = nextPt;
if (calcErr)
err[blockIdx.x] = static_cast<float>(errval) / (cn * c_winSize_x * c_winSize_y);
err[blockIdx.x] = static_cast<float>(errval) / (::min(cn, 3) * c_winSize_x * c_winSize_y) * DenormalizationFactor<T>::factor;
}
}
@ -725,7 +737,7 @@ namespace pyrlk
nextPts[blockIdx.x] = nextPt;
if (calcErr)
err[blockIdx.x] = static_cast<float>(errval) / (3 * c_winSize_x * c_winSize_y);
err[blockIdx.x] = static_cast<float>(errval) / (::min(cn, 3)*c_winSize_x * c_winSize_y);
}
} // __global__ void sparseKernel_

Loading…
Cancel
Save