759 {
760 float x_ratio =
761 static_cast<float>(input_crop_width_) * lane_map_width_inverse_;
762 float y_ratio =
763 static_cast<float>(input_crop_height_) * lane_map_height_inverse_;
764 image_laneline_point_set_.clear();
765 int lane_map_dim = lane_map_width_ * lane_map_height_;
766 float lane_map_width_float = static_cast<float>(lane_map_width_);
767 for (int i = 0; i < lane_map_height_; i++) {
768 for (int j = 0; j < lane_map_width_; j++) {
769 int pixel_pos = i * lane_map_width_ + j;
770 float score = lane_output_[lane_map_dim * 2 + pixel_pos];
771 if (score < laneline_point_score_thresh_) {
772 continue;
773 }
774 float dist_left = lane_output_[pixel_pos];
775 float dist_right = lane_output_[lane_map_dim + pixel_pos];
776 float map_x_left =
777 static_cast<float>(j) - dist_left * lane_map_width_float;
778 float map_x_right =
779 static_cast<float>(j) + dist_right * lane_map_width_float;
780 float org_img_y =
781 static_cast<float>(i) * y_ratio + static_cast<float>(input_offset_y_);
782 if (map_x_left > 0) {
783 LanePointInfo left_point;
784 float org_img_x_left =
785 map_x_left * x_ratio + static_cast<float>(input_offset_x_);
786 left_point.x = org_img_x_left;
787 left_point.y = org_img_y;
788 left_point.score = score;
789 image_laneline_point_set_.push_back(left_point);
790 }
791 if (map_x_right < lane_map_width_float) {
792 LanePointInfo right_point;
793 float org_img_x_right =
794 map_x_right * x_ratio + static_cast<float>(input_offset_x_);
795 right_point.x = org_img_x_right;
796 right_point.y = org_img_y;
797 right_point.score = score;
798 image_laneline_point_set_.push_back(right_point);
799 }
800 }
801 }
802 return image_laneline_point_set_;
803}