1 #ifndef _RSLF_DEPTH_COMPUTATION_CORE 2 #define _RSLF_DEPTH_COMPUTATION_CORE 7 #include <opencv2/imgproc/imgproc.hpp> 9 #include <rslf_interpolation.hpp> 10 #include <rslf_kernels.hpp> 16 #define _MEAN_SHIFT_MAX_ITER 10 17 #define _EDGE_CONFIDENCE_FILTER_SIZE 9 18 #define _MEDIAN_FILTER_SIZE 5 19 #define _MEDIAN_FILTER_EPSILON 0.1 20 #define _EDGE_SCORE_THRESHOLD 0.02 21 #define _DISP_SCORE_THRESHOLD 0.01 22 #define _PROPAGATION_EPSILON 0.1 24 #define _BANDWIDTH_KERNEL_PARAMETER 0.2 26 #define _EDGE_CONFIDENCE_OPENING_TYPE cv::MORPH_ELLIPSE 27 #define _EDGE_CONFIDENCE_OPENING_SIZE 1 29 #define _SHADOW_NORMALIZED_LEVEL 0.05 * 1.73205080757 64 template<
typename DataType>
69 bool m_owner_classes =
false;
78 par_edge_score_threshold = _EDGE_SCORE_THRESHOLD;
79 par_disp_score_threshold = _DISP_SCORE_THRESHOLD;
80 par_mean_shift_max_iter = _MEAN_SHIFT_MAX_ITER;
82 par_edge_confidence_filter_size = _EDGE_CONFIDENCE_FILTER_SIZE;
83 par_edge_confidence_opening_type = _EDGE_CONFIDENCE_OPENING_TYPE;
84 par_edge_confidence_opening_size = _EDGE_CONFIDENCE_OPENING_SIZE;
86 par_median_filter_size = _MEDIAN_FILTER_SIZE;
87 par_median_filter_epsilon = _MEDIAN_FILTER_EPSILON;
88 par_propagation_epsilon = _PROPAGATION_EPSILON;
90 par_slope_factor = 1.0;
99 m_owner_classes =
false;
105 float par_edge_score_threshold;
106 float par_disp_score_threshold;
107 float par_mean_shift_max_iter;
108 int par_edge_confidence_filter_size;
109 int par_edge_confidence_opening_type;
110 int par_edge_confidence_opening_size;
111 int par_median_filter_size;
112 float par_median_filter_epsilon;
113 float par_propagation_epsilon;
114 float par_slope_factor;
120 delete par_interpolation_class;
121 delete par_kernel_class;
131 template<
typename DataType>
144 template <
typename DataType>
156 buf_filter_kernel = cv::Mat::zeros(1, a_parameters.par_edge_confidence_filter_size, CV_32FC1);
157 buf_scores_u_d =
Mat(a_dim_u, a_dim_d, CV_32FC1, cv::Scalar(0.0));
159 buf_S =
Mat(a_dim_s, 1, CV_32FC1);
160 buf_D =
Mat(1, a_dim_d, CV_32FC1);
162 buf_card_R =
Mat(1, a_dim_d, CV_32FC1);
163 buf_radiances_s_d = cv::Mat::zeros(a_dim_s, a_dim_d, a_data_type);
170 Mat buf_filter_kernel;
178 Mat buf_radiances_s_d;
179 Mat buf_radiances_s_d_un_nanified;
184 Mat buf_K_r_m_r_bar_mat;
185 Mat buf_K_r_m_r_bar_mat_vec;
186 Mat buf_r_K_r_m_r_bar_mat;
187 Mat buf_sum_r_K_r_m_r_bar;
188 Mat buf_sum_K_r_m_r_bar;
189 Mat buf_sum_K_r_m_r_bar_vec;
190 Mat buf_r_bar_broadcast;
197 template<
typename DataType>
201 Mat& a_edge_confidence_u,
202 Mat& a_edge_confidence_mask_u,
211 template<
typename DataType>
218 const Mat& a_edge_confidence_u,
219 const Mat& a_edge_confidence_mask_u,
220 Mat& a_disp_confidence_u,
238 template<
typename DataType>
242 Mat& a_edge_confidence_v_u,
243 Mat& a_edge_confidence_mask_v_u,
252 template<
typename DataType>
255 const Mat& a_dmin_v_u,
256 const Mat& a_dmax_v_u,
259 const Mat& a_edge_confidence_v_u,
260 const Mat& a_edge_confidence_mask_v_u,
261 Mat& a_disp_confidence_v_u,
262 Mat& a_best_depth_v_u,
267 bool a_verbose =
true 281 template<
typename DataType>
285 Vec<Mat>& a_edge_confidence_mask_s_v_u,
294 template<
typename DataType>
300 const Vec<Mat>& a_edge_confidence_s_v_u,
301 const Vec<Mat>& a_edge_confidence_mask_s_v_u,
307 bool a_verbose =
true 323 template<
typename DataType>
330 const Mat& a_mask_v_u,
345 template<
typename DataType>
356 template<
typename DataType>
367 template<
typename DataType>
383 template<
typename DataType>
384 void compute_1D_edge_confidence(
387 Mat& a_edge_confidence_u,
388 Mat& a_edge_confidence_mask_u,
396 int filter_size = a_parameters.par_edge_confidence_filter_size;
397 int center_index = (filter_size -1) / 2;
400 Mat kernel = a_buffer.buf_filter_kernel;
401 Mat tmp = a_buffer.buf_conv_tmp;
402 Mat tmp2 = a_buffer.buf_sqsum_tmp;
404 cv::Point tmp_param(-1,-1);
406 for (
int j=0; j<filter_size; j++)
408 if (j == center_index)
413 kernel.at<
float>(center_index) = 1.0;
414 kernel.at<
float>(j) = -1.0;
415 cv::filter2D(a_epi.row(a_s), tmp, -1, kernel, tmp_param, 0, cv::BORDER_REFLECT_101);
418 _square_sum_channels_into<DataType>(tmp, a_edge_confidence_u, tmp2);
424 Mat im_norm =
Mat(1, a_edge_confidence_u.cols, CV_32FC1);
425 for (
int u=0; u<a_edge_confidence_u.cols; u++)
427 im_norm.at<
float>(u) = norm<DataType>(a_epi.row(a_s).at<DataType>(u));
429 a_edge_confidence_u.setTo(0.0, im_norm < _SHADOW_NORMALIZED_LEVEL);
431 a_edge_confidence_mask_u = a_edge_confidence_u > a_parameters.par_edge_score_threshold;
435 template<
typename DataType>
436 void compute_1D_depth_epi(
442 const Mat& a_edge_confidence_u,
443 const Mat& a_edge_confidence_mask_u,
444 Mat& a_disp_confidence_u,
453 int dim_s = a_epi.rows;
456 Mat scores_u_d = a_buffer.buf_scores_u_d;
464 if (!a_mask_u.empty())
465 cv::bitwise_and(a_edge_confidence_mask_u, a_mask_u, a_mask_u);
467 a_mask_u = a_edge_confidence_mask_u;
470 cv::findNonZero(a_mask_u, locations);
472 for (
auto it = locations.begin(); it<locations.end(); it++)
480 Mat I = a_buffer.buf_I;
481 Mat S = a_buffer.buf_S;
482 Mat D = a_buffer.buf_D;
485 for (
int s=0; s<dim_s; s++)
487 S.at<
float>(s) = a_s_hat - s;
490 float dmin = a_dmin_u.at<
float>(u);
491 float dmax = a_dmax_u.at<
float>(u);
492 for (
int d=0; d<a_dim_d; d++)
493 D.at<
float>(d) = dmin + d * (dmax - dmin) / (a_dim_d-1);
496 I *= a_parameters.par_slope_factor;
500 Mat radiances_s_d = a_buffer.buf_radiances_s_d;
501 Mat radiances_s_d_un_nanified = a_buffer.buf_radiances_s_d_un_nanified;
505 Mat card_R = a_buffer.buf_card_R;
506 a_parameters.par_interpolation_class->interpolate_mat(a_epi, I, radiances_s_d, card_R);
511 Mat r_bar = a_buffer.buf_r_bar;
512 Mat r_m_r_bar = a_buffer.buf_r_m_r_bar;
513 Mat K_r_m_r_bar_mat = a_buffer.buf_K_r_m_r_bar_mat;
514 Mat K_r_m_r_bar_mat_vec = a_buffer.buf_K_r_m_r_bar_mat_vec;
515 Mat r_K_r_m_r_bar_mat = a_buffer.buf_r_K_r_m_r_bar_mat;
516 Mat sum_r_K_r_m_r_bar = a_buffer.buf_sum_r_K_r_m_r_bar;
517 Mat sum_K_r_m_r_bar = a_buffer.buf_sum_K_r_m_r_bar;
518 Mat sum_K_r_m_r_bar_vec = a_buffer.buf_sum_K_r_m_r_bar_vec;
519 Mat r_bar_broadcast = a_buffer.buf_r_bar_broadcast;
522 radiances_s_d.row(a_s_hat).copyTo(r_bar);
525 cv::max(radiances_s_d, cv::Scalar(0.0), radiances_s_d_un_nanified);
529 for (
int i=0; i< a_parameters.par_mean_shift_max_iter; i++)
532 cv::repeat(r_bar, dim_s, 1, r_bar_broadcast);
536 cv::subtract(radiances_s_d, r_bar_broadcast, r_m_r_bar);
540 a_parameters.par_kernel_class->evaluate_mat(r_m_r_bar, K_r_m_r_bar_mat);
544 _multiply_multi_channel<DataType>(K_r_m_r_bar_mat, radiances_s_d_un_nanified, r_K_r_m_r_bar_mat, K_r_m_r_bar_mat_vec);
547 cv::reduce(r_K_r_m_r_bar_mat, sum_r_K_r_m_r_bar, 0, cv::REDUCE_SUM);
548 cv::reduce(K_r_m_r_bar_mat, sum_K_r_m_r_bar, 0, cv::REDUCE_SUM);
551 _divide_multi_channel<DataType>(sum_K_r_m_r_bar, sum_r_K_r_m_r_bar, r_bar, sum_K_r_m_r_bar_vec);
554 cv::max(r_bar, cv::Scalar(0.0), r_bar);
561 a_parameters.par_kernel_class->evaluate_mat(r_m_r_bar, K_r_m_r_bar_mat);
562 cv::reduce(K_r_m_r_bar_mat, sum_K_r_m_r_bar, 0, cv::REDUCE_SUM);
565 cv::divide(sum_K_r_m_r_bar, card_R, sum_K_r_m_r_bar);
567 cv::max(sum_K_r_m_r_bar, cv::Scalar(0.0), sum_K_r_m_r_bar);
570 sum_K_r_m_r_bar.copyTo(scores_u_d.row(u));
579 cv::minMaxLoc(scores_u_d.row(u), &minVal, &maxVal, &minIdx, &maxIdx);
581 a_best_depth_u.at<
float>(u) = D.at<
float>(maxIdx.x);
584 a_disp_confidence_u.at<
float>(u) = a_edge_confidence_u.at<
float>(u) * std::abs(maxVal - cv::mean(scores_u_d.row(u))[0]);
587 a_rbar_u.at<DataType>(u) = r_bar.at<DataType>(maxIdx.x);
593 template<
typename DataType>
594 void selective_median_filter(
600 const Mat& a_mask_v_u,
604 int dim_v = a_src.rows;
605 int dim_u = a_src.cols;
608 if (a_dst.empty() || a_dst.size != a_src.size || a_dst.type() != a_src.type())
609 a_dst =
Mat(dim_v, dim_u, a_src.type(), cv::Scalar(0.0));
611 int thr_max = omp_get_max_threads();
613 for (
int t=0; t<thr_max; t++)
616 int width = (a_size-1)/2;
618 #pragma omp parallel for 619 for (
int v=0; v<dim_v; v++)
621 Vec<float> buffer = value_buffers[omp_get_thread_num()];
622 for (
int u=0; u<dim_u; u++)
625 if (a_mask_v_u.at<uchar>(v, u))
628 for (
int k=std::max(0, v-width); k<std::min(dim_v, v+width+1); k++)
630 for (
int l=std::max(0, u-width); l<std::min(dim_u, u+width+1); l++)
632 if (a_mask_v_u.at<uchar>(k, l) &&
634 a_epis[v].at<DataType>(a_s_hat, u) -
635 a_epis[k].at<DataType>(a_s_hat, l)
638 buffer.push_back(a_src.at<
float>(k, l));
643 std::nth_element(buffer.begin(), buffer.begin() + buffer.size() / 2, buffer.end());
644 a_dst.at<
float>(v, u) = buffer[buffer.size() / 2];
658 template<
typename DataType>
659 void compute_1D_edge_confidence_pile(
662 Mat& a_edge_confidence_v_u,
663 Mat& a_edge_confidence_mask_v_u,
668 int dim_v = a_epis.size();
670 a_edge_confidence_mask_v_u =
Mat(a_edge_confidence_v_u.rows, a_edge_confidence_v_u.cols, CV_8UC1);
673 #pragma omp parallel for 674 for (
int v=0; v<dim_v; v++)
676 Mat edge_confidence_u = a_edge_confidence_v_u.row(v);
677 Mat edge_confidence_mask_u = a_edge_confidence_mask_v_u.row(v);
679 compute_1D_edge_confidence<DataType>(
683 edge_confidence_mask_u,
685 *a_buffers[omp_get_thread_num()]
689 if (a_parameters.par_edge_confidence_opening_size > 1)
692 Mat kernel = cv::getStructuringElement
694 a_parameters.par_edge_confidence_opening_type,
695 cv::Size(a_parameters.par_edge_confidence_opening_size, a_parameters.par_edge_confidence_opening_size)
698 cv::morphologyEx(a_edge_confidence_mask_v_u, a_edge_confidence_mask_v_u, cv::MORPH_OPEN, kernel);
702 template<
typename DataType>
703 void compute_1D_depth_epi_pile(
705 const Mat& a_dmin_v_u,
706 const Mat& a_dmax_v_u,
709 const Mat& a_edge_confidence_v_u,
710 const Mat& a_edge_confidence_mask_v_u,
711 Mat& a_disp_confidence_v_u,
712 Mat& a_best_depth_v_u,
721 int dim_v = a_epis.size();
724 float progress = 0.0;
726 std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
728 #pragma omp parallel for 729 for (
int v=0; v<dim_v; v++)
733 Mat dmin_u = a_dmin_v_u.row(v);
734 Mat dmax_u = a_dmax_v_u.row(v);
735 Mat edge_confidence_u = a_edge_confidence_v_u.row(v);
736 Mat edge_confidence_mask_u = a_edge_confidence_mask_v_u.row(v);
737 Mat disp_confidence_u = a_disp_confidence_v_u.row(v);
738 Mat best_depth_u = a_best_depth_v_u.row(v);
739 Mat rbar_u = a_rbar_v_u.row(v);
743 if (!a_mask_v_u.empty())
744 mask_u = a_mask_v_u.row(v);
746 compute_1D_depth_epi<DataType>(
753 edge_confidence_mask_u,
758 *a_buffers[omp_get_thread_num()],
767 std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
769 int pos = barWidth * progress / dim_v;
770 for (
int i = 0; i < barWidth; ++i) {
771 if (i < pos) std::cout <<
"=";
772 else if (i == pos) std::cout <<
">";
773 else std::cout <<
" ";
775 std::cout <<
"] " << int(progress * 100.0 / dim_v) <<
"% \t" << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() <<
"s \r";
785 std::cout << std::endl <<
"Applying selective median fiter" << std::endl;
788 selective_median_filter<DataType>(
793 a_parameters.par_median_filter_size,
794 a_edge_confidence_mask_v_u,
795 a_parameters.par_median_filter_epsilon
798 a_best_depth_v_u = tmp;
807 template<
typename DataType>
808 void compute_2D_edge_confidence(
811 Vec<Mat>& a_edge_confidence_mask_s_v_u,
816 int dim_s = a_epis[0].rows;
818 a_edge_confidence_mask_s_v_u.clear();
821 for (
int s=0; s<dim_s; s++)
823 Mat edge_confidence_v_u = a_edge_confidence_s_v_u[s];
824 Mat edge_confidence_mask_v_u;
826 compute_1D_edge_confidence_pile(
830 edge_confidence_mask_v_u,
835 a_edge_confidence_mask_s_v_u.push_back(edge_confidence_mask_v_u);
839 template<
typename DataType>
840 void compute_2D_depth_epi(
845 const Vec<Mat>& a_edge_confidence_s_v_u,
846 const Vec<Mat>& a_edge_confidence_mask_s_v_u,
855 int dim_s = a_epis[0].rows;
856 int dim_u = a_epis[0].cols;
857 int dim_v = a_epis.size();
858 int s_hat = (int)std::floor(dim_s / 2.0);
864 for (
int s=0; s<dim_s; s++)
867 mask_s_v_u[s] = a_edge_confidence_mask_s_v_u[s].clone();
872 Mat edge_confidence_v_u;
873 Mat edge_confidence_mask_v_u;
874 Mat disp_confidence_v_u;
880 s_values.push_back(s_hat);
881 for (
int s_offset=1; s_offset<dim_s-s_hat; s_offset++)
883 int s_sup = s_hat + s_offset;
884 int s_inf = s_hat - s_offset;
885 s_values.push_back(s_sup);
887 s_values.push_back(s_inf);
891 for (
auto it = s_values.begin(); it < s_values.end(); it++)
896 std::cout <<
"Computing s_hat=" << s_hat << std::endl;
898 dmin_v_u = a_dmin_s_v_u[s_hat];
899 dmax_v_u = a_dmax_s_v_u[s_hat];
900 edge_confidence_v_u = a_edge_confidence_s_v_u[s_hat];
901 edge_confidence_mask_v_u = a_edge_confidence_mask_s_v_u[s_hat];
902 disp_confidence_v_u = a_disp_confidence_s_v_u[s_hat];
903 best_depth_v_u = a_best_depth_s_v_u[s_hat];
904 rbar_v_u = a_rbar_s_v_u[s_hat];
905 mask_v_u = mask_s_v_u[s_hat];
907 compute_1D_depth_epi_pile<DataType>(
914 edge_confidence_mask_v_u,
925 std::cout <<
"Propagation..." << std::endl;
929 #pragma omp parallel for 930 for (
int v=0; v<dim_v; v++)
932 Mat edge_confidence_u = edge_confidence_v_u.row(v);
933 Mat best_depth_u = best_depth_v_u.row(v);
934 Mat rbar_u = rbar_v_u.row(v);
935 for (
int u=0; u<dim_u; u++)
938 #ifdef _USE_DISP_CONFIDENCE_SCORE 939 if (disp_confidence_v_u.at<
float>(v, u) > a_parameters.par_disp_score_threshold)
941 if (edge_confidence_mask_v_u.at<uchar>(v, u))
944 float current_depth_value = best_depth_u.at<
float>(u);
945 for (
int s=0; s<dim_s; s++)
948 int requested_index = u + (int)std::round(best_depth_u.at<
float>(u) * (s_hat - s) * a_parameters.par_slope_factor);
952 requested_index > -1 &&
953 requested_index < dim_u &&
954 mask_s_v_u[s].at<uchar>(v, requested_index) == 255 &&
955 norm<DataType>(a_epis[v].at<DataType>(s, requested_index) - rbar_u.at<DataType>(u)) < a_parameters.par_propagation_epsilon
958 a_best_depth_s_v_u[s].at<
float>(v, requested_index) = current_depth_value;
959 mask_s_v_u[s].at<uchar>(v, requested_index) = 0;
960 a_disp_confidence_s_v_u[s].at<
float>(v, requested_index) = disp_confidence_v_u.at<
float>(v, u);
void _divide_multi_channel(const Mat &line_mat, const Mat &vec_mat, Mat &res_mat, Mat &buffer)
Divide a vec matrix by a line matrix elementwise broadcasting the line matrix over channels of the ve...
Impelment a structure containing all the algorithm parameters.
Definition: rslf_depth_computation_core.hpp:65
Implement a buffer containing re-usable temporary variables in order to avoid multiple unnecessary al...
Definition: rslf_depth_computation_core.hpp:145
void compute_1D_depth_epi(const Mat &a_epi, const Mat &a_dmin_u, const Mat &a_dmax_u, int a_dim_d, int a_s_hat, const Mat &a_edge_confidence_u, const Mat &a_edge_confidence_mask_u, Mat &a_disp_confidence_u, Mat &a_best_depth_u, Mat &a_rbar_u, const Depth1DParameters< DataType > &a_parameters, BufferDepth1D< DataType > &a_buffer, Mat &a_mask_u)
Given a single EPI along dimensions (s, u) (v is fixed), compute the slopes only looking at a single ...
Definition: rslf_depth_computation_core.hpp:436
Template linear interpolation class.
Definition: rslf_interpolation.hpp:59
std::vector< T > Vec
RSLF Vector class (std::vector)
Definition: rslf_types.hpp:32
void selective_median_filter(const Mat &a_src, Mat &a_dst, const Vec< Mat > &a_epis, int a_s_hat, int a_size, const Mat &a_mask_v_u, float a_epsilon)
Filter the given spatial image of dimensions (v, u) using a selective median filter (only points with...
Definition: rslf_depth_computation_core.hpp:594
Definition: rslf_depth_computation.hpp:14
void compute_1D_edge_confidence_pile(const Vec< Mat > &a_epis, int a_s, Mat &a_edge_confidence_v_u, Mat &a_edge_confidence_mask_v_u, const Depth1DParameters< DataType > &a_parameters, Vec< BufferDepth1D< DataType > * > &a_buffers)
Given a vector of EPIs, compute the edge confidence along the line of given index s along the dimensi...
Definition: rslf_depth_computation_core.hpp:659
float norm(DataType x)
Implement the euclidean norm.
void compute_2D_depth_epi(const Vec< Mat > &a_epis, const Vec< Mat > &a_dmin_s_v_u, const Vec< Mat > &a_dmax_s_v_u, int a_dim_d, const Vec< Mat > &a_edge_confidence_s_v_u, const Vec< Mat > &a_edge_confidence_mask_s_v_u, Vec< Mat > &a_disp_confidence_s_v_u, Vec< Mat > &a_best_depth_s_v_u, Vec< Mat > &a_rbar_s_v_u, const Depth1DParameters< DataType > &a_parameters, Vec< BufferDepth1D< DataType > * > &a_buffers, bool a_verbose=true)
Given a vector of EPIs, compute the disparities for all points (s, v, u) using the propagation proces...
Definition: rslf_depth_computation_core.hpp:840
Pure virtual class implementing a generic kernel instance.
Definition: rslf_kernels.hpp:21
void compute_1D_depth_epi_pile(const Vec< Mat > &a_epis, const Mat &a_dmin_v_u, const Mat &a_dmax_v_u, int a_dim_d, int a_s_hat, const Mat &a_edge_confidence_v_u, const Mat &a_edge_confidence_mask_v_u, Mat &a_disp_confidence_v_u, Mat &a_best_depth_v_u, Mat &a_rbar_v_u, const Depth1DParameters< DataType > &a_parameters, Vec< BufferDepth1D< DataType > * > &a_buffers, Mat &a_mask_v_u, bool a_verbose=true)
For every EPI in the given vector (i.e. for all v), compute the slopes only looking at a single line ...
Definition: rslf_depth_computation_core.hpp:703
void compute_2D_edge_confidence(const Vec< Mat > &a_epis, Vec< Mat > &a_edge_confidence_s_v_u, Vec< Mat > &a_edge_confidence_mask_s_v_u, const Depth1DParameters< DataType > &a_parameters, Vec< BufferDepth1D< DataType > * > &a_buffers)
Given a vector of EPIs, compute the edge confidence on all lines for all EPIs (so that an edge confid...
Definition: rslf_depth_computation_core.hpp:808
void _square_sum_channels_into(const Mat &src, Mat &dst, Mat &buffer)
Sum the squares of the values across channels of the input matrix.
cv::Mat Mat
RSLF Matrix class (cv::Mat)
Definition: rslf_types.hpp:26
This kernel returns value: 1 - norm(x/h)^2 if norm(x/h) < 1, 0 else.
Definition: rslf_kernels.hpp:40
void _multiply_multi_channel(const Mat &line_mat, const Mat &vec_mat, Mat &res_mat, Mat &buffer)
Multiply a vec matrix by a line matrix elementwise broadcasting the line matrix over channels of the ...
Pure virtual class implementing a generic interpolation instance.
Definition: rslf_interpolation.hpp:28
void compute_1D_edge_confidence(const Mat &a_epi, int a_s, Mat &a_edge_confidence_u, Mat &a_edge_confidence_mask_u, const Depth1DParameters< DataType > &a_parameters, BufferDepth1D< DataType > &a_buffer)
Compute the edge confidence score for a single line along the dimension u.
Definition: rslf_depth_computation_core.hpp:384