„LiDAR“ (šviesos aptikimo ir diapazono) technologija pakeitė tai, kaip mes suvokiame ir bendraujame su fiziniu pasauliu skaitmeniniais formatais.
Integruodami į šiuolaikinius „iOS“ įrenginius, kūrėjai gali panaudoti gylio jutimo galimybes įvairioms programoms, pradedant papildyta realybė (AR) ir baigiant 3D modeliavimu.
Šis tinklaraštis pasineria į tai, kaip veikia „LiDAR“ skenavimas, ištraukimo ir padidinimo gylio duomenys novatoriški „iOS“ programų plėtros projektai.
Kas yra „LiDAR“ skenavimas?
LIDAR naudoja lazerinius impulsus, kad matuoja atstumus, analizuodamas laiką, kai šviesa keliauja į objektą ir iš jo. Tai sukuria labai tikslų gylio aplinkos žemėlapį. „IOS“ įrenginiuose „LiDAR“ jutiklis sklandžiai veikia su fotoaparatu ir „Arkit“ sistema, kad įgalintų:
- Realaus laiko gylio jutimas: Kiekvieno scenos taško atstumo duomenų fiksavimas.
- Objekto atpažinimas ir išdėstymas: AR programų 3D erdvių supratimas.
- 3D nuskaitymas: Fizinių objektų ir aplinkos modelių kūrimas.
Kaip veikia gylio duomenys
„LiDAR“ jutiklio gylio duomenys pavaizduoti kaip gylio žemėlapis – 2D vaizdas, kuriame kiekvienas pikselis koduoja atstumą iki atitinkamo realaus pasaulio taško.
„IOS“ programų kūrime „iOS“ įrenginiai pateikia šiuos duomenis per tokias rėmus kaip „Arkit“ ir „Avfoundation“, įgalindami įjungimą Kūrėjai Norėdami integruoti gylio jutiklių funkcijas į savo programas.
Pvz., Tipiško gylio žemėlapio skiriamoji geba gali būti 256 × 192, tai yra mažesnė už RGB kameros skiriamąją gebą. Norint suderinti gylio duomenis su didelės skiriamosios gebos RGB rėmais, būtina padidinti.
Aukštesnio lygio gylio duomenys, kad atitiktų RGB skiriamąją gebą
Gyvo žemėlapis turi būti pakeistas, kad būtų galima susieti gylio duomenis į RGB vaizdą. Štai kaip tai daroma naudojant pagrindinį vaizdą:
Importuoti „CoreImage“
„Func UpScalEdepThmap“ („DectPixelBuffer“: „CVPixelBuffer“, „TargetSize: CGSize“) -> „CVPixElBuffer“? {
Tegul ciimage = ciimage (cvpixelBuffer: dectpixelBuffer)
Leiskite „ScaleFilter = Cifilter“ (pavadinimas: „CilanczosscaletransForm“)!
„ScaleFilter.SetValue“ („CiImage“, „Forey“: „KCIinputAmageKey“)
Let Scalex = TargetSize.width / cgfloat (cvPixelBuffErgetWidth (DIPPIXELBUFFER)))
Let Scaley = TargetSize.Height / cgfloat (cvPixelBuffErgetHeight (DeclthPixelBuffer)))
„ScaleFilter.SetValue“ („Scalex“, „Forey: KCIinPutScaleKey“)
„ScaleFilter.setValue“ („Scaley“, „Forey“: „KCIinPutAspecTratioKey“)
Tegul kontekstas = cicontext ()
Guard let outputAmage = ScaleFilter.OutputAtimage else {return Nil}
Ar „Newpixel“ buferis: „CvPixel“ buferis?
„CVPIXELBUFFERCreate“ (nulis, int (TargetSize.Width), int (TargetSize.Height), KCVPixelFormatType_32BGRA, NIL ir NewPixElBuffer)
Jei leidžiama buferis = newpixelBuffer {
kontekstas.renderis (išvestis, į: buferis)
}
Grąžinkite „NewPixelbuffer“
}
Ši funkcija keičia gylio žemėlapį, kad atitiktų tikslinį RGB rėmo dydį (pvz., 1920 × 1440).
Genėjimo taškų debesys iš gylio duomenų
Taškų debesys yra 3D taškų kolekcija erdvėje. Kiekvienas taškas apima:
- (X, y): „Pixel“ koordinatės 2D vaizde.
- z: Gylio vertė (atstumas metrais).
Štai kaip išgauti 2D taškų debesį:
func ekstract2dPointCloud (iš „DeclthPixElBuffer“: „CVPixelbuffer“) -> ((x: int, y: int, z: float)) {
Tegul plotis = cvpixelBuffErgetwidth („DectPixelBuffer“)
Tegul aukštis = cvpixelBuffergetheight („DectPixelBuffer“)
var Pointcloud: ((x: int, y: int, z: float)) = ()
CvpixelBufferLockBaseaddress („DeclthPixElBuffer“, .Readonly)
Tegul glitpointer = cvpixelBuffergetBaseaddress („DePthPixElBuffer“)!
Y 0 ..
už x 0 ..
Tegul gileValue = gylio taškas (y * plotis + x)
Pointcloud.Append ((x: x, y: y, z, z: declthValue)))))
}
}
„CVPixelBufferLockBaseaddress“ („DectPixElBuffer“, .Readonly)
Grįžti pointcloud
}
Ištrauktas taško debesis išlaiko 2D pikselių padėtį ir atitinkamas jų gylio vertes, nepadaridama jų į pasaulio koordinates.
Konvertuoti į 3D pasaulio koordinates
Norėdami sukurti 3D taškų debesį, kuris vaizde nukreipia taškus į jų realaus pasaulio pozicijas, galite naudoti fotoaparato vidinę matricą ir gylio vertes. Šis požiūris apima 2D taškų nereiškimą į 3D erdvę.
Štai kaip galite apskaičiuoti 3D pasaulio koordinates:
fUNC condoworldcoordinates (PointCloud: ((x: int, y: int, z: float)), camerAntainsics: matrix_float3x3) -> (Simd3
Karo pasaulio taškai: (Simd3
taškui po taške {
Tegul x = plūduriuoja (point.x)
Tegul y = plūduriuoti (taškas.y)
Tegul z = Point.z
Tegul normalizedx = (x – „CamerAntainrinsics“ (2) (0)) / cameraintrinsics (0) (0)
Tegul normalizuotas = (y – „CamerAntainrinsics“ (2) (1)) / cameraintrinsics (1) (1)
Tegul „WorldPoint = Simd3“
„WorldPoints.Append“ („WorldPoint“)
}
Grįžti pasaulio taškai
}
Šis metodas naudoja fotoaparato vidinius parametrus, kad būtų galima projektuoti 2D taškus į 3D erdvę.
Derinant 2D ir 3D taškų debesis
Dirbdami su 2D „Pixel“ koordinatėmis ir 3D pasaulio koordinatėmis, galite suporuoti informaciją, kad sukurtumėte išsamų taškų debesį:
- 2D duomenys: Naudinga perdengti vaizdą arba suderinti su kitomis vaizdo funkcijomis.
- 3D duomenys: Būtina programoms, kurioms reikalingas erdvinis supratimas ar manipuliavimas realiame pasaulyje.
Derinant juos galite kurti Papildytos realybės patirtis kur objektai tiksliai dedami tiek į vaizdų, tiek pasaulio erdves.
„LiDar Point“ debesų taikymas


-
Papildyta realybė (AR):
- Patobulinta AR patirtis, susijusi su realaus objekto išdėstymu ir okliuzija.
- Realaus pasaulio scenos supratimas apie žaidimus ir komunalines paslaugas.
-
3D modeliavimas ir nuskaitymas:
- Fiksuokite fizinius objektus ar tarpus ir paversti juos skaitmeniniais 3D modeliais.
-
PG ir mašinų mokymasis:
- Mokymo duomenys apie gylį pagrįstą objektų aptikimą ir segmentavimą.
-
Erdvinis žemėlapis:
- Robotika ir autonominė navigacija naudojant išsamius erdvinius duomenis.
-
Inžinerija ir dizainas:
- Sukurkite CAD modelius iš realaus pasaulio nuskaitymų, skirtų projektavimui ir prototipų kūrimui.
Taupymo taško debesies duomenys
Norėdami gauti daugiau apdorojimo ar vizualizacijos 3D programinėje įrangoje, galite išsaugoti taškų debesies duomenis į failą (pvz., .Csv arba .ply).
-
Išsaugoti 2D taškų debesis
func SavePointCloudTofile (Pointcloud: ((x: int, y: int, z: float)), failo vardas: eilutė) {
Leiskite fileUrl = filemanager.default.urls (for: .DocumentDirectory, in: .userdomainMask) (0) .PapendingPathComponent („\ (failo vardas) .csv“)
buvo csvString = „x, y, z \ n“
taškui po taške {
csvString.append („\ (taškas.x), \ (taškas.y), \ (taškas.z) \ n“)
}
pabandyti? csvString.write (į: FileUrl, atomiškai: tiesa, kodavimas: .utf8)
spausdinti („Point Cloud, išsaugotas: \ (fileUrl)“)
}
-
Išsaugoti 3D taškų debesis
3D pasaulio koordinatėms modifikuokite aukščiau pateiktą funkciją, kad išsaugotumėte duomenis .ply formatu, įprastu 3D failo formatu:
„Func Save3DPointCloudToply“ („WorldPoints“: (SIMD3
Leiskite fileUrl = filemanager.default.urls (for: .DocumentDirectory, in: .userDomainMask) (0) .PapendeningPathComponent („\ (failo vardas) .ply“)
var plicontent = „Ply \ nformat ascii 1.0 \ nelement Vertex \ (worldpoints.count) \ nproperty float x \ nproperty float y \ nproperty float z \ nend_header \ n“
už tašką pasaulio taškuose {
PLYCONTENT.Append („\ (Point.x) \ (Point.y) \ (Point.z) \ n“)
}
pabandyti? „PlyContent.Write“ (į: FileURL, atomiškai: tiesa, kodavimas: .utf8)
spausdinti („3D taškų debesis išsaugotas: \ (fileUrl)“)
}
Išvada
„LiDAR“ nuskaitymas „iOS“ siūlo galingą būdą, kaip fizinį pasaulį įtraukti į skaitmenines darbo eigas. Kūrėjai gali kurti novatoriškas programas įvairiose srityse, sujungdami gylio žemėlapius, padidinimus, taškų debesis ir 3D transformacijas.
Nesvarbu, ar kuriate AR patirtį, 3D nuskaitymo įrankius ar mokymus Mašinų mokymosi modeliai„LiDAR“ įsisavinimas yra būtinas įgūdis šiandieniniams kūrėjams.
Supratimas, kaip išgauti 2D ir 3D taškų debesis ir dirbti su gylio duomenimis, įgalina kūrėjus sukurti labiau svaiginančias, turtingas duomenis. Gebėjimas vizualizuoti, analizuoti ir išsaugoti šiuos taškų debesis dar labiau išplečia „Lidar“ programų apimtį.
Nuolatinis „iOS“ programų kūrimo ir „Arkit“ tobulėjimas, „LiDAR“ technologijos ateitis žada dar įdomesnes galimybes.
Jei jums reikia papildomos pagalbos kuriant „iOS“ programą, galite susisiekti su mumis (El. Paštas apsaugotas). Mes suplanuosime nemokamą konsultacijų sesiją, kad ištirtume, kaip „Xavor“ gali jums padėti.