Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PCL (Point Cloud Library)の基本となぜ点群処理か_2023年_第2版.pdf

PCL (Point Cloud Library)の基本となぜ点群処理か_2023年_第2版.pdf

2014年10月の「コンピュータビジョン勉強会関東(点群特集の回)」で発表した資料を,再編集して2023年1月に公開しました.

cvml-expertguide

January 22, 2023
Tweet

Other Decks in Technology

Transcript

  1. ͜ͷ<ୈ൛>ʹ͍ͭͯ w ͜ͷࢿྉ͸ʮ೥ͷ$7ษڧձؔ౦ʯͰͷൃදࢿྉΛʮ೥݄ʯ ʹߋ৽ͯ͠࠶౓ެ։ͨ͠΋ͷͰ͋Δɽ w ೥΄ͲܦͬͨݱࡏͰ΋ʮ%఺܈ॲཧ΁ͷ1$-Λհͨ͠ಋೖʯͱͯ͠༗ ༻ͩͱ൑அ͠ɼ࠶ެ։͢Δ͜ͱʹͨ͠ɽ w ಺༰͸ͳΔ΂ͦ͘ͷ··ʹ͠ɼಡΈ΍͘͢ͳΔΑ͏จମͱσβΠϯͳͲͩ ͚গ͠੔͑ͨɽʮ೥݄ݱࡏͷঢ়گɾఆ൪ʯͱͷဃ཭͕͋·Γʹܹ

    ͍͠಺༰ʹ͍ͭͯ͸ɼ੺৭Ͱ஫ऍͷ௥ՃΛߦͬͨɽ w ೥ͷʮਂ૚ֶशϒʔϜҎલͷݹ͍಺༰ʯͰ͋Δ͜ͱʹ஫ҙ͞Εͨ ͍ɽʢٯʹݴ͏ͱɼए͍ํ͕աڈΛ஌Δʹ͸ϞοςίΠͷ಺༰ ɽ w ࠓͰ΋ຊ࣭తͳॴ͸มΘ͍ͬͯͳ͍ɽΑͬͯɼϩϘοτϏδϣϯΛςʔϚ ͱ͞ΕΔڭһͷํͳͲ΋ɼ͜ͷࢿྉΛࠓޙ΋༗ޮతʹ׆༻͍͚ͯͨͩ͠Δ ͱ޾͍Ͱ͋Δɽ 
  2. ຊ೔ͷ಺༰ w 1$-ͷجຊͷ঺հ w ʮ৽ೖੜͷօɺ1$-ͷ՝୊΋΍ͬͯ΋Β͍·͢ʯΛղܾɽ w 1$-ͱ఺܈ॲཧͷ🔰޲͚νϡʔτϦΞϧΛఏڙɽ w ͳͥ఺܈ॲཧ͔ʁ w

    ʮ%ͱ͔೉ͦ͠͏͔ͩΒɺը૾Ͱ΍Γ·͠ΐ͏ΑઌഐʯΛղܾ w %఺܈ॲཧͷํ͕༗རͰָͳ͜ͱΛ঺հɽ ˞ຊ౰͸ʮʯͷॱͰઆ໌͕ͨ͠ɼઌʹ1$-঺հͨ͠΄͏͕۩ମతʹΠϝʔδ ͠΍͘͢ͳΔͷͰɼ͜ͷॱͰઆ໌ɽ 
  3. ఺܈ ϙΠϯτΫϥ΢υ ର৅ͷ֤఺Qͷ̏࣍ݩ࠲ඪ஋ Y Z [ ͱɼ৭ 3(# 3(#" ͕֨ೲ͞Εͨσʔλ

    ը૾σʔλͱͷڞ௨఺ɿ ɹڑ཭ը૾ͱͯ͠ࡱӨͰ͖Δ৔߹͸ɺ3(#ը૾ͱղ૾౓Λ౷ҰͰ͖Δ ྫɿ,JOFDUɺ4PGU,JOFUJD  ը૾σʔλͱͷ૬ҧ఺ɿ w  ࿈ଓͯ͠ର৅ද໘͕ಘΒΕΔͱ͸ݶΒͳ͍ w ͕݀͋ͬͨΓɺϊΠδʔͩͬͨΓ͢Δ ݀ຒΊ΍ฏ׈Խ͕ඞཁ  w εϖοΫϧϊΠζ ಛʹ5P' ͕͋Δ  1$-ͷجຊͷ঺հ
  4. ,JOFDUొ৔Ҏલ d w ਫ਼޼ͳ%σʔλ͕ಘΒΕΔΘ͚Ͱ͸ͳ͘ɼ΍΍ϊΠδʔͳσ ϓε͔ΒՄೳͳॲཧ͔࣮͠ݱͰ͖ͳ͍ɽ w ं΍ϩϘοτ͔Βݟͯ΍΍ԕํͷ৔ॴΛೝࣝର৅ͱ͍ͯ͠Δɽ w .74ͱύονϕʔε̏࣍ݩ෮ݩɿ(PPHMF&BSUIͳͲ w

    ର৅γʔϯͷपғΛ৭Μͳ֯౓͔ΒࡱӨ͢Δඞཁ͋Γ w %࠶ߏ੒ͷܭࢉ͕࣌ؒ௕͘ɼ࣮࣌ؒΞϓϦʹ͸࢖༻ Ͱ͖ͳ͍  wεςϨΦΧϝϥंࡌը૾ೝࣝwϚγϯϏδϣϯͰ࢖༻ 1$-ͷجຊͷ঺հ
  5. ,JOFDUొ৔Ҏޙ d w ୭Ͱ΋%఺܈ GQT ͕࢖͑ΔΑ͏ʹͳ͕ͬͨɿ w %఺܈ϝογϡॲཧͷϊ΢ϋ΢Λ͍࣋ͬͯΔਓ͕গͳ͍ɻ w ,JOFDU4%,0QFO/*͸఺܈ͦͷ΋ͷʹର͢Δ֤छॲཧ͸ର৅֎

    ʢਓ෺࢟੎ਪఆͳͲɼ/BUVSBM6TFS*OUFSGBDFͷఏڙ͕ओ໨తʣ w 0QFO$7ͷΑ͏ͳϥΠϒϥϦ͕ɼ%఺܈޲͚ʹ͸ଘࡏ͍ͯ͠ͳ͍ w ഁ֨తʹ௿Ձ֨ͳ,JOFDUͷొ৔ʹΑΓɺ୭Ͱ΋ ʮ%఺܈ʯ͕ʮಈը GQT ʯͰऔಘՄೳʹɻ ʮ࣍ݩ఺܈ॲཧʯͷχʔζʹԠ͑ΔͨΊʹ 1PJOU$MPVE-JCSBSZ͕ొ৔ ೥  1$-ͷجຊͷ঺հ
  6. %ը૾ηϯγϯάͷຽओԽ ιϑτϋʔυ྆໘Ͱ։࢝ w ϋʔυ΢ΣΞ ηϯαʔ ͷຽओԽ w ίϯγϡʔϚσϓεηϯαʔ ,JOFDU 4PGULJOFUJD

    ͕σε Ϋτοϓ1$޲͚ʹొ৔ɻ w ϞόΠϧ޲͚ͷJ1BEͷ 4USVDUVSF4FOTUPS΍ "OESPJEͷ(PPHMF5BOHP ͳͲ΋ొ৔࢝͠Ί͍ͯΔ w ιϑτ΢ΣΞͷຽओԽɿ w 1PJOU$MPVE-JCSBSZͷొ৔Ͱ% ίϯϐϡʔλϏδϣϯ఺܈ॲཧͷ ιϑτ΢ΣΞ࡞੒ͷෑډ͕ҰؾʹԼ ͕Δɻ w 0QFOGSBNFXPSLTͳͲ΁ͷ 0QFO/*ͷ౷߹΍0DVMVTͳͲͷొ৔ ʹΑΓɺՄࢹԽɺΠϯλϥΫγϣ ϯɺ73ͳͲͰͷ%ίϯϐϡʔλϏ δϣϯͷ࢖༻΋༰қԽɾ׆ൃԽ  1$-ͷجຊͷ঺հ
  7. ҆Ձͳ,JOFDUొ৔ ˠ%఺܈Ϗδϣϯ͕खܰʹࢼͤΔΑ͏ʹ w Ҏલ͸ը૾ೖྗͩͬͨʮϚγ ϯϏδϣϯ෼໺ʯ΋ɼ%఺܈ ೖྗΛࢼ͢͜ͱ͕׆ൃԽɽ D. Holz, R. et

    al. “Towards semantic scene analysis with Time-of- fl ight cameras”. RoboCup Intermational Symposium, 2010 M .Fallon et al. “Ef fi cient Scene Simulation for Robust Monte Carlo Localization Using an RGB-D Camera” CVPR 2012 tutorial  w ϨϯδϑΝΠϯμ͕ޮՌͳͷͰ ಴࠳͍ͯͨ͠ʮҠಈϩϘοτͷ ؟ʯͱͯ͠΋ɼظ଴ͷ੕ʹɽ 1$-ͷجຊͷ঺հ
  8. 1PJOU$MPVE-JCSBSZͷొ৔ w 1PJOU$MPVEͱ.FTIͷॲཧͷͨΊͷ$ ݴޠʹΑΔΦʔϓϯ ιʔεͷେن໛ϥΠϒϥϦ w 0QFO$7ͷ࢞ຓϓϩδΣΫτ w #4%ϥΠηϯεແྉͰ঎༻࢖༻Մೳ w

    8JO.BD-JOVY "OESPJEJ04ͷΫϩεϓϥοτϑΥʔϜ w 0QFO/*Λ͸͡Ίɺ֤ࣾσϓεηϯαʔͱ௚઀࿈ܞՄೳʢ఺܈ ͷ؆୯ͳϦΞϧλΠϜऔಘʣ  1$-ͷجຊͷ঺հ
  9. QDM1PJOU$MPVE1PJOU5ܕ  جຊతͳએݴํ๏ɿ pcl::PointCloud<PointT>::Ptr cloud( new PointCloud<PointT>() ); 1PJOU$MPVEʹؚ·ΕΔ఺ͷܗࣜΛද͢1PJOU5ͷྫ QDM1PJOU9:;

    fl PBUY Z[ QDM1PJOU9:;* fl PBUY Z[ ً౓ QDM1PJOU9:;3(#" fl PBUY Z[ 3(#" QDM1PJOU/PSNBM fl PBUY Z[ʴOPSNBM<> DVSWBUVSF QDM)JTUPHSBN fl PBUIJTUPHSBN</>ɹ ྫ ɿ֤఺͕1PJOU9:;3(#"ͷ1PJOU$MPVEܕΦϒδΣΫτͷ࡞੒ PointCloud<pcl::PointXYZRGBA>::Ptr data(new PointCloud<pcl::PointXYZRGBA>()); ʮ৭෇͖ͷ%఺܈ɺ๏ઢʯͳͲͷσʔλΛ֨ೲ͢Δ 1$-ͰҰ൪Α͘࢖͏ΦϒδΣΫτ 1$-ͷجຊͷ঺հ
  10. ఺܈ͷϦΞϧλΠϜऔಘ #include <pcl/io/openni_grabber.h> pcl::OpenNIGrabber grabber(argv[2]); boost::function<void (const CloudConstPtr&) > cloud_cb

    = boost::bind (&OpenNIViewer::cloud_callback,this, _1); boost::signals2::connection cloud_connection = grabber_.registerCallback (cloud_cb);ɹ// cloud_cbؔ਺Λొ࿥ void cloud_callback (const CloudConstPtr& cloud) { boost::mutex::scoped_lock lock (cloud_mutex_); cloud_ = cloud; //ຖϑϨʔϜ͝ͱͷcloud΁ͷॲཧΛ͜͜ʹهड़ }  0QFO/*(SBCCFSʹCJOEͨؔ͠਺ͷҾ਺Ͱɼ֤ϑϨʔϜͷ 1PJOU$MPVEΦϒδΣΫτ͕औಘͰ͖Δ ຖϑϨʔϜͷॲཧΛίʔϧόοΫؔ਺ʹهड़͢Δ 1$-ͷجຊͷ঺հ
  11. 1$-7JTVBMJ[FS w 1$-ͷ఺܈Λͱͯ΋؆୯ʹ%ՄࢹԽ͕Ͱ͖Δ PQFO$7Ͱ͍͏IJHI(6*  w Ϛ΢ε΍ΩʔϘʔυͷೖྗ΋ड͚෇͚Δɽ w %Ϟσϧ PCKϑΝΠϧ౳

    ΋ಉ࣌ʹදࣔͰ͖ɺ%σʔλʹॏཁͳ๏ઢͷ ՄࢹԽػೳ΋࠷ॳ͔Β౥ࡌ ՄࢹԽπʔϧ 1$-7JTVBMJ[FS  ͕ఏڙ͞Ε͍ͯΔ͓͔͛Ͱɼ ఺܈ॲཧͷΈʹूதͰ͖Δͱ͍ ͏ϝϦοτΛ1$-͕࢝Ίͯఏڙ Ͱ͖͍ͯΔ  ˞ ୈ൛ͷ೥ݱࡏͰ͸ɼଞʹ΋ଟ͘ख ஈ͕͋Γɼ͋͘·Ͱ೥౰࣌ͷ࿩Ͱ ͋Δ͜ͱʹ஫ࢹ 1$-ͷجຊͷ঺հ
  12. 1$-ͷ๏ઢਪఆ w '-"//Λ༻͍ͨ,EUSFFʹΑΔۙࣅ࠷ۙ๣ ୳ࡧ QDM/PSNBM&TUJNBUJPO  w *OUFHSBM*NBHFΛ༻͍ͨߴ଎ͳ๏ઢਪఆ QDM*OUFHSBM*NBHF/PSNBM&TUJNBUJ PO

     ͜ΕΒͷΫϥεʹؙ౤͛͢Δ͚ͩͰ๏ઢਪఆ͕Մೳ ʹ1$-͸ 0QFO$7ͷΑ͏ʹ ศརͳϥΠϒϥϦͰ͋Δ ˞ ୈ൛ͷ೥ݱࡏͰ͸ʮৄղ࣍ݩ఺܈ॲཧʯ͕࠾༻͍ͯ͠Δʮ0QFO%ʯ ΋ศརͰ͋Δɽࠓ͸1$-͚͕ͩબ୒ࢶͱ͍͏ঢ়گͰ͸ͳ͍ɽਂ૚ֶशϕʔεͷ %఺܈ॲཧʹ͍ͭͯ΋ɼଟ਺ιϑτ΢ΣΞ΋ެ։͞Ε͍ͯΔ 1$-ͷجຊͷ঺հ
  13. 'JMUFSTϞδϡʔϧ w ఺܈޲͚ͷϊΠζ΍֎Ε஋আڈɺฏ׈ԽͳͲͷϑΟϧλϦϯάΛఏڙ w ओͳΞϧΰϦζϜɿ w ಛఆͷྖҬ͚ͩநग़ 1BUI5ISPVHI  w

    ฏ׈Խ #JMBUFSBM'JMUFS  w μ΢ϯαϯϓϦϯά 7PYFM(SJE fi MUFS  w ֎Ε஋আڈʢ4UBUJTUJDBM0VUMJFS3FNPWBMʣ  1$-ͷجຊͷ঺հ
  14. 'JMUFSJOHͷඞཁੑ w ͕݀͋Δˠ݀ຒΊॲཧ 4VSGBDFϞδϡʔϧ  w ϊΠζ͕ଟ͍ w ࿈ଓͨ͠ද໘্ͰͷԜತˠ#JMBUFSBM'JMUFSͰΤοδอଘͨ͠ ··ฏ׈Խ

    w ࢄൃతͳϊΠζʢεϖοΫϧϊΠζʣ ˠ4UBUJTUJDBM0VUMJFS3FNPWBMͰ֎Ε஋আڈ w σʔλྔ͕ଟ͍ˠ7PYFM(SJE'JMUFSͰμ΢ϯαϯϓϦϯά %ηϯαʔͷੜσʔλ͸ดͨ͡ʢ݀ͷແ͍ʣ حྷͳ఺܈Ͱ͸ͳ͍ͷͰલॲཧͷඞཁੑ͋Γ  1$-ͷجຊͷ঺հ
  15. 1BTT5ISPVHI'JMUFS pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>); pcl::PassThrough<pcl::PointXYZ>

    pass; pass.setInputCloud (cloud); pass.setFilterFieldName ("z"); pass.setFilterLimits (0.0, 1.0); //pass.setFilterLimitsNegative (true); ࢦఆൣғΛऔΓআ͘৔߹ pass.filter (*cloud_filtered); ೖྗ఺܈ͷ͏ͪɼࢦఆͨ̍࣍͠ݩ ͜͜Ͱ͸[ ํ޲ͷಛఆ ͷൣғͷ఺܈ͷΈΛɼϑΟϧλϦϯάॲཧͰऔಘͰ͖Δ  1$-ͷجຊͷ঺հ
  16. 7PYFM(SJE'JMUFS // ࢦఆͨ͠voxel grid·Ͱμ΢ϯαϯϓϦϯά pcl::VoxelGrid<pcl::PointXYZ> vg; vg.setInputCloud (cloud); vg.setLeafSize (0.01f,

    0.01f, 0.01f); //0.01mཱํͷάϦουΛઃఆ vg. filter (∗cloud filtered ); w ࢦఆͨ͠7PYFM(SJEͷେ͖͞·Ͱ఺܈ΛϘΫηϧԽ w ֤άϦου͸άϦου಺ͷ఺ͷதԝ஋Ͱۙࣅ͞ΕΔ  1$-ͷجຊͷ঺հ
  17. 4UBUJTUJDBM0VUMJFS3FNPWBM pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor; sor.setInputCloud (cloud); sor.setMeanK (50); sor.setStddevMulThresh (1.0); sor.filter

    (*cloud_filtered); w ہॴ͝ͱͷີ౓ʹै͍ɺ఺ΛϑΟϧλϦϯά w ֤ྖҬͰฏۉີ౓͔Βൺ΂ͯεύʔεͳ఺Λআڈ  1$-ͷجຊͷ঺հ
  18. QDM3FDPHOJUJPO w %ಛ௃ϕʔεͰςϯϓϨʔ τ఺܈ͱͷؒͰϚονϯά w ෺ମΛೝࣝ %࢟੎ਪఆ w ௚ײతʹ͸ ը૾ಉ࢜Ͱͷ

    4*'5Ϛονϯάͷ࣍ݩ൛ IUUQQPJOUDMPVETPSHEPDVNFOUBUJPOUVUPSJBMT DPSSFTQPOEFODF@HSPVQJOHQIQDPSSFTQPOEFODFHSPVQJOH  ͳͥ఺܈ॲཧ͔ʁ
  19. ը૾ೖྗͰͷॲཧͰ΋ 
 চฏ໘͘Β͍ਪఆͰ͖Δ͕ ఺܈͕ͳ͘ ը૾ೖྗ͔ΒͰ΋ɼ ʮᶃΧϝϥΩϟϦϒϨʔγϣϯ ʮᶄচͷ%࠲ඪܥ͕ط஌ʯ Ͱɼচ໘ͷີͳ࠲ඪܥΛٻΊΒΕΔ ྫɿࠨਤ ɽ

    ͔͠͠ʮฏ໘తͳද໘ চ΍น ʯ΍ʮ௚ઢݕग़Ͱ͖Δচ໛༷ʯ Ҏ֎Ͱ͸ɺচͷ࠲ඪܥ͕ը૾ຕ͔Β͸ਪఆͰ͖ͳ͍ σϓεηϯαʔͰ͋Ε͹ɺ চʹݶΒͣ  γʔϯͷ%ද໘ܗঢ়͕ɺ࣮࣌ؒʹऔಘͰ͖Δ  ͳͥ఺܈ॲཧ͔ʁ
  20. 73 "3  σϓεηϯαʔ΋࢖༻Ͱ͖Δͱͨ͠Βʁ ର৅෺΍ର৅ਓ෺ɺपғͷۭؒͷ%ܗঢ় ಈ͖͕Θ ͔͍ͬͯΔͳ͔Ͱʮ$(Λγʔϯͱಉ࣌දࣔʯ͢Δ ྫɿ w Ծ૝ࢼணϛϥʔͰͷ༸෰$(ࢼணɽ

    w εϚϗ σϓεηϯαʔͰ"3 ήʔϜ  w 73ΰʔάϧ /BUVSBM6TFS*OUFSGBDFͳͲ ʢσϓεηϯαʔొ৔Ҏલͷʣ15".ͳͲͷը૾ϕʔε"3Ͱ͸ɺ ը૾͔Β༧ଌͨ͠ฏ໘্ʹ͔͠ॏ৞Ͱ͖ͳ͔ͬͨ  ͳͥ఺܈ॲཧ͔ʁ
  21. ϞόΠϧεΩϟϯ 4USVDUVSF4FOTPS 5BOHPͳͲ w ෺΍ɺਓɺۭؒ͸ɺλϒϨοτ΍εϚϗͰ%εΩϟϯ͢Δ࣌୅΁ ʢདྷ೥೥ʹϒϨΠΫʁʣ w 4-".͕ຽओԽʢ௿Ձ֨Խʣ͠͸͡ΊΔɺͱ͍͏ྲྀΕͱ΋ݴ͑Δ 4USVDUVSF4FOTPS"U3JQMFZT#FMJFWF*U0S/PU IUUQXXXZPVUVCFDPNXBUDI

    W+NH3E'20-1X  ͳͥ఺܈ॲཧ͔ʁ ˞ ୈ൛ͷݱࡏͰ͸ɼεϚϗɾλϒϨοτͷߴڃϥΠϯʹ ͸ɼσϓεηϯαʔ౥ࡌࡁΈ͕ͩɼ͜ͷ౰࣌͸·ͩʮεϚϗ֤ ͕ࣾɼࠓޙ͜ΕΒʹखΛग़͔͢΋ʁʯͷஈ֊Ͱ͋ͬͨɽ