Commit 8d43e2b9 authored by Andreas Franek's avatar Andreas Franek

fixed the cuda optical flow error normalization factor

texture channels were not considered correctly, nor was the cuda texture
normalization
parent bbc327aa
......@@ -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_
......@@ -1109,4 +1121,4 @@ namespace pyrlk
template class pyrLK_caller<float, 4>;
}
#endif /* CUDA_DISABLER */
\ No newline at end of file
#endif /* CUDA_DISABLER */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment