library(sp)
library(spatstat)
library(raster)
library(rgeos)
library(rgl)
library(rgdal)
library(ggplot2)
library(arules)
library(rLiDAR)
main=readLAS("New folder/main.las")
head(main)
## X Y Z Intensity ReturnNumber
## [1,] 404761.0 281158.3 132.38 5 2
## [2,] 404761.3 281158.6 141.07 33 1
## [3,] 404761.1 281157.7 132.60 26 2
## [4,] 404760.5 281158.4 132.44 28 1
## [5,] 404758.8 281158.3 132.45 40 1
## [6,] 404759.4 281157.6 132.48 26 1
e <- extent(main[,1:2])
e=raster(e,ncol=300,nrow=200)
avg=rasterize(main[,1:2],e,main[,3],fun=mean)
int=rasterize(main[,1:2],e,main[,4],fun=mean)
par(mfrow=c(1,2))
plot(avg)
plot(int)

height=function(minras,maxras,avgras,r,groundheight=0.1){
avgv=getValues(avgras)
maxv=getValues(maxras)
minv=getValues(minras)
avgv=avgv[avgv>groundheight]
minv=minv[minv>groundheight]
maxv=maxv[maxv>groundheight]
#h=round(r/2,2)
datamax=as.data.frame(table(cut_interval(maxv,length = r)))
datamin=as.data.frame(table(cut_interval(minv,length = r)))
dataavg=as.data.frame(table(cut_interval(avgv,length = r)))
m=max(dim(datamin)[1],dim(datamax)[1],dim(dataavg)[1])
maxfreq=c(datamax$Freq,rep(NA,m-length(datamax$Freq)))
minfreq=c(datamin$Freq,rep(NA,m-length(datamin$Freq)))
avgfreq=c(dataavg$Freq,rep(NA,m-length(dataavg$Freq)))
w=cbind(datamax,avgfreq,minfreq)
colnames(w)[1]="Intervals"
row.names(w)=1:dim(w)[1]
lll=as.numeric(strsplit(strsplit(as.character(datamax[1,1]),"\\[")[[1]][2],",")[[1]][1])
lowerb=seq(lll,by=r,length.out = dim(w)[1])
upperb=seq(lll+r,by=r,length.out = dim(w)[1])
#newh=seq(h,by=r,length.out = dim(w)[1]+1)
#newh=newh[-1]
w$sum=w$Freq+w$avgfreq+w$minfreq
w$height=upperb#newh
w$lower.bound=lowerb
w$upper.bound=upperb
w[is.na(w)]=0
w
}
delground=function(main,r=0.5,step=1){
e <- extent(main[,1:2])
e=raster(e,ncol=300,nrow=200)
avg=rasterize(main[,1:2],e,main[,3],fun=mean)
w=height(avg,avg,avg,r)
if(w$Freq[1]>w$Freq[2]){
ind=1
} else {
q=diff(diff(w$Freq)>=0)<0
indq=which(q==TRUE)
if(length(indq)==0){return("Please Choose Smaller r")}
i=which(w$Freq[diff(diff(w$Freq)>=0)<0]==max(w$Freq[diff(diff(w$Freq)>=0)<0]))
ind=indq[i]+step}
h=w$upper.bound[ind]
main=as.data.frame(main)
main=main[main$Z>h,]
main
}
head(height(avg,avg,avg,r=0.5),20)
## Intervals Freq avgfreq minfreq sum height lower.bound upper.bound
## 1 [126,126.5] 1 1 1 3 126.5 126.0 126.5
## 2 (126.5,127] 0 0 0 0 127.0 126.5 127.0
## 3 (127,127.5] 1 1 1 3 127.5 127.0 127.5
## 4 (127.5,128] 36 36 36 108 128.0 127.5 128.0
## 5 (128,128.5] 433 433 433 1299 128.5 128.0 128.5
## 6 (128.5,129] 370 370 370 1110 129.0 128.5 129.0
## 7 (129,129.5] 515 515 515 1545 129.5 129.0 129.5
## 8 (129.5,130] 1417 1417 1417 4251 130.0 129.5 130.0
## 9 (130,130.5] 572 572 572 1716 130.5 130.0 130.5
## 10 (130.5,131] 718 718 718 2154 131.0 130.5 131.0
## 11 (131,131.5] 454 454 454 1362 131.5 131.0 131.5
## 12 (131.5,132] 2024 2024 2024 6072 132.0 131.5 132.0
## 13 (132,132.5] 5048 5048 5048 15144 132.5 132.0 132.5
## 14 (132.5,133] 7867 7867 7867 23601 133.0 132.5 133.0
## 15 (133,133.5] 1202 1202 1202 3606 133.5 133.0 133.5
## 16 (133.5,134] 702 702 702 2106 134.0 133.5 134.0
## 17 (134,134.5] 918 918 918 2754 134.5 134.0 134.5
## 18 (134.5,135] 813 813 813 2439 135.0 134.5 135.0
## 19 (135,135.5] 737 737 737 2211 135.5 135.0 135.5
## 20 (135.5,136] 740 740 740 2220 136.0 135.5 136.0
main=as.matrix(delground(main))
main1=as.matrix(delground(main))
main2=as.matrix(delground(main,step=2))
main3=as.matrix(delground(main,step=4))
par(mfrow=c(1,3))
e <- extent(main1[,1:2])
e=raster(e,ncol=300,nrow=200)
avg=rasterize(main1[,1:2],e,main1[,3],fun=mean)
plot(avg)
e <- extent(main2[,1:2])
e=raster(e,ncol=300,nrow=200)
avg=rasterize(main2[,1:2],e,main2[,3],fun=mean)
plot(avg)
e <- extent(main3[,1:2])
e=raster(e,ncol=300,nrow=200)
avg=rasterize(main3[,1:2],e,main3[,3],fun=mean)
plot(avg)
