Jos olet aiemmin työskennellyt pistepilvien kanssa (tai tässä tapauksessa datan kanssa), tiedät kuinka tärkeää on löytää kuvioita havaintojen välillä 📈. Meidän on todellakin usein hankittava ylemmän tason tietoa, joka perustuu vahvasti "objektien" määrittämiseen, jotka muodostavat tietopisteet, joilla on yhteinen kuvio.
Tämä on tehtävä, jonka visuaalinen kognitiivinen järjestelmämme suorittaa melko mukavasti. Tämän ihmisen kyvyn matkiminen laskennallisin menetelmin on kuitenkin erittäin haastava ongelma 🤯. Pohjimmiltaan haluamme hyödyntää ihmisen näköjärjestelmän taipumusta ryhmä elementtejä.
Mutta miksi se on hyödyllistä?
Loistava kysymys! Itse asiassa pistepilven segmentoinnin pääasialliset syyt ovat kolme:
- Ensinnäkin se tarjoaa loppukäyttäjille joustavuuden päästä tehokkaasti käsiksi yksittäiseen sisältöön ja muokata sitä korkeamman tason yleistyksellä: segmenteillä.
- Toiseksi se luo tiedoista kompaktin esityksen, jossa kaikki myöhemmät käsittelyt voidaan tehdä alueellisella tasolla yksittäisen pistetason sijaan, mikä johtaa mahdollisesti merkittäviin laskennallisiin hyötyihin.
- Lopuksi se antaa mahdollisuuden poimia naapurustojen, kaavioiden ja topologian välisiä suhteita, joita ei ole olemassa raakapistepohjaisissa tietosarjoissa.
Näistä syistä segmentointia käytetään pääasiassa esikäsittelyvaiheena pistepilvitietojen merkitsemiseen, parantamiseen, analysointiin, luokitteluun, luokitteluun, poimimiseen ja abstraktiin informaatioon. Mutta oikea kysymys nyt. Miten se tehdään?
Aaand… avataan laatikko 👐!
Jos tästä perusteellisesta opetussisällöstä on hyötyä sinulle, tilaa AI-tutkimuksen postituslista hälytys, kun julkaisemme uutta materiaalia.
Nopea 3D-segmentointiteoria, jossa on kaksi avainkäsitettä
Tässä opetusohjelmassa olen jo valinnut sinulle kahdesta parhaasta ja vahvemmasta lähestymistavasta, jotka opit lopuksi. Luotamme kahteen keskeiseen ja tehokkaaseen lähestymistapaan: ransac ja Euklidisen klusterin kautta DBSCAN. Mutta ennen niiden käyttöä on kai 😀 Tärkeää ymmärtää yksinkertaisesti sanottuna pääidea.
ransac
RANSAC on siis lyhenne sanoista RANdom Sample Consensus, ja se on melko yksinkertainen mutta erittäin tehokas algoritmi, jota voit käyttää, jos tietoihisi vaikuttavat poikkeamat, kuten meidän tapauksessamme 😊. Todellakin, aina kun työskentelet todellisten antureiden kanssa, tietosi eivät koskaan ole täydellisiä. Ja melko usein poikkeamat vaikuttavat anturitietoihisi. Ja RANSAC on eräänlainen yritys ja erehdys -lähestymistapa, joka ryhmittelee tietopisteesi kahteen segmenttiin: inlier-joukko ja outlier-joukko. Sitten voit unohtaa poikkeamat ja työskennellä inliersin kanssa.
Käytän siis pientä mutta yksinkertaista esimerkkiä havainnollistamaan RANSACin toimintaa. Sanotaan, että haluamme sovittaa koneen alla olevan pistepilven läpi. Kuinka voimme tehdä sen?
Ensin luodaan tiedoista tason ja tätä varten valitsemme satunnaisesti pistepilvestä tason muodostamiseen tarvittavat 3 pistettä. Ja sitten yksinkertaisesti tarkistamme kuinka monta jäljellä olevista pisteistä putoaa koneeseen (tietylle kynnysarvolle), mikä antaa pisteytyksen ehdotukselle.
Sitten toistamme prosessin 3 uudella satunnaisella pisteellä ja katsomme, kuinka meillä menee. Onko se parempi? Onko se huonompi? Ja jälleen, toistamme tämän prosessin uudestaan ja uudestaan, sanotaan 10 kertaa, 100 kertaa, 1000 kertaa, ja sitten valitsemme tasomallin, jolla on korkein pistemäärä (eli jolla on paras "tuki" jäljellä olevista datapisteistä). . Ja se on ratkaisumme: tukipisteet sekä kolme otokseemme pistettä muodostavat meidän sisäpiste asetettu, ja loput on meidän outlier point asetettu. Tarpeeksi helppoa, hun 😁?
Haha, mutta epäilijöille, eikö sinulla ole nousevaa kysymystä? Kuinka todella määritämme, kuinka monta kertaa meidän pitäisi toistaa prosessi? Kuinka usein meidän pitäisi kokeilla sitä? No, se on itse asiassa jotain, mitä voimme laskea, mutta jätetään se nyt sivuun keskittyäksesi käsillä olevaan asiaan: pistepilvien segmentointiin 😉.
Euklidinen klusteri (DBSCAN)
Pistepilvitietojoukoissa meidän on usein ryhmitettävä pistejoukot spatiaalisesti vierekkäin, kuten alla on kuvattu. Mutta kuinka voimme tehdä tämän tehokkaasti?
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) -algoritmi otettiin käyttöön vuonna 1996 tätä tarkoitusta varten. Tämä algoritmi on laajalti käytetty, minkä vuoksi se palkittiin vuonna 2014 tieteellisellä panospalkinnolla, joka on kestänyt ajan kokeen.
DBSCAN iteroi tietojoukon pisteiden yli. Jokaiselle analysoitavalle pisteelle se muodostaa joukon pisteitä, jotka saavutetaan tiheydellä tästä pisteestä: se laskee tämän pisteen lähialueen, ja jos tämä naapurusto sisältää enemmän kuin tietyn määrän pisteitä, se sisällytetään alueeseen. Jokainen vierekkäinen piste käy läpi saman prosessin, kunnes se ei voi enää laajentaa klusteria. Jos kyseessä oleva piste ei ole sisäpiste, eli sillä ei ole tarpeeksi naapureita, se merkitään meluksi. Tämä mahdollistaa DBSCANin kestävän poikkeaville arvoille, koska tämä mekanismi eristää ne. Kuinka siistiä se on 😆?
Ah, melkein unohdin. Parametrien valinta (ϵ lähistölle ja n_min minimipistemäärälle) voi myös olla hankala: Parametreja asetettaessa on oltava tarkkana, jotta saadaan tarpeeksi sisäpisteitä (mitä ei tapahdu, jos n_min on liian suuri tai ϵ liian pieni ). Tämä tarkoittaa erityisesti sitä, että DBSCANilla on vaikeuksia löytää eri tiheyksillä olevia klustereita. MUTTA DBSCANilla on se suuri etu, että se on laskennallisesti tehokas ilman, että klusterien lukumäärää edellytetään, toisin kuin esimerkiksi Kmeans. Lopuksi se mahdollistaa mielivaltaisen muotoisten klustereiden löytämisen.
Ja nyt, laitetaan kaikki tämä hölynpöly superhyödylliseen "ohjelmistoon" 5-vaiheisen prosessin kautta 💻!
Vaihe 1: (pistepilvi) data, aina data 😁
Aiemmissa tutoriaaleissa havainnollistin pistepilvikäsittelyä ja verkostoitumista käyttämällä saadun 3D-aineiston yli fotogrammetriaa ja antenni LiDAR alkaen Avaa topografia. Tällä kertaa käytämme tietojoukkoa, jonka keräsin käyttämällä Terrestrial Laser Scanneria!
Ohitan I/O-toimintojen ja tiedostomuotojen yksityiskohdat, mutta tiedän, että niitä käsitellään nämä artikkelit jos haluat selventää tai rakentaa täysimittaista asiantuntemusta. Tänään siirrymme käyttämään tunnettua .ply-tiedostomuotoa.
🤓 Huomautuksia: Tässä ohjeessa voit käyttää pistepilveä tämän arkiston, jonka olen jo suodattanut ja kääntänyt, jotta olet optimaalisissa olosuhteissa. Jos haluat visualisoida ja leikkiä sen kanssa etukäteen asentamatta mitään, voit tarkistaa webGL-versio.
Vaihe 2: Määritä Python-ympäristösi.
In edellinen artikkeli, näimme kuinka luoda ympäristö Anacondan avulla helposti ja kuinka voit käyttää IDE Spyderiä koodin hallintaan. Suosittelen jatkamaan tällä tavalla, jos olet valmis ryhtymään täysivaltaiseksi python-sovelluskehittäjäksi 😆.
Mutta hei, jos haluat tehdä kaiken tyhjästä seuraavien 5 minuutin aikana, annan sinulle myös pääsyn Google Colab -muistikirjaan, jonka löydät artikkelin lopusta. Ei ole mitään asennettavaa; voit vain tallentaa sen Google Driveen ja aloittaa työskentelyn sen kanssa, myös käyttämällä vaiheen 1 ilmaisia tietojoukkoja☝️.
Huomautuksia: Suosittelen käyttämään työpöydän IDE:tä, kuten Spyderiä, ja välttämään Google Colabia tai Jupyteria, JOS sinun on visualisoitava 3D-pistepilvet käyttämällä toimitettuja kirjastoja, koska ne ovat parhaimmillaan epävakaita tai eivät toimi huonommin (valitettavasti…).
Vaihe 3: Ensimmäinen segmentointikierros
No, saadakseni tuloksia nopeasti, otan "parti-prisin". Todellakin, saamme aikaan mukavan segmentoinnin noudattamalla minimalistista lähestymistapaa koodaukseen 💻. Tämä tarkoittaa, että olet erittäin nirso taustalla olevien kirjastojen suhteen! Käytämme kolmea erittäin kestävää, nimittäin numpy
, matplotlib
ja open3d
.
Okei, jos haluat asentaa yllä olevan kirjastopaketin ympäristöösi, suosittelen, että suoritat seuraavan komennon päätteestä (huomaa myös open3d-admin
kanava):
conda install numpy conda install matplotlib conda install -c open3d-admin open3dVastuuvapauslauseke: Valitsemme Pythonin, emme C++:n tai Julian, joten esitykset ovat mitä ovat 😄. Toivottavasti se riittää hakemuksellesi 😉, niin sanottuihin "offline"-prosesseihin (ei reaaliaikaisiin).
Ja nyt on kauan odotettu aika nähdä ensimmäiset tulokset!
Kuinka ottaa RNSAC käyttöön 3D-pistepilvien yli?
Tuodaan ensin tiedot tiedostoon
pcd
muuttuja seuraavalla rivillä:pcd = o3d.io.read_point_cloud("your_path/kitchen.ply")Haluatko tehdä ihmeitä nopeasti? No, minulla on loistavia uutisia,
open3d
on varustettu RANSAC-toteutuksella tasomaisen muodon havaitsemiseen pistepilvissä. Ainoa kirjoitettava rivi on seuraava:plane_model, inliers = pcd.segment_plane(distance_threshold=0.01, ransac_n=3, num_iterations=1000)🤓 Huomautuksia: Kuten näette,
segment_plane()
menetelmä sisältää 3 parametria. Nämä ovat etäisyyden kynnys (distance_threshold
) tasosta ottaaksesi huomioon pisteen, joka on sisä- tai ulkopuolinen, piirrettyjen näytepisteiden määrä (3 tässä, koska haluamme tason) kunkin tasoehdokkaan arvioimiseksi (ransac_n
) ja iteraatioiden lukumäärä (num_iterations
). Nämä ovat vakioarvoja, mutta ota huomioon, että käytettävissä olevasta tietojoukosta riippuendistance_threshold
tulee tarkistaa uudelleen.Yllä olevan rivin tulos on parhaat tason ehdokasparametrit a,b,c ja d
plane_model
, ja indeksi pisteistä, joita pidetään inliersinä, on tallennettuinliers
.Katsokaamme nyt tuloksia, eikö niin? Tätä varten meidän on itse asiassa valittava pisteet tallennettujen indeksien perusteella
inliers
ja valitse valinnaisesti kaikki muut poikkeavuuksiksi. Miten tämä tehdään? No näin:inlier_cloud = pcd.select_by_index(inliers) outlier_cloud = pcd.select_by_index(inliers, invert=True)🤓 Huomautuksia: Argumentti
invert=True
sallii valita ensimmäisen argumentin vastakohdan, mikä tarkoittaa, että kaikki indeksit eivät ole mukanainliers
.Okei, nyt muuttujat pitävät pisteet, mutta ennen tulosten visualisointia ehdotan, että maalaamme sisäosat punaisiksi ja loput harmaiksi. Tätä varten voit vain välittää luettelon R-, G-, B-arvoista kelluvina seuraavasti:
inlier_cloud.paint_uniform_color([1, 0, 0]) outlier_cloud.paint_uniform_color([0.6, 0.6, 0.6])Ja nyt visualisoidaan tulokset seuraavalla rivillä:
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud])🤓 Huomautuksia: Jos haluat ymmärtää paremmin värin peittämän geometrian, voit laskea normaalit etukäteen seuraavalla komennolla:
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=16), fast_normal_computation=True)
. Näin saat paljon hienomman renderöinnin, kuten alla😉.Loistava! Osaat segmentoida pistepilvisi sisäpistejoukossa ja outlier point -joukossa 🥳! Tutkikaamme nyt, kuinka löytää joitakin klustereita lähellä toisiaan. Joten kuvitellaan, että kun olemme havainneet suuret tasomaiset osat, meillä on joitain "kelluvia" esineitä, jotka haluamme rajata. Miten tämä tehdään? (kyllä, se on väärä kysymys, minulla on vastaus sinulle 😀)
Kuinka käyttää DBSCANia pistepilvien yli?
Ensin valitsemme näytteen, jossa oletamme pääsevämme eroon kaikista tasomaisista alueista (tämä näyte löytyy täältä: Pääsy datanäyte), kuten alla.
Okei, kirjoitetaan nyt vähän DBSCAN-klusterointia. Jälleen, kaiken yksinkertaistamiseksi käytämme DBSCAN-menetelmän osaa
open3d
pakettia, mutta tiedä, että jos tarvitset lisää joustavuutta, käyttöönottoscikit-learn
voi olla pidemmän aikavälin valinta. Ajan suhteen se on melko sama. Menetelmäcluster_dbscan
toimiipcd
pistepilvikokonaisuus suoraan ja palauttaa luettelon otsikoista pistepilven alkuperäisen indeksoinnin jälkeen.labels = np.array(pcd.cluster_dbscan(eps=0.05, min_points=10))🤓 Huomautuksia: Tarrat vaihtelevat
-1
jan
, Jossa-1
osoittavat, että se on "kohina" piste ja arvot0
ettän
ovat sitten vastaavalle pisteelle annetut klusteritunnisteet. Huomaa, että haluamme saada tarrat NumPy-taulukkona ja että käytämme 5 cm:n sädettä klustereiden "kasvamiseen" ja harkitsemme yhtä vain, jos tämän vaiheen jälkeen meillä on vähintään 10 pistettä. Kokeile rohkeasti 😀.Hienoa, nyt kun meillä on pisteryhmiä määritetty tunnisteella pistettä kohden, väritetään tulokset. Tämä on valinnainen, mutta se on kätevä iteratiivisille prosesseille oikeiden parametrien arvojen etsimiseksi. Tätä varten ehdotan Matplotlib-kirjaston käyttöä tarkkuuden saamiseksi värialueita, kuten tab20:
max_label = labels.max() colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1)) colors[labels < 0] = 0 pcd.colors = o3d.utility.Vector3dVector(colors[:, :3]) o3d.visualization.draw_geometries([pcd])🤓 Huomautuksia: -
max_label
tulee olla intuitiivinen: se tallentaa enimmäisarvon tarraluetteloon. Tämä sallii sen käytön nimittäjänä väritysmallille, kun sitä käsitellään "if
” kertoo erikoistapauksen, jossa klusterointi on vinossa ja tuottaa vain kohinaa + yksi klusteri. Tämän jälkeen varmistamme, että asetamme nämä meluisat kohdat etiketillä-1
mustaksi (0
). Sitten annamme attribuutillecolors
pistepilvestäpcd
2D NumPy -taulukko, jossa on 3 "saraketta", jotka edustavat R, G, B.Et voilà! Alla klusterointimme tulos.
Hienoa, se toimii hienosti, ja nyt, kuinka voimme todella laittaa kaiken tämän mittakaavaan ja automatisoidusti?
Vaihe 4: Skaalaus ja automaatio
Filosofiamme tulee olemaan hyvin yksinkertainen. Suoritamme ensin RANSACin useita kertoja (sanotaan
n
kertaa) poimimaan eri tasoalueet, jotka muodostavat kohtauksen. Sitten käsittelemme "kelluvia elementtejä" euklidisen klusterin (DBSCAN) avulla. Se tarkoittaa, että meidän on varmistettava, että meillä on tapa tallentaa tulokset iteraatioiden aikana. Valmis?RANSAC-silmukan luominen useiden tasomaisten muotojen havaitsemiseen
Okei, luodaan tyhjä sanakirja, joka sisältää iteraatioiden tulokset (tasoparametrit
segment_models
, ja tasomaiset alueet pistepilven sisäänsegments
):segment_models={} segments={}Sitten haluamme varmistaa, että voimme myöhemmin vaikuttaa siihen, kuinka monta kertaa haluamme iteroida tasojen havaitsemiseksi. Tätä varten luodaan muuttuja
max_plane_idx
joka sisältää iteraatioiden määrän:max_plane_idx=20🤓 Huomautuksia: Tässä sanomme, että haluamme iteroida 20 kertaa löytääksemme 20 tasoa, mutta on olemassa älykkäämpiä tapoja määrittää tällainen parametri. Se itse asiassa laajentaa artikkelin soveltamisalaa, mutta jos haluat oppia lisää, voit tarkistaa 3D Geodata Academy.
Mennään nyt toimivaan silmukkaan 😁, jonka havainnollistan ensin nopeasti. Ensimmäisessä ajossa (silmukka
i=0
), erottelemme inliers ja outliers. Säilytämme sisäosat sisälläsegments
, ja sitten haluamme jatkaa vain jäljellä olevilla pisteillärest
, josta tulee silmukan n+1 (silmukkai=1
). Tämä tarkoittaa, että haluamme pitää edellisen vaiheen poikkeavuuksia peruspistepilvenä, kunnes saavutamme iteraatioiden ylärajan (ei pidä sekoittaa RANSAC-iteraatioihin). Tämä tarkoittaa seuraavaa:rest=pcd for i in range(max_plane_idx): colors = plt.get_cmap("tab20")(i) segment_models[i], inliers = rest.segment_plane( distance_threshold=0.01,ransac_n=3,num_iterations=1000) segments[i]=rest.select_by_index(inliers) segments[i].paint_uniform_color(list(colors[:3])) rest = rest.select_by_index(inliers, invert=True) print("pass",i,"/",max_plane_idx,"done.")Ja siinä se on pitkälti! Nyt kokonaisuuden visualisoimiseksi, kun maalaamme jokaisen havaitun segmentin värillä
tab20
silmukan ensimmäisen rivin kautta (colors = plt.get_cmap(“tab20”)(i)
), sinun tarvitsee vain kirjoittaa:o3d.visualization.draw_geometries([segments[i] for i in range(max_plane_idx)]+[rest])🤓 Huomautuksia: Lista
[segments[i] for i in range(max_plane_idx)]
että siirrymme funktioono3d.visualization.draw_geometries()
on itse asiassa "luettelon ymmärtäminen" 🤔. Se vastaa kirjoittamista afor
silmukka, joka liittää ensimmäisen elementinsegments[i]
luetteloon. Kätevästi voimme sitten lisätä[rest]
tähän luetteloon jadraw.geometries()
menetelmä ymmärtää, että haluamme harkita yhden pistepilven piirtämistä. Kuinka siistiä?Hah! Luulemme, että olemme valmiita… Mutta olemmeko? Huomaatko tässä jotain outoa? Jos katsot tarkasti, siellä on outoja esineitä, kuten "viivoja", jotka todella leikkaavat joitain tasomaisia elementtejä. Miksi? 🧐
Itse asiassa, koska sovitamme kaikki pisteet RANSAC-tasoehdokkaisiin (joilla ei ole raja-laajuutta euklidisessa avaruudessa) pistetiheyden jatkuvuudesta riippumatta, meillä on nämä "viivat" artefaktit riippuen siitä, missä järjestyksessä tasot havaitaan. Joten seuraava askel on estää tällainen käytös! Tätä varten ehdotan, että iteratiiviseen prosessiin sisällytetään euklidiseen klusterointiin perustuva ehto, joka tarkentaa vierekkäisten klustereiden sisäpistejoukkoja. Valmis?
Monipuolisen RANSAC-silmukan viisas jalostus DBSCANilla
Tätä varten luotamme DBSCAN-algoritmiin. Haluan yksityiskohtaisesti loogista prosessia, mutta ei niin suoraviivaista (Aktivoi petotila👹). Aiemmin määritellyssä for-silmukassa ajetaan DBSCAN juuri sen jälkeen, kun inliers (
segments[i]=rest.select_by_index(inliers)
), lisäämällä seuraava rivi heti perään:labels = np.array(segments[i].cluster_dbscan(eps=d_threshold*10, min_points=10))🤓 Huomautuksia: Itse asiassa asetin epsilonin RANSAC-tasohaun alkukynnyksen funktiona, magnitudin ollessa 10 kertaa suurempi. Tämä ei ole syvätiedettä, tämä on puhtaasti empiirinen valinta, mutta toimii yleensä hyvin ja helpottaa parametrien kanssa 😀.
Sitten silmukan sisällä laskemme, kuinka monta pistettä kukin löytämämme klusteri sisältää, käyttämällä outoa merkintää, joka käyttää luettelon ymmärtämistä. Tulos tallennetaan sitten muuttujaan
candidates
:candidates=[len(np.where(labels==j)[0]) for j in np.unique(labels)]Ja nyt? Meidän on löydettävä "paras ehdokas", joka on yleensä se klusteri, jolla on enemmän pisteitä! Ja tätä varten tässä on rivi:
best_candidate=int(np.unique(labels)[np.where(candidates== np.max(candidates))[0]])Okei, monia temppuja tapahtuu täällä konepellin alla, mutta pohjimmiltaan käytämme Numpy-taitoa etsiäksemme ja palauttaaksemme pisteiden indeksin, jotka kuuluvat suurimpaan klusteriin. Tästä eteenpäin se on laskettelua, ja meidän on vain lisättävä mahdolliset jäljellä olevat klusterit iteraatiota kohti seuraavissa RANSAC-iteraatioissa (🔥 lause luettava 5 kertaa sulattaaksesi):
rest = rest.select_by_index(inliers, invert=True) + segments[i].select_by_index(list(np.where(labels!=best_candidate)[0])) segments[i]=segments[i].select_by_index(list(np.where(labels== best_candidate)[0]))🤓 Huomautuksia: Ishayoiden opettaman
rest
muuttuja varmistaa nyt, että sekä RNSAC:n että DBSCANin jäljellä olevat kohdat säilyvät. Ja tietysti, lisäkkeet suodatetaan nyt raaka-RANSAC-inlier-sarjan suurimpaan klusteriin.Kun silmukka on ohi, saat puhtaan joukon segmenttejä, jotka sisältävät spatiaalisesti vierekkäisiä pistejoukkoja, jotka seuraavat tasomaisia muotoja, kuten alla on esitetty.
Mutta onko tämä loppu? Noooo, ei koskaan 😄! Viimeinen viimeinen askel!
Jäljellä olevien 3D-pisteiden klusterointi DBSCANilla
Lopuksi menemme silmukan ulkopuolelle ja käsittelemme jäljellä olevia lepotilaan tallennettuja elementtejä, joita ei vielä ole liitetty mihinkään segmenttiin. Tätä varten yksinkertaisen euklidisen klusteroinnin (DBSCAN) läpimenon pitäisi tehdä temppu:
labels = np.array(rest.cluster_dbscan(eps=0.05, min_points=5)) max_label = labels.max() print(f"point cloud has {max_label + 1} clusters") colors = plt.get_cmap("tab10")(labels / (max_label if max_label > 0 else 1)) colors[labels < 0] = 0 rest.colors = o3d.utility.Vector3dVector(colors[:, :3])Käytän samaa menetelmää kuin ennenkin, ei noituutta! Varmistan vain, että käytän yhtenäisiä parametreja saadakseni hienostuneen klusteroinnin saadaksesi kauniin sateenkaarikeittiön, josta olet aina haaveillut 🥳!
Jos haluat saada sen toimimaan suoraan, luon myös Google Colab -skriptin, johon pääset täältä: Python Google Colab -skriptiin.
Yhteenveto
Suuret onnittelut 🎉! Opit juuri tuomaan ja kehittämään automaattisen segmentointi- ja visualisointiohjelman miljoonista pisteistä koostuville 3D-pistepilville eri strategioilla! Vilpittömästi, hyvin tehty! Mutta polku ei todellakaan pääty tähän, koska avasit juuri valtavan potentiaalin älykkäille prosesseille, jotka syyttelevät segmenttitasolla!
Tulevat postaukset sukeltavat syvemmälle pistepilvien tilaanalyysiin, tiedostomuotoihin, tietorakenteisiin, objektien havaitsemiseen, segmentointiin, luokitteluun, visualisointiin, animaatioon ja verkostoitumiseen. Tarkastelemme erityisesti kuinka hallita Big Point -pilvitietoja kohdassa määritellyllä tavalla Tämä artikkeli.
Avustusteni tarkoituksena on tiivistää käyttökelpoista tietoa, jotta voit aloittaa 3D-automaatiojärjestelmien rakentamisen projekteillesi tyhjästä. Voit aloittaa tänään ottamalla muodostelman osoitteessa Geodata Akatemia.
Mennä kauemmas
Pistepilveä varten on olemassa muita kehittyneitä segmentointimenetelmiä. Se on itse asiassa tutkimusala, jossa olen syvästi mukana, ja artikkeleista löytyy jo hyvin suunniteltuja metodologioita [1–6]. Edistyneemmille 3D-syväoppimisarkkitehtuureille kattavia opetusohjelmia on tulossa pian!
- Poux, F., & Billen, R. (2019). Voxel-pohjainen 3D-pistepilven semanttinen segmentointi: valvomaton geometria ja suhde, jossa vs syväoppimismenetelmät. ISPRS International Journal of Geo-Information. 8(5), 213; - Jack Dangermond -palkinto (Linkki lehdistötiedotteeseen)
- Poux, F., Neuville, R., Nys, G.-A., & Billen, R. (2018). 3D-pistepilven semanttinen mallinnus: integroitu kehys sisätiloihin ja huonekaluihin. Kaukokartoitus, 10(9), 1412.
- Poux, F., Neuville, R., Van Wersch, L., Nys, G.-A., & Billen, R. (2017). 3D-pistepilvet arkeologiassa: edistysaskeleet hankinnassa, prosessoinnissa ja tiedon integroinnissa sovellettaessa lähes tasomaisiin objekteihin. Geosciences, 7(4), 96.
- Poux, F., Mattes, C., Kobbelt, L., 2020. Sisätilojen 3D-pistepilven valvomaton segmentointi: sovellus oliopohjaiseen luokitukseen, ISPRS — International Archives of the Photogrammetria, Remote Sensing and Spatial Information Sciences. s. 111–118.
- Poux, F., Ponciano, JJ, 2020. Itseoppiva ontologia esimerkiksi 3D-sisäpistepilven segmentointiin, ISPRS — International Archives of Photogrammetry, Remote Sensing and Spatial Information Sciences. s. 309–316.
- Bassier, M., Vergauwen, M., Poux, F., (2020). Pistepilvi vs. verkkoominaisuudet rakennuksen sisätilojen luokittelussa. Kaukokartoitus. 12, 2224.
Tämä artikkeli julkaistiin alunperin Kohti datatieteitä ja julkaistu uudelleen TOPBOTS: lle tekijän luvalla.
Nauti tästä artikkelista? Tilaa lisää AI-päivityksiä.
Ilmoitamme sinulle, kun julkaisemme lisää teknistä koulutusta.
liittyvä
Lähde: https://www.topbots.com/automate-3d-point-cloud-segmentation/
- "
- &
- 100
- 2019
- 2020
- 3d
- 7
- 9
- pääsy
- hankinta
- Etu
- AI
- ai tutkimusta
- algoritmi
- Kaikki
- amp
- analyysi
- animaatio
- sovelluksen
- Hakemus
- sovellukset
- Arkeologia
- artikkeli
- artikkelit
- Automatisoitu
- Automaatio
- PARAS
- Suurimmat
- Musta
- Laatikko
- rakentaa
- Rakentaminen
- soittaa
- joka
- Kissat
- luokittelu
- suljettu
- pilvi
- epäjärjestys
- koodi
- Koodaus
- kognitiivinen
- tuleva
- Yhteinen
- Laskea
- Yhteisymmärrys
- pitoisuus
- Nykyinen
- tiedot
- sopimus
- syvä oppiminen
- yksityiskohta
- Detection
- kehittää
- Kehittäjä
- etäisyys
- koulutus
- koulutus-
- Tehokas
- ympäristö
- Laajentaa
- experience
- kokeilu
- Muoti
- Ominaisuudet
- Vihdoin
- Etunimi
- sovittaa
- Joustavuus
- Keskittää
- seurata
- muoto
- Puitteet
- Ilmainen
- toiminto
- geometria
- gif
- suuri
- Vihreä
- Ryhmä
- ohjaavat
- kätevä
- tätä
- pitää
- Miten
- Miten
- HTTPS
- ajatus
- kuva
- indeksi
- vaikutus
- tiedot
- integraatio
- korko
- kansainvälisesti
- osallistuva
- isolaatteja
- IT
- hypätä
- avain
- tuntemus
- tarrat
- suuri
- laser
- OPPIA
- oppinut
- oppiminen
- Taso
- Vaikutusvalta
- Kirjasto
- käsitellä
- linja
- LINK
- Lista
- minimalistinen
- malli
- uutiset
- Melu
- Objektin tunnistus
- Ontologia
- avata
- Operations
- tilata
- Muuta
- maali
- Kuvio
- filosofia
- Planes
- Viestejä
- esittää
- painaa
- Ohjelma
- hankkeet
- ehdotus
- ehdottaa
- Python
- raaka
- reaaliaikainen
- syistä
- Ihmissuhteet
- tutkimus
- REST
- tulokset
- Tuotto
- ajaa
- Asteikko
- skaalaus
- tiede
- tieteet
- Haku
- anturit
- setti
- asetus
- Jaa:
- Yksinkertainen
- simulointi
- pieni
- So
- Tila
- tila-
- Alkaa
- alkoi
- Lausunto
- verkkokaupasta
- varastot
- tutkimus
- järjestelmä
- järjestelmät
- Tekninen
- testi
- aika
- ylin
- käsittelemällä
- oppitunti
- opetusohjelmat
- Päivitykset
- us
- hyödyllisyys
- arvo
- visio
- visualisointi
- kävely
- verkko
- sisällä
- Referenssit
- toimii
- kirjoittaminen