จะดาวน์สุ่มตัวอย่าง point cloud ในขณะที่ยังคงรักษาลำดับของมันได้อย่างไร (บมจ.ซี++)

ฉันต้องการสุ่มตัวอย่าง pointcloud ขาเข้าโดยใช้ตัวกรอง passthrough ที่ไลบรารี pcl ให้มา และยังรักษาลำดับของคลาวด์ที่กำหนดด้วย โซลูชันปัจจุบันของฉันเป็นดังนี้:

using point_type_colored = pcl::PointXYZRGB;
using point_cloud_colored = pcl::PointCloud<point_type_colored>;

point_cloud_colored::Ptr registration_util::pass_through_filter(
     const point_cloud_colored::Ptr& cloud_in, double p_t_x_min, double p_t_x_max,
     double p_t_y_min, double p_t_y_max, double p_t_z_min, double p_t_z_max)
{
     point_cloud_colored::Ptr filtered_cloud(new point_cloud_colored);
     *filtered_cloud = *cloud_in;
     pcl::PassThrough<point_type_colored> pass_filter;

     //filter x boundaries
     if (p_t_x_min != p_t_x_max)
     {
         pass_filter.setInputCloud(filtered_cloud);
         pass_filter.setFilterFieldName("x");
         pass_filter.setFilterLimits(p_t_x_min, p_t_x_max);
         pass_filter.filter(*filtered_cloud);
     }

     //filter y boundaries
     if (p_t_y_min != p_t_y_max)
     {
         pass_filter.setInputCloud(filtered_cloud);
         pass_filter.setFilterFieldName("y");
         pass_filter.setFilterLimits(p_t_y_min, p_t_y_max);
         pass_filter.filter(*filtered_cloud);
     }

     //filter z boundaries
     if (p_t_z_min != p_t_z_max)
     {
         pass_filter.setInputCloud(filtered_cloud);
         pass_filter.setFilterFieldName("z");
         pass_filter.setFilterLimits(p_t_z_min, p_t_z_max);
         pass_filter.filter(*filtered_cloud);
     }

     return std::move(filtered_cloud);
}

คลาวด์อินพุตมีความกว้างที่กำหนด (= 1280) และความสูง (=720) ซึ่งหมายความว่ามีการเรียงลำดับพอยต์คลาวด์ แต่คลาวด์เอาท์พุตมีความสูงเพียง 1 และความกว้าง 92160 ซึ่งหมายความว่าคลาวด์สูญเสียลำดับเนื่องจากการสุ่มตัวอย่างต่ำ

ฉันจะรักษาลำดับดั้งเดิมของอินพุตคลาวด์ได้อย่างไร หากเป็นไปได้ มีวิธีแก้ไขปัญหาที่คล้ายกันสำหรับวิธีการสุ่มตัวอย่างอื่นๆ เช่น การกรองแบบสุ่ม หรือไม่


person Michael    schedule 08.02.2021    source แหล่งที่มา
comment
สวัสดี MichaelN ยินดีต้อนรับ.. ฉันไม่แน่ใจว่าฉันเข้าใจปัญหาของคุณหรือไม่ โค้ดดูดี คุณบอกว่ามีเพียงจุดเดียว (พิกเซล?) ที่ถูกกรองจากพอยต์คลาวด์ดั้งเดิมของคุณ ? บางทีขีดจำกัดต่ำสุด-สูงสุดของคุณอาจแคบเกินไป คุณช่วยเล่าเพิ่มเติมเกี่ยวกับสิ่งที่คุณพยายามทำให้สำเร็จโดยคงความสูงเดิมไว้ได้ไหม คุณกำลังกรอง.. ถ้าเป็นรูปภาพคุณก็อาจเช่น ทำภาพว่างๆให้มีขนาดเท่ากันแล้วแค่ใส่พิกเซล (กรอง) ให้ถูกที่ แต่.. ภาพไม่ใช่ point cloud.. ภาพออกมา..   -  person Goodies    schedule 08.02.2021
comment
@Goodies สวัสดีขอบคุณสำหรับการตอบกลับของคุณ ขออภัยที่ฉันพูดไม่ดี (ฉันค่อนข้างใหม่กับ PCL) สิ่งที่ฉันหมายถึงคือการเรียงลำดับของคลาวด์จุดที่เข้ามาจะถูกทำลายโดยตัวกรองเนื่องจากความสูงของคลาวด์เอาท์พุตคือ 1 เท่านั้นหลังจากกระบวนการ แต่ถ้าคุณเพิกเฉยต่อคำสั่ง point cloud ก็ไม่เป็นไร มันเป็นเพียงเกี่ยวกับการสั่งซื้อ   -  person Michael    schedule 09.02.2021


คำตอบ (1)


คุณกำลังมองหาฟังก์ชัน setKeepOrganized การระบุ true จะตั้งค่าแต่ละจุดที่กรองเป็น NaN แทนที่จะลบจุด

คุณยังเปลี่ยนค่าที่จะตั้งค่าได้ด้วย setUserFilterValue แต่คงไว้ NaN มี ประโยชน์ที่อัลกอริธึม PCL อื่นๆ จะไม่พิจารณาประเด็นเหล่านี้สำหรับอัลกอริธึมของพวกเขา

person kanstar    schedule 10.02.2021
comment
ฉันมองข้ามสิ่งนั้นโดยสิ้นเชิง ขอบคุณ! - person Michael; 10.02.2021