You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.1 KiB

3 years ago
#' Return a tidy data frame of Lepton radiometric data retrieved with [get_image()]
#'
#' Converts the base64 16-bit coded Kelvin radiometric data to a tidy "XYZ"
#' data frame in Fahrenheit.
#'
#' @param img_data data structure retrieved with [get_image()]
#' @returns data frame of `x`, `y`, and `value`
#' @export
tidy_radiometric <- function(img_data) {
if (!hasName(img_data, "radiometric")) {
stop("Data structure does not seem to be tCam radiometric image data.", call.=FALSE)
}
openssl::base64_decode(img_data$radiometric) %>%
readBin(
what = "integer",
n = 19200,
size = 2
) %>%
matrix(
nrow = 120,
ncol = 160,
byrow = TRUE,
dimnames = list(120:1)
) -> m
as.data.frame(m) %>%
mutate(y = rownames(m)) %>%
gather(x, value, -y) %>%
mutate_at(
vars(x),
~sub("V", "", .)
) %>%
mutate(
x = as.integer(x),
y = as.integer(y),
value = ((value / 100) * 1.8) - 459.67 # convert to degrees F b/c I'm a brutish Murican
) -> xdf
xdf[,c("x", "y", "value")]
}