【发布时间】:2015-11-16 22:01:12
【问题描述】:
我正在对 R 中的图像进行一些数据分析,以研究森林中的结构复杂性主题。我们设置了一些相机在一段时间内每小时拍照。这些图像是JPEG格式 问题是我需要一个函数,除了我已经在处理的其他参数之外,它还可以帮助我获取时间和日期并将其保存在每张照片的 csv 文件中。
images.folder = "C:/Users/abc/Desktop/OSA/BSCAM11"
results.file = "BSCAM11.csv"
if (file.exists(results.file)) {
existing = read.csv(results.file)
start = max(existing$i)+1
} else {
start = 1
}
files = dir(images.folder)
nbins = 15 # see MIG algorithm
nb.photos = length(files)
for (i in start:nb.photos) {
file.to.analyze = files[[i]]
path = paste(images.folder,file.to.analyze,sep="/")
# Load 3 rasters from the target image, one for red, one for green and one for the blue channel
R = raster(path, band=1)
G = raster(path, band=2)
B = raster(path, band=3)
# Combine the RGB channels to create a grayscale image
RGB = brick(R,G,B)
r.grey = mean(RGB)
#
# # Convert RGB bands to HSV channels
# HSV = rgb2hsv(getValues(R),getValues(G),getValues(B))
# r.H = r.S = r.V = raster(ncols = ncol(R), nrows = nrow(R))
# extent(r.H) = extent(r.S) =extent(r.V) =extent(R)
# values(r.H) = HSV[1,]
# values(r.S) = HSV[2,]
# values(r.V) = HSV[3,]
#
# # On the four channels, find either right (1), diagonal (2) or below (3) neighbors for histogram calculations
#
v.grey.1 = getImagePixels(r.grey, side = 1)
# v.H.1 = getImagePixels(r.H, side = 1)
# v.S.1 = getImagePixels(r.S, side = 1)
# v.V.1 = getImagePixels(r.V, side = 1)
#
v.grey.2 = getImagePixels(r.grey, side = 2)
# v.H.2 = getImagePixels(r.H, side = 2)
# v.S.2 = getImagePixels(r.S, side = 2)
# v.V.2 = getImagePixels(r.V, side = 2)
#
v.grey.3 = getImagePixels(r.grey, side = 3)
# v.H.3 = getImagePixels(r.H, side = 3)
# v.S.3 = getImagePixels(r.S, side = 3)
# v.V.3 = getImagePixels(r.V, side = 3)
#
# # Calculate histograms from neighbor vectors
prob.grey.1 = calculateHisto(reference_vector = v.grey.1$reference_vector,
neighbour_vector = v.grey.1$neighbour_vector, nbins = nbins)
# prob.H.1 = calculateHisto(reference_vector = v.H.1$reference_vector,
# neighbour_vector = v.H.1$neighbour_vector, nbins = nbins)
# prob.S.1 = calculateHisto(reference_vector = v.S.1$reference_vector,
# neighbour_vector = v.S.1$neighbour_vector, nbins = nbins)
# prob.V.1 = calculateHisto(reference_vector = v.V.1$reference_vector,
# neighbour_vector = v.V.1$neighbour_vector, nbins = nbins)
#
prob.grey.2 = calculateHisto(reference_vector = v.grey.2$reference_vector,
neighbour_vector = v.grey.2$neighbour_vector, nbins = nbins)
# prob.H.2 = calculateHisto(reference_vector = v.H.2$reference_vector,
# neighbour_vector = v.H.2$neighbour_vector, nbins = nbins)
# prob.S.2 = calculateHisto(reference_vector = v.S.2$reference_vector,
# neighbour_vector = v.S.2$neighbour_vector, nbins = nbins)
# prob.V.2 = calculateHisto(reference_vector = v.V.2$reference_vector,
# neighbour_vector = v.V.2$neighbour_vector, nbins = nbins)
#
prob.grey.3 = calculateHisto(reference_vector = v.grey.3$reference_vector,
neighbour_vector = v.grey.3$neighbour_vector, nbins = nbins)
# prob.H.3 = calculateHisto(reference_vector = v.H.3$reference_vector,
# neighbour_vector = v.H.3$neighbour_vector, nbins = nbins)
# prob.S.3 = calculateHisto(reference_vector = v.S.3$reference_vector,
# neighbour_vector = v.S.3$neighbour_vector, nbins = nbins)
# prob.V.3 = calculateHisto(reference_vector = v.V.3$reference_vector,
# neighbour_vector = v.V.3$neighbour_vector, nbins = nbins)
# Calculate the green index
# r.green = getBinaryVegetationMask(RGB)
# Write to the CSV file after every image is analysed
write.table(
data.frame(
i = i,
ID = file.to.analyze,
MIG.grey = meanInformationGain(prob.grey.2),
Aniso.grey = meanInformationGain(prob.grey.1) / meanInformationGain(prob.grey.3),
Timestamp = Sys.time()
),
file=results.file,
append=i!=1,
col.names = i==1,
row.names = FALSE,
sep=","
)
}
}
【问题讨论】: