Saya telah memberikan gambar Geotiff dan data Lidar terkait (x, y, z) dalam koordinat UTM. Saya perlu menggabungkan data Lidar dengan nilai RGB dari gambar.
Itu berarti, pada akhirnya, saya perlu memplot (3D) setiap titik warna awan LiDAR yang dikodekan dengan nilai RGB yang sesuai dari gambar Geotiff.
Saya mengubah data Lidar menjadi shapefile menggunakan QGIS. Apa yang harus saya lakukan selanjutnya?
Di R, saya mencoba plot3D
fungsinya, tetapi tidak berhasil. Saya melampirkan dokumen teks , shapefile, dan gambar tif
Edit:
Saya telah melakukan program berikut seperti yang ditunjukkan di bawah ini:
require(raster)
require(maptools) # to take shape files
#require(car) # for scatter3D
require(plot3Drgl)
##setwd("C:\\Users\\Bibin Wilson\\Documents\\R")
##source('Lidar.r')
data = read.csv("C:\\Users\\Bibin Wilson\\Desktop\\Lidar\\lidardata.csv")
#nr = nrow(data)
nc = ncol(data)
nr = 500
require(rgdal)
X = readGDAL("C:\\Users\\Bibin Wilson\\Desktop\\Lidar\\image.tif")
topx = 4.968622208855732e+05;
topy = 5.419739403811632e+06;
final = matrix(nrow = nr, ncol = nc+2)
for(i in 1:nr) {
x = data[i,1]
y = data[i,2]
rr = round((topy-y)/0.0833)
cc = abs(round((x-topx)/0.0833))
if(rr == 0) {
rr = 1
}
if(cc == 0) {
cc = 1
}
final[i,1] = x
final[i,2] = y
final[i,3] = data[i,3]
final[i,4] = rr
final[i,5] = cc
}
for(i in 1:nr) {
x = final[i,1]
y = final[i,2]
z = final[i,3]
rr = final[i,4]
cc = final[i,5]
if(rr <= 5086 && cc<=3265) {
r = X[rr,cc,1]/255
g = X[rr,cc,2]/255
b = X[rr,cc,3]/255
c = cbind(r,g,b)
scatter3D(x,y,z,2,c)
}
}
Tetapi ketika mencoba untuk merencanakan grafik, itu menunjukkan kesalahan berikut:
Kesalahan dalam
[.data.frame
(x @ data, i, j, ..., drop = FALSE): argumen yang tidak digunakan (1)
Edit:
Saya mendapatkan model 3D tanpa RGB seperti yang ditunjukkan di bawah ini:
Jawaban:
Terima kasih telah menjelaskan pertanyaan Anda karena sebelumnya tidak terlalu jelas. Anda dapat membaca raster multiband menggunakan fungsi stack atau brick dalam paket raster dan menetapkan nilai RGB terkait ke objek sp SpatialPointsDataFrame menggunakan ekstrak, juga dari raster. Pemaksaan objek data.frame (yang dihasilkan dari read.csv) ke objek titik sp, yang dapat diteruskan untuk mengekstrak, dicapai menggunakan paket sp.
Plot 3D berasal dari paket rgl. Karena plotnya interaktif dan tidak diteruskan ke file, Anda dapat membuat file menggunakan rgl.snapshot. Fungsi rgb dasar mengambil tiga nilai RGB dan membuat warna R nilai tunggal yang sesuai. Dengan membuat vektor, sesuai dengan data, Anda dapat mewarnai plot menggunakan argumen col tanpa mendefinisikan warna sebagai dimensi aktual (yang tampaknya menjadi kebingungan awal Anda).
Ini adalah contoh boneka cepat.
Dan, berikut adalah contoh yang berfungsi dengan data yang Anda berikan.
sumber
Alternatif untuk membuat data LiDAR dan nilai RGB dalam 3D adalah FugroViewer .
Di bawah ini, ada contoh dengan data sampel yang mereka berikan. Saya menggunakan file berhak
Bmore_XYZIRGB.xyz
yang terlihat seperti ini:Saat membuka di Fugro Viewer pilih bidang terkait yang tersedia dalam file (dalam hal ini, file .xyz):
Kemudian, warnai titik-titik menggunakan data RGB, pilih alat
Color Points by Encoding RGB Image Values
(lihat panah merah pada tangkapan layar di bawah). Aktifkan3D
tombol untuk visualisasi 3D.sumber
Sunting: seperti yang disebutkan oleh Mathiaskopo, versi terbaru dari LAStools menggunakan lascolor ( README ).
Pilihan lain adalah menggunakan las2las sebagai berikut:
sumber
Kode ini menggunakan gdal, numpy dan matplotlib untuk mengekstraksi nilai x, y, z dari raster dan untuk memiliki model 3Dnya.
Saya menggunakan kode di atas dengan? Slope lenght raster (GTiff, 50 rows x 50 kolom) dan saya mendapatkan hasil sebagai berikut:
sumber