Skip to content

Commit 17af717

Browse files
author
Manuel Stoiber
committed
fix(RegionModality): consider rounding errors when checking if line is on the image
1 parent e2cdffd commit 17af717

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

include/rbgt/region_modality.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ class RegionModality {
264264
float ppv_{};
265265
int image_width_minus_1_{};
266266
int image_height_minus_1_{};
267+
int image_width_minus_2_{};
268+
int image_height_minus_2_{};
267269

268270
// Precalculated variables for poses (continuously changing)
269271
Transform3fA body2camera_pose_;

src/region_modality.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,8 @@ void RegionModality::PrecalculateCameraVariables() {
466466
ppv_ = camera_ptr_->intrinsics().ppv;
467467
image_width_minus_1_ = camera_ptr_->image().cols - 1;
468468
image_height_minus_1_ = camera_ptr_->image().rows - 1;
469+
image_width_minus_2_ = camera_ptr_->image().cols - 2;
470+
image_height_minus_2_ = camera_ptr_->image().rows - 2;
469471
}
470472

471473
void RegionModality::PrecalculatePoseVariables() {
@@ -636,10 +638,10 @@ bool RegionModality::CalculateSegmentProbabilities(
636638
float v_f = center_v + v_step * (float(u) - center_u) + 0.5f;
637639
float v_f_end = v_f + v_step * float(line_length_minus_1_);
638640

639-
// Check if line is on image
641+
// Check if line is on image (margin of 1 for rounding errors of v_f_end)
640642
if (u < 0 || u_end > image_width_minus_1_ || int(v_f) < 0 ||
641-
int(v_f) > image_height_minus_1_ || int(v_f_end) < 0 ||
642-
int(v_f_end) > image_height_minus_1_) {
643+
int(v_f) > image_height_minus_1_ || int(v_f_end) < 1 ||
644+
int(v_f_end) > image_height_minus_2_) {
643645
return false;
644646
}
645647

@@ -692,10 +694,10 @@ bool RegionModality::CalculateSegmentProbabilities(
692694
float u_f = center_u + u_step * (float(v) - center_v) + 0.5f;
693695
float u_f_end = u_f + u_step * float(line_length_minus_1_);
694696

695-
// Check if line is on image
697+
// Check if line is on image (margin of 1 for rounding errors of u_f_end)
696698
if (v < 0 || v_end > image_height_minus_1_ || int(u_f) < 0 ||
697-
int(u_f) > image_width_minus_1_ || int(u_f_end) < 0 ||
698-
int(u_f_end) > image_width_minus_1_) {
699+
int(u_f) > image_width_minus_1_ || int(u_f_end) < 1 ||
700+
int(u_f_end) > image_width_minus_2_) {
699701
return false;
700702
}
701703

0 commit comments

Comments
 (0)