28 #ifndef SHARED_BP_PROCESSING_FUNCTS_H_
29 #define SHARED_BP_PROCESSING_FUNCTS_H_
51 template<RunData_t T,
unsigned int DISP_VALS>
55 for (
unsigned int current_disparity = 1; current_disparity < DISP_VALS; current_disparity++)
57 prev = f[current_disparity-1] + (T)1.0;
58 if (prev < f[current_disparity])
59 f[current_disparity] = prev;
62 for (
int current_disparity = (
int)DISP_VALS - 2; current_disparity >= 0; current_disparity--)
64 prev = f[current_disparity + 1] + (T)1.0;
65 if (prev < f[current_disparity])
66 f[current_disparity] = prev;
74 for (
unsigned int current_disparity = 1; current_disparity < bp_settings_disp_vals; current_disparity++)
76 prev = f[current_disparity-1] + (T)1.0;
77 if (prev < f[current_disparity])
78 f[current_disparity] = prev;
81 for (
int current_disparity = (
int)bp_settings_disp_vals - 2; current_disparity >= 0; current_disparity--)
83 prev = f[current_disparity + 1] + (T)1.0;
84 if (prev < f[current_disparity])
85 f[current_disparity] = prev;
96 bp_settings_disp_vals);
97 unsigned int currFArrayIndexLast = fArrayIndexDisp0;
98 unsigned int currFArrayIndex = fArrayIndexDisp0;
101 for (
unsigned int current_disparity = 1; current_disparity < bp_settings_disp_vals; current_disparity++)
110 prev = f[currFArrayIndexLast] + (T)1.0;
111 if (prev < f[currFArrayIndex])
112 f[currFArrayIndex] = prev;
113 currFArrayIndexLast = currFArrayIndex;
116 for (
int current_disparity = (
int)bp_settings_disp_vals - 2; current_disparity >= 0; current_disparity--)
125 prev = f[currFArrayIndexLast] + (T)1.0;
126 if (prev < f[currFArrayIndex])
127 f[currFArrayIndex] = prev;
128 currFArrayIndexLast = currFArrayIndex;
132 template<RunData_t T, RunData_t U,
unsigned int DISP_VALS>
134 unsigned int x_val,
unsigned int y_val,
136 const U messages_neighbor_1[DISP_VALS],
const U messages_neighbor_2[DISP_VALS],
137 const U messages_neighbor_3[DISP_VALS],
const U data_costs[DISP_VALS],
138 T* dst_message_array, U disc_k_bp,
bool data_aligned)
144 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++)
146 dst[current_disparity] = messages_neighbor_1[current_disparity] + messages_neighbor_2[current_disparity] +
147 messages_neighbor_3[current_disparity] + data_costs[current_disparity];
148 if (dst[current_disparity] < minimum)
149 minimum = dst[current_disparity];
154 DtStereo<U, DISP_VALS>(dst);
157 minimum += disc_k_bp;
160 U val_to_normalize{(U)0.0};
162 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
163 if (minimum < dst[current_disparity]) {
164 dst[current_disparity] = minimum;
167 val_to_normalize += dst[current_disparity];
170 val_to_normalize /= ((U)DISP_VALS);
177 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
178 dst[current_disparity] -= val_to_normalize;
179 dst_message_array[dest_message_array_index] =
180 util_functs::ConvertValToDifferentDataTypeIfNeeded<U, T>(dst[current_disparity]);
185 dest_message_array_index++;
190 template<RunData_t T, RunData_t U>
192 unsigned int x_val,
unsigned int y_val,
194 const U* messages_neighbor_1,
const U* messages_neighbor_2,
195 const U* messages_neighbor_3,
const U* data_costs,
196 T* dst_message_array, U disc_k_bp,
bool data_aligned,
197 unsigned int bp_settings_disp_vals)
201 U* dst =
new U[bp_settings_disp_vals];
203 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++)
205 dst[current_disparity] = messages_neighbor_1[current_disparity] + messages_neighbor_2[current_disparity] +
206 messages_neighbor_3[current_disparity] + data_costs[current_disparity];
207 if (dst[current_disparity] < minimum)
208 minimum = dst[current_disparity];
213 DtStereo<U>(dst, bp_settings_disp_vals);
216 minimum += disc_k_bp;
219 U val_to_normalize{(U)0.0};
221 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
222 if (minimum < dst[current_disparity]) {
223 dst[current_disparity] = minimum;
226 val_to_normalize += dst[current_disparity];
229 val_to_normalize /= ((U)bp_settings_disp_vals);
234 bp_settings_disp_vals);
236 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
237 dst[current_disparity] -= val_to_normalize;
238 dst_message_array[dest_message_array_index] =
239 util_functs::ConvertValToDifferentDataTypeIfNeeded<U, T>(dst[current_disparity]);
244 dest_message_array_index++;
251 template<RunData_t T, RunData_t U, beliefprop::MessageComp M>
253 unsigned int x_val,
unsigned int y_val,
255 const T* prev_u_message_array,
const T* prev_d_message_array,
256 const T* prev_l_message_array,
const T* prev_r_message_array,
257 const T* data_message_array, T* dst_message_array,
258 U disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
259 U* dst_processing,
unsigned int checkerboard_adjustment,
260 unsigned int offset_data,
unsigned int current_disparity,
261 unsigned int proc_array_idx)
263 const U dataVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(data_message_array[
266 current_disparity, bp_settings_disp_vals, offset_data)]);
269 const U prevUVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_u_message_array[
272 current_disparity, bp_settings_disp_vals)]);
273 const U prevLVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_l_message_array[
276 current_disparity, bp_settings_disp_vals)]);
277 const U prevRVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_r_message_array[
280 current_disparity, bp_settings_disp_vals)]);
282 dst_processing[proc_array_idx] = prevUVal + prevLVal + prevRVal + dataVal;
285 const U prevDVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_d_message_array[
288 current_disparity, bp_settings_disp_vals)]);
289 const U prevLVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_l_message_array[
292 current_disparity, bp_settings_disp_vals)]);
293 const U prevRVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_r_message_array[
296 current_disparity, bp_settings_disp_vals)]);
298 dst_processing[proc_array_idx] = prevDVal + prevLVal + prevRVal + dataVal;
301 const U prevUVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_u_message_array[
304 current_disparity, bp_settings_disp_vals)]);
305 const U prevDVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_d_message_array[
308 current_disparity, bp_settings_disp_vals)]);
309 const U prevLVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_l_message_array[
312 current_disparity, bp_settings_disp_vals)]);
314 dst_processing[proc_array_idx] = prevUVal + prevDVal + prevLVal + dataVal;
317 const U prevUVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_u_message_array[
320 current_disparity, bp_settings_disp_vals)]);
321 const U prevDVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_d_message_array[
324 current_disparity, bp_settings_disp_vals)]);
325 const U prevRVal = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(prev_r_message_array[
328 current_disparity, bp_settings_disp_vals)]);
330 dst_processing[proc_array_idx] = prevUVal + prevDVal + prevRVal + dataVal;
334 template<RunData_t T, RunData_t U, beliefprop::MessageComp M>
337 const T* prev_u_message_array,
const T* prev_d_message_array,
338 const T* prev_l_message_array,
const T* prev_r_message_array,
339 const T* data_message_array, T* dst_message_array,
340 U disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
341 U* dst_processing,
unsigned int checkerboard_adjustment,
342 unsigned int offset_data)
349 bp_settings_disp_vals);
350 unsigned int proc_array_idx{proc_array_idx_disp_0};
352 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++)
355 SetInitDstProcessing<T, U, M>(x_val, y_val, current_bp_level, prev_u_message_array, prev_d_message_array,
356 prev_l_message_array, prev_r_message_array, data_message_array, dst_message_array,
357 disc_k_bp, data_aligned, bp_settings_disp_vals, dst_processing, checkerboard_adjustment,
358 offset_data, current_disparity, proc_array_idx);
360 if (dst_processing[proc_array_idx] < minimum)
361 minimum = dst_processing[proc_array_idx];
373 DtStereo<U>(dst_processing, bp_settings_disp_vals, x_val, y_val, current_bp_level);
376 minimum += disc_k_bp;
379 U val_to_normalize{(U)0.0};
381 proc_array_idx = proc_array_idx_disp_0;
382 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
383 if (minimum < dst_processing[proc_array_idx]) {
384 dst_processing[proc_array_idx] = minimum;
387 val_to_normalize += dst_processing[proc_array_idx];
397 val_to_normalize /= ((U)bp_settings_disp_vals);
400 proc_array_idx = proc_array_idx_disp_0;
402 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
403 dst_processing[proc_array_idx] -= val_to_normalize;
404 dst_message_array[proc_array_idx] =
405 util_functs::ConvertValToDifferentDataTypeIfNeeded<U, T>(dst_processing[proc_array_idx]);
432 template<RunData_t T,
unsigned int DISP_VALS>
434 unsigned int x_val,
unsigned int y_val,
436 const float* image_1_pixels_device,
const float* image_2_pixels_device,
437 T* data_cost_stereo_checkerboard_0,
438 T* data_cost_stereo_checkerboard_1,
439 float lambda_bp,
float data_k_bp,
unsigned int bp_settings_disp_vals)
441 if constexpr (DISP_VALS > 0) {
442 unsigned int index_val;
443 const unsigned int x_checkerboard = x_val / 2;
450 if (((
int)x_val - ((
int)DISP_VALS - 1)) >= 0) {
451 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
452 float current_pixel_image_1{0}, current_pixel_image_2{0};
455 current_pixel_image_1 = image_1_pixels_device[y_val * current_bp_level.
width_level_ + x_val];
456 current_pixel_image_2 = image_2_pixels_device[y_val * current_bp_level.
width_level_ + (x_val - current_disparity)];
466 if (((x_val + y_val) % 2) == 0) {
467 data_cost_stereo_checkerboard_0[index_val] = util_functs::ConvertValToDifferentDataTypeIfNeeded<float, T>(
468 (
float)(lambda_bp * util_functs::GetMin<float>((fabs(current_pixel_image_1 - current_pixel_image_2)), data_k_bp)));
471 data_cost_stereo_checkerboard_1[index_val] = util_functs::ConvertValToDifferentDataTypeIfNeeded<float, T>(
472 (
float)(lambda_bp * util_functs::GetMin<float>((fabs(current_pixel_image_1 - current_pixel_image_2)), data_k_bp)));
476 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
479 current_disparity, DISP_VALS);
482 if (((x_val + y_val) % 2) == 0) {
483 data_cost_stereo_checkerboard_0[index_val] = util_functs::ZeroVal<T>();
486 data_cost_stereo_checkerboard_1[index_val] = util_functs::ZeroVal<T>();
493 unsigned int index_val;
494 const unsigned int x_checkerboard = x_val / 2;
501 if (((
int)x_val - ((
int)bp_settings_disp_vals - 1)) >= 0) {
502 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
503 float current_pixel_image_1{0}, current_pixel_image_2{0};
506 current_pixel_image_1 = image_1_pixels_device[y_val * current_bp_level.
width_level_ + x_val];
507 current_pixel_image_2 = image_2_pixels_device[y_val * current_bp_level.
width_level_ + (x_val - current_disparity)];
513 bp_settings_disp_vals);
517 if (((x_val + y_val) % 2) == 0) {
518 data_cost_stereo_checkerboard_0[index_val] = util_functs::ConvertValToDifferentDataTypeIfNeeded<float, T>(
519 (
float)(lambda_bp * util_functs::GetMin<float>((fabs(current_pixel_image_1 - current_pixel_image_2)), data_k_bp)));
522 data_cost_stereo_checkerboard_1[index_val] = util_functs::ConvertValToDifferentDataTypeIfNeeded<float, T>(
523 (
float)(lambda_bp * util_functs::GetMin<float>((fabs(current_pixel_image_1 - current_pixel_image_2)), data_k_bp)));
527 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
530 current_disparity, bp_settings_disp_vals);
533 if (((x_val + y_val) % 2) == 0) {
534 data_cost_stereo_checkerboard_0[index_val] = util_functs::ZeroVal<T>();
537 data_cost_stereo_checkerboard_1[index_val] = util_functs::ZeroVal<T>();
563 template<RunData_t T, RunData_t U,
unsigned int DISP_VALS>
565 unsigned int x_val,
unsigned int y_val,
569 const T* data_cost_checkerboard_0,
const T* data_cost_checkerboard_1,
570 T* data_cost_current_level,
unsigned int offset_num,
571 unsigned int bp_settings_disp_vals)
576 const unsigned int checkerboard_part_adjustment =
580 const unsigned int x_val_prev = x_val*2 + checkerboard_part_adjustment;
585 if constexpr (DISP_VALS > 0) {
586 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
590 current_disparity, DISP_VALS, offset_num)]) +
593 current_disparity, DISP_VALS, offset_num)]) +
596 current_disparity, DISP_VALS, offset_num)]) +
599 current_disparity, DISP_VALS, offset_num)]);
605 util_functs::ConvertValToDifferentDataTypeIfNeeded<U, T>(data_cost);
609 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
613 current_disparity, bp_settings_disp_vals, offset_num)]) +
616 current_disparity, bp_settings_disp_vals, offset_num)]) +
619 current_disparity, bp_settings_disp_vals, offset_num)]) +
622 current_disparity, bp_settings_disp_vals, offset_num)]);
627 bp_settings_disp_vals)] =
628 util_functs::ConvertValToDifferentDataTypeIfNeeded<U, T>(data_cost);
652 template<RunData_t T,
unsigned int DISP_VALS>
654 unsigned int x_val_in_checkerboard,
unsigned int y_val,
656 T* message_u_checkerboard_0, T* message_d_checkerboard_0,
657 T* message_l_checkerboard_0, T* message_r_checkerboard_0,
658 T* message_u_checkerboard_1, T* message_d_checkerboard_1,
659 T* message_l_checkerboard_1, T* message_r_checkerboard_1,
660 unsigned int bp_settings_disp_vals)
664 if constexpr (DISP_VALS > 0) {
666 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
669 current_disparity, DISP_VALS)] =
670 util_functs::ZeroVal<T>();
673 current_disparity, DISP_VALS)] =
674 util_functs::ZeroVal<T>();
677 current_disparity, DISP_VALS)] =
678 util_functs::ZeroVal<T>();
681 current_disparity, DISP_VALS)] =
682 util_functs::ZeroVal<T>();
686 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
689 current_disparity, DISP_VALS)] =
690 util_functs::ZeroVal<T>();
693 current_disparity, DISP_VALS)] =
694 util_functs::ZeroVal<T>();
697 current_disparity, DISP_VALS)] =
698 util_functs::ZeroVal<T>();
701 current_disparity, DISP_VALS)] =
702 util_functs::ZeroVal<T>();
707 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
710 current_disparity, bp_settings_disp_vals)] =
711 util_functs::ZeroVal<T>();
714 current_disparity, bp_settings_disp_vals)] =
715 util_functs::ZeroVal<T>();
718 current_disparity, bp_settings_disp_vals)] =
719 util_functs::ZeroVal<T>();
722 current_disparity, bp_settings_disp_vals)] =
723 util_functs::ZeroVal<T>();
727 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
730 current_disparity, bp_settings_disp_vals)] =
731 util_functs::ZeroVal<T>();
734 current_disparity, bp_settings_disp_vals)] =
735 util_functs::ZeroVal<T>();
738 current_disparity, bp_settings_disp_vals)] =
739 util_functs::ZeroVal<T>();
742 current_disparity, bp_settings_disp_vals)] =
743 util_functs::ZeroVal<T>();
771 template<RunData_t T, RunData_t U,
unsigned int DISP_VALS>
773 unsigned int x_val,
unsigned int y_val,
775 const U prev_u_message[DISP_VALS],
const U prev_d_message[DISP_VALS],
776 const U prev_l_message[DISP_VALS],
const U prev_r_message[DISP_VALS],
777 const U data_message[DISP_VALS],
778 T* current_u_message, T* current_d_message,
779 T* current_l_message, T* current_r_message,
780 const U disc_k_bp,
bool data_aligned)
782 MsgStereo<T, U, DISP_VALS>(x_val, y_val, current_bp_level,
783 prev_u_message, prev_l_message, prev_r_message, data_message,
784 current_u_message, disc_k_bp, data_aligned);
786 MsgStereo<T, U, DISP_VALS>(x_val, y_val, current_bp_level,
787 prev_d_message, prev_l_message, prev_r_message, data_message,
788 current_d_message, disc_k_bp, data_aligned);
790 MsgStereo<T, U, DISP_VALS>(x_val, y_val, current_bp_level,
791 prev_u_message, prev_d_message, prev_r_message, data_message,
792 current_r_message, disc_k_bp, data_aligned);
794 MsgStereo<T, U, DISP_VALS>(x_val, y_val, current_bp_level,
795 prev_u_message, prev_d_message, prev_l_message, data_message,
796 current_l_message, disc_k_bp, data_aligned);
799 template<RunData_t T, RunData_t U>
801 unsigned int x_val,
unsigned int y_val,
803 const U* prev_u_message,
const U* prev_d_message,
804 const U* prev_l_message,
const U* prev_r_message,
805 const U* data_message,
806 T* current_u_message, T* current_d_message,
807 T* current_l_message, T* current_r_message,
808 const U disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals)
810 MsgStereo<T, U>(x_val, y_val, current_bp_level,
811 prev_u_message, prev_l_message, prev_r_message, data_message,
812 current_u_message, disc_k_bp, data_aligned, bp_settings_disp_vals);
814 MsgStereo<T, U>(x_val, y_val, current_bp_level,
815 prev_d_message, prev_l_message, prev_r_message, data_message,
816 current_d_message, disc_k_bp, data_aligned, bp_settings_disp_vals);
818 MsgStereo<T, U>(x_val, y_val, current_bp_level,
819 prev_u_message, prev_d_message, prev_r_message, data_message,
820 current_r_message, disc_k_bp, data_aligned, bp_settings_disp_vals);
822 MsgStereo<T, U>(x_val, y_val, current_bp_level,
823 prev_u_message, prev_d_message, prev_l_message, data_message,
824 current_l_message, disc_k_bp, data_aligned, bp_settings_disp_vals);
827 template<RunData_t T, RunData_t U>
829 unsigned int x_val,
unsigned int y_val,
831 const T* prev_u_message_array,
const T* prev_d_message_array,
832 const T* prev_l_message_array,
const T* prev_r_message_array,
833 const T* data_message_array,
834 T* current_u_message, T* current_d_message,
835 T* current_l_message, T* current_r_message,
836 const U disc_k_bp,
bool data_aligned,
unsigned int bp_settings_disp_vals,
837 U* dst_processing,
unsigned int checkerboard_adjustment,
838 unsigned int offset_data)
840 MsgStereo<T, U, beliefprop::MessageComp::kUMessage>(x_val, y_val, current_bp_level,
841 prev_u_message_array, prev_d_message_array, prev_l_message_array, prev_r_message_array, data_message_array,
842 current_u_message, disc_k_bp, data_aligned, bp_settings_disp_vals,
843 dst_processing, checkerboard_adjustment, offset_data);
845 MsgStereo<T, U, beliefprop::MessageComp::kDMessage>(x_val, y_val, current_bp_level,
846 prev_u_message_array, prev_d_message_array, prev_l_message_array, prev_r_message_array, data_message_array,
847 current_d_message, disc_k_bp, data_aligned, bp_settings_disp_vals,
848 dst_processing, checkerboard_adjustment, offset_data);
850 MsgStereo<T, U, beliefprop::MessageComp::kLMessage>(x_val, y_val, current_bp_level,
851 prev_u_message_array, prev_d_message_array, prev_l_message_array, prev_r_message_array, data_message_array,
852 current_l_message, disc_k_bp, data_aligned, bp_settings_disp_vals,
853 dst_processing, checkerboard_adjustment, offset_data);
855 MsgStereo<T, U, beliefprop::MessageComp::kRMessage>(x_val, y_val, current_bp_level,
856 prev_u_message_array, prev_d_message_array, prev_l_message_array, prev_r_message_array, data_message_array,
857 current_r_message, disc_k_bp, data_aligned, bp_settings_disp_vals,
858 dst_processing, checkerboard_adjustment, offset_data);
889 template<RunData_t T, RunData_t U,
unsigned int DISP_VALS>
891 unsigned int x_val,
unsigned int y_val,
894 const T* data_cost_checkerboard_0,
const T* data_cost_checkerboard_1,
895 T* message_u_checkerboard_0, T* message_d_checkerboard_0,
896 T* message_l_checkerboard_0, T* message_r_checkerboard_0,
897 T* message_u_checkerboard_1, T* message_d_checkerboard_1,
898 T* message_l_checkerboard_1, T* message_r_checkerboard_1,
899 float disc_k_bp,
unsigned int offset_data,
bool data_aligned,
900 unsigned int bp_settings_disp_vals)
903 const unsigned int checkerboard_adjustment =
908 if ((x_val >= (1u - checkerboard_adjustment)) &&
910 (y_val > 0) && (y_val < (current_bp_level.
height_level_ - 1u)))
912 if constexpr (DISP_VALS > 0) {
913 U data_message[DISP_VALS], prev_u_message[DISP_VALS], prev_d_message[DISP_VALS],
914 prev_l_message[DISP_VALS], prev_r_message[DISP_VALS];
916 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
918 data_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
921 current_disparity, DISP_VALS, offset_data)]);
922 prev_u_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
925 current_disparity, DISP_VALS)]);
926 prev_d_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
929 current_disparity, DISP_VALS)]);
930 prev_l_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
933 current_disparity, DISP_VALS)]);
934 prev_r_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
937 current_disparity, DISP_VALS)]);
940 data_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
943 current_disparity, DISP_VALS, offset_data)]);
944 prev_u_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
947 current_disparity, DISP_VALS)]);
948 prev_d_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
951 current_disparity, DISP_VALS)]);
952 prev_l_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
955 current_disparity, DISP_VALS)]);
956 prev_r_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
959 current_disparity, DISP_VALS)]);
965 RunBPIterationUpdateMsgVals<T, U, DISP_VALS>(x_val, y_val, current_bp_level,
966 prev_u_message, prev_d_message, prev_l_message, prev_r_message, data_message,
967 message_u_checkerboard_0, message_d_checkerboard_0,
968 message_l_checkerboard_0, message_r_checkerboard_0,
969 (U)disc_k_bp, data_aligned);
972 RunBPIterationUpdateMsgVals<T, U, DISP_VALS>(x_val, y_val, current_bp_level,
973 prev_u_message, prev_d_message, prev_l_message, prev_r_message, data_message,
974 message_u_checkerboard_1, message_d_checkerboard_1,
975 message_l_checkerboard_1, message_r_checkerboard_1,
976 (U)disc_k_bp, data_aligned);
980 U* data_message =
new U[bp_settings_disp_vals];
981 U* prev_u_message =
new U[bp_settings_disp_vals];
982 U* prev_d_message =
new U[bp_settings_disp_vals];
983 U* prev_l_message =
new U[bp_settings_disp_vals];
984 U* prev_r_message =
new U[bp_settings_disp_vals];
986 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
988 data_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
991 current_disparity, bp_settings_disp_vals, offset_data)]);
992 prev_u_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
995 current_disparity, bp_settings_disp_vals)]);
996 prev_d_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
999 current_disparity, bp_settings_disp_vals)]);
1000 prev_l_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1003 current_disparity, bp_settings_disp_vals)]);
1004 prev_r_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1007 current_disparity, bp_settings_disp_vals)]);
1010 data_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1013 current_disparity, bp_settings_disp_vals, offset_data)]);
1014 prev_u_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1017 current_disparity, bp_settings_disp_vals)]);
1018 prev_d_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1021 current_disparity, bp_settings_disp_vals)]);
1022 prev_l_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1025 current_disparity, bp_settings_disp_vals)]);
1026 prev_r_message[current_disparity] = util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(
1029 current_disparity, bp_settings_disp_vals)]);
1035 RunBPIterationUpdateMsgVals<T, U>(x_val, y_val, current_bp_level,
1036 prev_u_message, prev_d_message, prev_l_message, prev_r_message, data_message,
1037 message_u_checkerboard_0, message_d_checkerboard_0,
1038 message_l_checkerboard_0, message_r_checkerboard_0,
1039 (U)disc_k_bp, data_aligned, bp_settings_disp_vals);
1042 RunBPIterationUpdateMsgVals<T, U>(x_val, y_val, current_bp_level,
1043 prev_u_message, prev_d_message, prev_l_message, prev_r_message, data_message,
1044 message_u_checkerboard_1, message_d_checkerboard_1,
1045 message_l_checkerboard_1, message_r_checkerboard_1,
1046 (U)disc_k_bp, data_aligned, bp_settings_disp_vals);
1049 delete [] data_message;
1050 delete [] prev_u_message;
1051 delete [] prev_d_message;
1052 delete [] prev_l_message;
1053 delete [] prev_r_message;
1058 template<RunData_t T, RunData_t U,
unsigned int DISP_VALS>
1060 unsigned int x_val,
unsigned int y_val,
1063 const T* data_cost_checkerboard_0,
const T* data_cost_checkerboard_1,
1064 T* message_u_checkerboard_0, T* message_d_checkerboard_0,
1065 T* message_l_checkerboard_0, T* message_r_checkerboard_0,
1066 T* message_u_checkerboard_1, T* message_d_checkerboard_1,
1067 T* message_l_checkerboard_1, T* message_r_checkerboard_1,
1068 float disc_k_bp,
unsigned int offset_data,
bool data_aligned,
1069 unsigned int bp_settings_disp_vals,
void* dst_processing)
1072 const unsigned int checkerboard_adjustment =
1077 if ((x_val >= (1u - checkerboard_adjustment)) &&
1079 (y_val > 0) && (y_val < (current_bp_level.
height_level_ - 1u)))
1083 RunBPIterationUpdateMsgVals<T, U>(x_val, y_val, current_bp_level,
1084 message_u_checkerboard_1, message_d_checkerboard_1,
1085 message_l_checkerboard_1, message_r_checkerboard_1,
1086 data_cost_checkerboard_0,
1087 message_u_checkerboard_0, message_d_checkerboard_0,
1088 message_l_checkerboard_0, message_r_checkerboard_0,
1089 (U)disc_k_bp, data_aligned, bp_settings_disp_vals, (U*)dst_processing,
1090 checkerboard_adjustment, offset_data);
1093 RunBPIterationUpdateMsgVals<T, U>(x_val, y_val, current_bp_level,
1094 message_u_checkerboard_0, message_d_checkerboard_0,
1095 message_l_checkerboard_0, message_r_checkerboard_0,
1096 data_cost_checkerboard_1,
1097 message_u_checkerboard_1, message_d_checkerboard_1,
1098 message_l_checkerboard_1, message_r_checkerboard_1,
1099 (U)disc_k_bp, data_aligned, bp_settings_disp_vals, (U*)dst_processing,
1100 checkerboard_adjustment, offset_data);
1134 template<RunData_t T,
unsigned int DISP_VALS>
1136 unsigned int x_val,
unsigned int y_val,
1140 const T* message_u_prev_checkerboard_0,
const T* message_d_prev_checkerboard_0,
1141 const T* message_l_prev_checkerboard_0,
const T* message_r_prev_checkerboard_0,
1142 const T* message_u_prev_checkerboard_1,
const T* message_d_prev_checkerboard_1,
1143 const T* message_l_prev_checkerboard_1,
const T* message_r_prev_checkerboard_1,
1144 T* message_u_checkerboard_0, T* message_d_checkerboard_0,
1145 T* message_l_checkerboard_0, T* message_r_checkerboard_0,
1146 T* message_u_checkerboard_1, T* message_d_checkerboard_1,
1147 T* message_l_checkerboard_1, T* message_r_checkerboard_1,
1148 unsigned int bp_settings_disp_vals)
1152 const bool copyCheckerboard1 = (((x_val == 0) || (y_val == 0)) ||
1156 unsigned int index_copy_to, index_copy_from;
1157 T prev_val_u, prev_val_d, prev_val_l, prev_val_r;
1158 const unsigned int checkerboard_part_adjustment =
1161 if constexpr (DISP_VALS > 0) {
1162 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1165 current_disparity, DISP_VALS);
1168 prev_val_u = message_u_prev_checkerboard_0[index_copy_from];
1169 prev_val_d = message_d_prev_checkerboard_0[index_copy_from];
1170 prev_val_l = message_l_prev_checkerboard_0[index_copy_from];
1171 prev_val_r = message_r_prev_checkerboard_0[index_copy_from];
1173 prev_val_u = message_u_prev_checkerboard_1[index_copy_from];
1174 prev_val_d = message_d_prev_checkerboard_1[index_copy_from];
1175 prev_val_l = message_l_prev_checkerboard_1[index_copy_from];
1176 prev_val_r = message_r_prev_checkerboard_1[index_copy_from];
1180 x_val*2 + checkerboard_part_adjustment, y_val*2,
1186 current_disparity, DISP_VALS);
1188 message_u_checkerboard_0[index_copy_to] = prev_val_u;
1189 message_d_checkerboard_0[index_copy_to] = prev_val_d;
1190 message_l_checkerboard_0[index_copy_to] = prev_val_l;
1191 message_r_checkerboard_0[index_copy_to] = prev_val_r;
1193 if (copyCheckerboard1) {
1194 message_u_checkerboard_1[index_copy_to] = prev_val_u;
1195 message_d_checkerboard_1[index_copy_to] = prev_val_d;
1196 message_l_checkerboard_1[index_copy_to] = prev_val_l;
1197 message_r_checkerboard_1[index_copy_to] = prev_val_r;
1202 x_val*2 + checkerboard_part_adjustment, y_val*2 + 1,
1207 current_disparity, DISP_VALS);
1209 message_u_checkerboard_0[index_copy_to] = prev_val_u;
1210 message_d_checkerboard_0[index_copy_to] = prev_val_d;
1211 message_l_checkerboard_0[index_copy_to] = prev_val_l;
1212 message_r_checkerboard_0[index_copy_to] = prev_val_r;
1214 if (copyCheckerboard1) {
1215 message_u_checkerboard_1[index_copy_to] = prev_val_u;
1216 message_d_checkerboard_1[index_copy_to] = prev_val_d;
1217 message_l_checkerboard_1[index_copy_to] = prev_val_l;
1218 message_r_checkerboard_1[index_copy_to] = prev_val_r;
1224 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
1227 current_disparity, bp_settings_disp_vals);
1230 prev_val_u = message_u_prev_checkerboard_0[index_copy_from];
1231 prev_val_d = message_d_prev_checkerboard_0[index_copy_from];
1232 prev_val_l = message_l_prev_checkerboard_0[index_copy_from];
1233 prev_val_r = message_r_prev_checkerboard_0[index_copy_from];
1235 prev_val_u = message_u_prev_checkerboard_1[index_copy_from];
1236 prev_val_d = message_d_prev_checkerboard_1[index_copy_from];
1237 prev_val_l = message_l_prev_checkerboard_1[index_copy_from];
1238 prev_val_r = message_r_prev_checkerboard_1[index_copy_from];
1242 x_val*2 + checkerboard_part_adjustment, y_val*2,
1247 current_disparity, bp_settings_disp_vals);
1249 message_u_checkerboard_0[index_copy_to] = prev_val_u;
1250 message_d_checkerboard_0[index_copy_to] = prev_val_d;
1251 message_l_checkerboard_0[index_copy_to] = prev_val_l;
1252 message_r_checkerboard_0[index_copy_to] = prev_val_r;
1254 if (copyCheckerboard1) {
1255 message_u_checkerboard_1[index_copy_to] = prev_val_u;
1256 message_d_checkerboard_1[index_copy_to] = prev_val_d;
1257 message_l_checkerboard_1[index_copy_to] = prev_val_l;
1258 message_r_checkerboard_1[index_copy_to] = prev_val_r;
1263 x_val*2 + checkerboard_part_adjustment, y_val*2 + 1,
1268 current_disparity, bp_settings_disp_vals);
1270 message_u_checkerboard_0[index_copy_to] = prev_val_u;
1271 message_d_checkerboard_0[index_copy_to] = prev_val_d;
1272 message_l_checkerboard_0[index_copy_to] = prev_val_l;
1273 message_r_checkerboard_0[index_copy_to] = prev_val_r;
1275 if (copyCheckerboard1) {
1276 message_u_checkerboard_1[index_copy_to] = prev_val_u;
1277 message_d_checkerboard_1[index_copy_to] = prev_val_d;
1278 message_l_checkerboard_1[index_copy_to] = prev_val_l;
1279 message_r_checkerboard_1[index_copy_to] = prev_val_r;
1286 template<RunData_t T, RunData_t U,
unsigned int DISP_VALS>
1288 unsigned int x_val,
unsigned int y_val,
1290 const T* data_cost_checkerboard_0,
const T* data_cost_checkerboard_1,
1291 const T* message_u_checkerboard_0,
const T* message_d_checkerboard_0,
1292 const T* message_l_checkerboard_0,
const T* message_r_checkerboard_0,
1293 const T* message_u_checkerboard_1,
const T* message_d_checkerboard_1,
1294 const T* message_l_checkerboard_1,
const T* message_r_checkerboard_1,
1295 float* disparity_between_images_device,
unsigned int bp_settings_disp_vals)
1297 const unsigned int x_val_checkerboard = x_val;
1303 unsigned int checkerboard_part_adjustment = (y_val % 2);
1306 x_val_checkerboard*2 + checkerboard_part_adjustment, y_val,
1309 if ((x_val_checkerboard >= (1 - checkerboard_part_adjustment)) &&
1311 (y_val > 0u) && (y_val < (current_bp_level.
height_level_ - 1u)))
1314 unsigned int bestDisparity{0u};
1316 if constexpr (DISP_VALS > 0) {
1317 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1319 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_u_checkerboard_1[
1321 x_val_checkerboard, (y_val + 1u),
1326 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_d_checkerboard_1[
1328 x_val_checkerboard, (y_val - 1u),
1333 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_l_checkerboard_1[
1335 (x_val_checkerboard + checkerboard_part_adjustment), y_val,
1340 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_r_checkerboard_1[
1342 (x_val_checkerboard + checkerboard_part_adjustment) - 1u, y_val,
1347 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(data_cost_checkerboard_0[
1349 x_val_checkerboard, y_val,
1354 if (val < best_val) {
1356 bestDisparity = current_disparity;
1361 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
1363 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_u_checkerboard_1[
1365 x_val_checkerboard, (y_val + 1u),
1369 bp_settings_disp_vals)]) +
1370 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_d_checkerboard_1[
1372 x_val_checkerboard, (y_val - 1u),
1376 bp_settings_disp_vals)]) +
1377 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_l_checkerboard_1[
1379 (x_val_checkerboard + checkerboard_part_adjustment), y_val,
1383 bp_settings_disp_vals)]) +
1384 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_r_checkerboard_1[
1386 (x_val_checkerboard + checkerboard_part_adjustment) - 1u, y_val,
1390 bp_settings_disp_vals)]) +
1391 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(data_cost_checkerboard_0[
1393 x_val_checkerboard, y_val,
1397 bp_settings_disp_vals)]);
1398 if (val < best_val) {
1400 bestDisparity = current_disparity;
1405 disparity_between_images_device[y_val*current_bp_level.
width_level_ +
1406 (x_val_checkerboard * 2 + checkerboard_part_adjustment)] = bestDisparity;
1408 disparity_between_images_device[y_val* current_bp_level.
width_level_ +
1409 (x_val_checkerboard * 2 + checkerboard_part_adjustment)] = 0;
1415 checkerboard_part_adjustment = ((y_val + 1u) % 2);
1418 x_val_checkerboard*2 + checkerboard_part_adjustment, y_val,
1421 if ((x_val_checkerboard >= (1 - checkerboard_part_adjustment)) &&
1423 (y_val > 0) && (y_val < (current_bp_level.
height_level_ - 1)))
1426 unsigned int bestDisparity{0u};
1428 if constexpr (DISP_VALS > 0) {
1429 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1431 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_u_checkerboard_0[
1433 x_val_checkerboard, (y_val + 1u),
1438 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_d_checkerboard_0[
1440 x_val_checkerboard, (y_val - 1u),
1445 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_l_checkerboard_0[
1447 (x_val_checkerboard + checkerboard_part_adjustment), y_val,
1452 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_r_checkerboard_0[
1454 (x_val_checkerboard + checkerboard_part_adjustment) - 1u, y_val,
1459 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(data_cost_checkerboard_1[
1461 x_val_checkerboard, y_val,
1466 if (val < best_val) {
1468 bestDisparity = current_disparity;
1473 for (
unsigned int current_disparity = 0; current_disparity < bp_settings_disp_vals; current_disparity++) {
1475 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_u_checkerboard_0[
1477 x_val_checkerboard, (y_val + 1u),
1481 bp_settings_disp_vals)]) +
1482 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_d_checkerboard_0[
1484 x_val_checkerboard, (y_val - 1u),
1488 bp_settings_disp_vals)]) +
1489 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_l_checkerboard_0[
1491 (x_val_checkerboard + checkerboard_part_adjustment), y_val,
1495 bp_settings_disp_vals)]) +
1496 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(message_r_checkerboard_0[
1498 (x_val_checkerboard + checkerboard_part_adjustment) - 1u, y_val,
1502 bp_settings_disp_vals)]) +
1503 util_functs::ConvertValToDifferentDataTypeIfNeeded<T, U>(data_cost_checkerboard_1[
1505 x_val_checkerboard, y_val,
1509 bp_settings_disp_vals)]);
1510 if (val < best_val) {
1512 bestDisparity = current_disparity;
1517 disparity_between_images_device[y_val * current_bp_level.
width_level_ +
1518 (x_val_checkerboard*2 + checkerboard_part_adjustment)] = bestDisparity;
1520 disparity_between_images_device[y_val * current_bp_level.
width_level_ +
1521 (x_val_checkerboard*2 + checkerboard_part_adjustment)] = 0;
1526 template<RunData_t T,
unsigned int DISP_VALS>
1528 unsigned int x_val,
unsigned int y_val,
1530 const T* data_cost_checkerboard_0,
const T* data_cost_checkerboard_1,
1531 const T* message_u_checkerboard_0,
const T* message_d_checkerboard_0,
1532 const T* message_l_checkerboard_0,
const T* message_r_checkerboard_0,
1533 const T* message_u_checkerboard_1,
const T* message_d_checkerboard_1,
1534 const T* message_l_checkerboard_1,
const T* message_r_checkerboard_1,
1535 unsigned int bp_settings_disp_vals = 0)
1537 if (((x_val + y_val) % 2) == 0) {
1538 printf(
"x_val: %d\n", x_val);
1539 printf(
"y_val: %d\n", y_val);
1540 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1541 printf(
"DISP: %d\n", current_disparity);
1542 printf(
"messageUPrevStereoCheckerboard: %f \n",
1545 current_disparity, DISP_VALS)]);
1546 printf(
"messageDPrevStereoCheckerboard: %f \n",
1549 current_disparity, DISP_VALS)]);
1550 printf(
"messageLPrevStereoCheckerboard: %f \n",
1553 current_disparity, DISP_VALS)]);
1554 printf(
"messageRPrevStereoCheckerboard: %f \n",
1557 current_disparity, DISP_VALS)]);
1558 printf(
"dataCostStereoCheckerboard: %f \n",
1561 current_disparity, DISP_VALS)]);
1564 printf(
"x_val: %d\n", x_val);
1565 printf(
"y_val: %d\n", y_val);
1566 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1567 printf(
"DISP: %d\n", current_disparity);
1568 printf(
"messageUPrevStereoCheckerboard: %f \n",
1571 current_disparity, DISP_VALS)]);
1572 printf(
"messageDPrevStereoCheckerboard: %f \n",
1575 current_disparity, DISP_VALS)]);
1576 printf(
"messageLPrevStereoCheckerboard: %f \n",
1579 current_disparity, DISP_VALS)]);
1580 printf(
"messageRPrevStereoCheckerboard: %f \n",
1583 current_disparity, DISP_VALS)]);
1584 printf(
"dataCostStereoCheckerboard: %f \n",
1587 current_disparity, DISP_VALS)]);
1592 template<RunData_t T,
unsigned int DISP_VALS>
1594 unsigned int x_val,
unsigned int y_val,
1596 const T* data_cost_checkerboard_0,
const T* data_cost_checkerboard_1,
1597 const T* message_u_checkerboard_0,
const T* message_d_checkerboard_0,
1598 const T* message_l_checkerboard_0,
const T* message_r_checkerboard_0,
1599 const T* message_u_checkerboard_1,
const T* message_d_checkerboard_1,
1600 const T* message_l_checkerboard_1,
const T* message_r_checkerboard_1,
1601 unsigned int bp_settings_disp_vals = 0)
1603 const unsigned int checkerboard_adjustment = (((x_val + y_val) % 2) == 0) ? ((y_val)%2) : ((y_val+1)%2);
1604 if (((x_val + y_val) % 2) == 0) {
1605 printf(
"x_val: %d\n", x_val);
1606 printf(
"y_val: %d\n", y_val);
1607 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1608 printf(
"DISP: %d\n", current_disparity);
1609 printf(
"messageUPrevStereoCheckerboard: %f \n",
1612 current_disparity, DISP_VALS)]);
1613 printf(
"messageDPrevStereoCheckerboard: %f \n",
1616 current_disparity, DISP_VALS)]);
1617 printf(
"messageLPrevStereoCheckerboard: %f \n",
1620 current_disparity, DISP_VALS)]);
1621 printf(
"messageRPrevStereoCheckerboard: %f \n",
1624 current_disparity, DISP_VALS)]);
1625 printf(
"dataCostStereoCheckerboard: %f \n",
1628 current_disparity, DISP_VALS)]);
1631 printf(
"x_val: %d\n", x_val);
1632 printf(
"y_val: %d\n", y_val);
1633 for (
unsigned int current_disparity = 0; current_disparity < DISP_VALS; current_disparity++) {
1634 printf(
"DISP: %d\n", current_disparity);
1635 printf(
"messageUPrevStereoCheckerboard: %f \n",
1638 current_disparity, DISP_VALS)]);
1639 printf(
"messageDPrevStereoCheckerboard: %f \n",
1642 current_disparity, DISP_VALS)]);
1643 printf(
"messageLPrevStereoCheckerboard: %f \n",
1646 current_disparity, DISP_VALS)]);
1647 printf(
"messageRPrevStereoCheckerboard: %f \n",
1650 current_disparity, DISP_VALS)]);
1651 printf(
"dataCostStereoCheckerboard: %f \n",
1654 current_disparity, DISP_VALS)]);
File with namespace for enums, constants, structures, and functions specific to belief propagation pr...
Header file that contains information about the stereo sets used for evaluation of the bp implementat...
Declares class to store and retrieve properties of a bp processing level.
File with namespace for enums, constants, structures, and functions specific to belief propagation pr...
Declares and defines structure that stores settings for current implementation run as well as functio...
Define constraints for data type in processing.
Utility functions for belief propagation processing that are used in both optimized CPU and CUDA impl...
Contains namespace with utility functions for implementation.
#define ARCHITECTURE_ADDITION
Namespace for enums, constants, structures, and functions specific to belief propagation processing.
ARCHITECTURE_ADDITION void RunBPIterationUpdateMsgVals(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const U prev_u_message[DISP_VALS], const U prev_d_message[DISP_VALS], const U prev_l_message[DISP_VALS], const U prev_r_message[DISP_VALS], const U data_message[DISP_VALS], T *current_u_message, T *current_d_message, T *current_l_message, T *current_r_message, const U disc_k_bp, bool data_aligned)
Kernel function to run the current iteration of belief propagation where the input messages and data ...
constexpr bool kOptimizedIndexingSetting
ARCHITECTURE_ADDITION void RetrieveOutputDisparityPixel(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const T *data_cost_checkerboard_0, const T *data_cost_checkerboard_1, const T *message_u_checkerboard_0, const T *message_d_checkerboard_0, const T *message_l_checkerboard_0, const T *message_r_checkerboard_0, const T *message_u_checkerboard_1, const T *message_d_checkerboard_1, const T *message_l_checkerboard_1, const T *message_r_checkerboard_1, float *disparity_between_images_device, unsigned int bp_settings_disp_vals)
ARCHITECTURE_ADDITION void SetInitDstProcessing(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const T *prev_u_message_array, const T *prev_d_message_array, const T *prev_l_message_array, const T *prev_r_message_array, const T *data_message_array, T *dst_message_array, U disc_k_bp, bool data_aligned, unsigned int bp_settings_disp_vals, U *dst_processing, unsigned int checkerboard_adjustment, unsigned int offset_data, unsigned int current_disparity, unsigned int proc_array_idx)
ARCHITECTURE_ADDITION void PrintDataAndMessageValsAtPointKernel(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const T *data_cost_checkerboard_0, const T *data_cost_checkerboard_1, const T *message_u_checkerboard_0, const T *message_d_checkerboard_0, const T *message_l_checkerboard_0, const T *message_r_checkerboard_0, const T *message_u_checkerboard_1, const T *message_d_checkerboard_1, const T *message_l_checkerboard_1, const T *message_r_checkerboard_1, unsigned int bp_settings_disp_vals=0)
ARCHITECTURE_ADDITION void RunBPIterationUsingCheckerboardUpdatesKernel(unsigned int x_val, unsigned int y_val, beliefprop::CheckerboardPart checkerboard_to_update, const beliefprop::BpLevelProperties ¤t_bp_level, const T *data_cost_checkerboard_0, const T *data_cost_checkerboard_1, T *message_u_checkerboard_0, T *message_d_checkerboard_0, T *message_l_checkerboard_0, T *message_r_checkerboard_0, T *message_u_checkerboard_1, T *message_d_checkerboard_1, T *message_l_checkerboard_1, T *message_r_checkerboard_1, float disc_k_bp, unsigned int offset_data, bool data_aligned, unsigned int bp_settings_disp_vals)
Kernel function to run the current iteration of belief propagation in parallel using the checkerboard...
ARCHITECTURE_ADDITION void InitializeMessageValsToDefaultKernelPixel(unsigned int x_val_in_checkerboard, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, T *message_u_checkerboard_0, T *message_d_checkerboard_0, T *message_l_checkerboard_0, T *message_r_checkerboard_0, T *message_u_checkerboard_1, T *message_d_checkerboard_1, T *message_l_checkerboard_1, T *message_r_checkerboard_1, unsigned int bp_settings_disp_vals)
Initialize the message values at each pixel of the current level to the default value.
ARCHITECTURE_ADDITION void MsgStereo(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const U messages_neighbor_1[DISP_VALS], const U messages_neighbor_2[DISP_VALS], const U messages_neighbor_3[DISP_VALS], const U data_costs[DISP_VALS], T *dst_message_array, U disc_k_bp, bool data_aligned)
ARCHITECTURE_ADDITION void PrintDataAndMessageValsToPointKernel(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const T *data_cost_checkerboard_0, const T *data_cost_checkerboard_1, const T *message_u_checkerboard_0, const T *message_d_checkerboard_0, const T *message_l_checkerboard_0, const T *message_r_checkerboard_0, const T *message_u_checkerboard_1, const T *message_d_checkerboard_1, const T *message_l_checkerboard_1, const T *message_r_checkerboard_1, unsigned int bp_settings_disp_vals=0)
CheckerboardPart
Define the two checkerboard "parts" that the image is divided into.
ARCHITECTURE_ADDITION void InitializeCurrentLevelDataPixel(unsigned int x_val, unsigned int y_val, beliefprop::CheckerboardPart checkerboard_part, const beliefprop::BpLevelProperties ¤t_bp_level, const beliefprop::BpLevelProperties &prev_bp_level, const T *data_cost_checkerboard_0, const T *data_cost_checkerboard_1, T *data_cost_current_level, unsigned int offset_num, unsigned int bp_settings_disp_vals)
Initialize the data costs at the "next" level up in the pyramid given that the data at the lower has ...
ARCHITECTURE_ADDITION bool WithinImageBounds(unsigned int x_val, unsigned int y_val, unsigned int width, unsigned int height)
Checks if the current point is within the image bounds Assumed that input x/y vals are above zero sin...
ARCHITECTURE_ADDITION unsigned int RetrieveIndexInDataAndMessage(unsigned int x_val, unsigned int y_val, unsigned int width, unsigned int height, unsigned int current_disparity, unsigned int total_num_disp_vals, unsigned int offset_data=0u)
Retrieve the current 1-D index value of the given point at the given disparity in the data cost and m...
ARCHITECTURE_ADDITION void InitializeBottomLevelDataPixel(unsigned int x_val, unsigned int y_val, const beliefprop::BpLevelProperties ¤t_bp_level, const float *image_1_pixels_device, const float *image_2_pixels_device, T *data_cost_stereo_checkerboard_0, T *data_cost_stereo_checkerboard_1, float lambda_bp, float data_k_bp, unsigned int bp_settings_disp_vals)
Initialize the "data cost" for each possible disparity between the two full-sized input images ("bott...
ARCHITECTURE_ADDITION void DtStereo(T f[DISP_VALS])
function retrieve the minimum value at each 1-d disparity value in O(n) time using Felzenszwalb's met...
constexpr float kHighValBpKernel
High value as used in kernel currently hard-coded to be below maximum short value of 32767.
ARCHITECTURE_ADDITION void CopyMsgDataToNextLevelPixel(unsigned int x_val, unsigned int y_val, beliefprop::CheckerboardPart checkerboard_part, const beliefprop::BpLevelProperties ¤t_bp_level, const beliefprop::BpLevelProperties &next_bp_level, const T *message_u_prev_checkerboard_0, const T *message_d_prev_checkerboard_0, const T *message_l_prev_checkerboard_0, const T *message_r_prev_checkerboard_0, const T *message_u_prev_checkerboard_1, const T *message_d_prev_checkerboard_1, const T *message_l_prev_checkerboard_1, const T *message_r_prev_checkerboard_1, T *message_u_checkerboard_0, T *message_d_checkerboard_0, T *message_l_checkerboard_0, T *message_r_checkerboard_0, T *message_u_checkerboard_1, T *message_d_checkerboard_1, T *message_l_checkerboard_1, T *message_r_checkerboard_1, unsigned int bp_settings_disp_vals)
Kernel to copy the computed BP message values at the current level to the corresponding locations at ...
POD struct to store bp level data. Struct can be passed to global CUDAs kernel so needs to take restr...
unsigned int height_level_
unsigned int width_checkerboard_level_
unsigned int width_level_
unsigned int padded_width_checkerboard_level_