LBP: implemented first version of device side part
This commit is contained in:
@@ -40,15 +40,51 @@
|
||||
//
|
||||
//M*/
|
||||
|
||||
#include <opencv2/gpu/device/detail/lbp.hpp>
|
||||
#include <opencv2/gpu/device/lbp.hpp>
|
||||
|
||||
namespace cv { namespace gpu { namespace device
|
||||
{
|
||||
namespace lbp
|
||||
{
|
||||
void CascadeClassify(DevMem2Db image, DevMem2Db objects, double scaleFactor=1.2, int minNeighbors=4, cudaStream_t stream)
|
||||
__global__ void lbp_classify(const DevMem2D_< ::cv::gpu::device::Stage> stages, const DevMem2Di trees, const DevMem2Db nodes, const DevMem2Df leaves, const DevMem2Di subsets,
|
||||
const DevMem2Db integral, float step, int subsetSize, DevMem2D_<int4> objects)
|
||||
{
|
||||
unsigned int x = threadIdx.x;
|
||||
unsigned int y = blockIdx.x;
|
||||
int nodeOfs = 0, leafOfs = 0;
|
||||
::cv::gpu::device::Feature feature;
|
||||
|
||||
for (int s = 0; s < stages.cols; s++ )
|
||||
{
|
||||
::cv::gpu::device::Stage stage = stages(0, s);
|
||||
int sum = 0;
|
||||
for (int w = 0; w < stage.ntrees; w++)
|
||||
{
|
||||
::cv::gpu::device::ClNode node = nodes(0, nodeOfs);
|
||||
char c = feature();// TODO: inmplement it
|
||||
const int subsetIdx = (nodeOfs * subsetSize);
|
||||
int idx = subsetIdx + ((c >> 5) & ( 1 << (c & 31)) ? leafOfs : leafOfs + 1);
|
||||
sum += leaves(0, subsets(0, idx) );
|
||||
nodeOfs++;
|
||||
leafOfs += 2;
|
||||
}
|
||||
|
||||
if (sum < stage.threshold)
|
||||
return; // nothing matched
|
||||
return;//mathed
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void cascadeClassify(const DevMem2Db bstages, const DevMem2Di trees, const DevMem2Db nodes, const DevMem2Df leaves, const DevMem2Di subsets,
|
||||
const DevMem2Db integral, int workWidth, int workHeight, int step, int subsetSize, DevMem2D_<int4> objects, int minNeighbors, cudaStream_t stream)
|
||||
{
|
||||
printf("CascadeClassify");
|
||||
int blocks = ceilf(workHeight / (float)step);
|
||||
int threads = ceilf(workWidth / (float)step);
|
||||
DevMem2D_< ::cv::gpu::device::Stage> stages = DevMem2D_< ::cv::gpu::device::Stage>(bstages);
|
||||
|
||||
lbp_classify<<<blocks, threads>>>(stages, trees, nodes, leaves, subsets, integral, step, subsetSize, objects);
|
||||
}
|
||||
}
|
||||
}}}
|
||||
Reference in New Issue
Block a user