}}}\r
\r
cv::gpu::StereoBeliefPropagation_GPU::StereoBeliefPropagation_GPU(int ndisp_, int iters_, int levels_)\r
- : ndisp(ndisp_), iters(iters_), levels(levels_), disc_cost(DEFAULT_DISC_COST), data_cost(DEFAULT_DATA_COST), lambda(DEFAULT_LAMBDA_COST), datas(levels_) \r
+ : ndisp(ndisp_), iters(iters_), levels(levels_), disc_cost(DEFAULT_DISC_COST), data_cost(DEFAULT_DATA_COST), lambda(DEFAULT_LAMBDA_COST), datas(levels_)\r
{\r
CV_Assert(0 < ndisp);\r
CV_Assert(ndisp % 8 == 0);\r
}\r
\r
cv::gpu::StereoBeliefPropagation_GPU::StereoBeliefPropagation_GPU(int ndisp_, int iters_, int levels_, float disc_cost_, float data_cost_, float lambda_)\r
- : ndisp(ndisp_), iters(iters_), levels(levels_), disc_cost(disc_cost_), data_cost(data_cost_), lambda(lambda_), datas(levels_) \r
+ : ndisp(ndisp_), iters(iters_), levels(levels_), disc_cost(disc_cost_), data_cost(data_cost_), lambda(lambda_), datas(levels_)\r
{\r
CV_Assert(0 < ndisp);\r
CV_Assert(ndisp % 8 == 0);\r
}\r
\r
-static void stereo_bp_gpu_operator(int ndisp, int iters, int levels, float disc_cost, float data_cost, float lambda, \r
- GpuMat& u, GpuMat& d, GpuMat& l, GpuMat& r, \r
+static void stereo_bp_gpu_operator(int ndisp, int iters, int levels, float disc_cost, float data_cost, float lambda,\r
+ GpuMat& u, GpuMat& d, GpuMat& l, GpuMat& r,\r
GpuMat& u2, GpuMat& d2, GpuMat& l2, GpuMat& r2,\r
vector<GpuMat>& datas, GpuMat& out,\r
- const GpuMat& left, const GpuMat& right, GpuMat& disp, \r
+ const GpuMat& left, const GpuMat& right, GpuMat& disp,\r
const cudaStream_t& stream)\r
{\r
CV_DbgAssert(left.cols == right.cols && left.rows == right.rows && left.type() == right.type() && left.type() == CV_8U);\r
int divisor = (int)pow(2.f, levels - 1.0f);\r
int lowest_cols = cols / divisor;\r
int lowest_rows = rows / divisor;\r
- const int min_image_dim_size = 20;\r
- CV_Assert(min(lowest_cols, lowest_rows) > min_image_dim_size); \r
+ const int min_image_dim_size = 2;\r
+ CV_Assert(min(lowest_cols, lowest_rows) > min_image_dim_size);\r
\r
- u.create(rows * ndisp, cols, CV_32F); \r
- d.create(rows * ndisp, cols, CV_32F); \r
- l.create(rows * ndisp, cols, CV_32F); \r
+ u.create(rows * ndisp, cols, CV_32F);\r
+ d.create(rows * ndisp, cols, CV_32F);\r
+ l.create(rows * ndisp, cols, CV_32F);\r
r.create(rows * ndisp, cols, CV_32F);\r
\r
if (levels & 1)\r
u2 = zero;\r
d2 = zero;\r
l2 = zero;\r
- r2 = zero; \r
+ r2 = zero;\r
}\r
- } \r
+ }\r
\r
impl::load_constants(ndisp, disc_cost, data_cost, lambda);\r
\r
datas.resize(levels);\r
- \r
+\r
AutoBuffer<int> cols_all_buf(levels);\r
AutoBuffer<int> rows_all_buf(levels);\r
AutoBuffer<int> iters_all_buf(levels);\r
\r
impl::comp_data_caller(left, right, datas.front(), stream);\r
\r
- for (int i = 1; i < levels; i++) \r
+ for (int i = 1; i < levels; i++)\r
{\r
cols_all[i] = (cols_all[i-1] + 1)/2;\r
rows_all[i] = (rows_all[i-1] + 1)/2;\r
// we reduce iters num for each next level\r
iters_all[i] = max(2 * iters_all[i-1] / 3, 1);\r
\r
- datas[i].create(rows_all[i] * ndisp, cols_all[i], CV_32F); \r
+ datas[i].create(rows_all[i] * ndisp, cols_all[i], CV_32F);\r
\r
impl::data_down_kernel_caller(cols_all[i], rows_all[i], rows_all[i-1], datas[i-1], datas[i], stream);\r
}\r
- \r
- DevMem2D_<float> mus[] = {u, u2}; \r
+\r
+ DevMem2D_<float> mus[] = {u, u2};\r
DevMem2D_<float> mds[] = {d, d2};\r
- DevMem2D_<float> mrs[] = {r, r2}; \r
+ DevMem2D_<float> mrs[] = {r, r2};\r
DevMem2D_<float> mls[] = {l, l2};\r
\r
int mem_idx = (levels & 1) ? 0 : 1;\r
\r
for (int i = levels - 1; i >= 0; i--) // for lower level we have already computed messages by setting to zero\r
- { \r
- if (i != levels - 1) \r
+ {\r
+ if (i != levels - 1)\r
impl::level_up(mem_idx, cols_all[i], rows_all[i], rows_all[i+1], mus, mds, mls, mrs, stream);\r
\r
impl::call_all_iterations(cols_all[i], rows_all[i], iters_all[i], mus[mem_idx], mds[mem_idx], mls[mem_idx], mrs[mem_idx], datas[i], stream);\r
\r
mem_idx = (mem_idx + 1) & 1;\r
}\r
- \r
+\r
if (disp.empty())\r
disp.create(rows, cols, CV_32S);\r
\r
impl::output_caller(u, d, l, r, datas.front(), disp, stream);\r
}\r
else\r
- { \r
+ {\r
out.create(rows, cols, CV_32S);\r
out = zero;\r
\r
impl::output_caller(u, d, l, r, datas.front(), out, stream);\r
- \r
+\r
out.convertTo(disp, disp.type());\r
}\r
}\r
\r
void cv::gpu::StereoBeliefPropagation_GPU::operator()(const GpuMat& left, const GpuMat& right, GpuMat& disp)\r
-{ \r
+{\r
::stereo_bp_gpu_operator(ndisp, iters, levels, disc_cost, data_cost, lambda, u, d, l, r, u2, d2, l2, r2, datas, out, left, right, disp, 0);\r
}\r
\r