ScymnusRIP

flir

Jul 24th, 2022 (edited)
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 4.59 KB | None | 0 0
  1. # Required packages to parallelize
  2. library(parallel)
  3. library(foreach)
  4. library(doParallel)
  5.  
  6. # Number of cores
  7. n.core<-detectCores()-1
  8.  
  9. # Starting parallel
  10. cl <- makeCluster(n.core, output = "")
  11. registerDoParallel(cl)
  12.  
  13. #Declaring variables
  14. treatments<-c("T1","T2","T3")
  15. graphColorMax<-c("blue", "red", "green", "violet", "orange", "black", "brown", "dark blue")
  16.  
  17. #Choosing folders
  18. folder_input<-choose.dir(default = "D:/", caption = "Select INPUT folder")
  19. folder_output<-choose.dir(default = folder_input, caption = "Select OUTPUT folder")
  20.  
  21.  
  22.  
  23.  
  24. foreach (i=1:length(treatments), .combine = "c", .inorder=FALSE, .packages=c("raster", "rasterVis","lattice", "ThermStats", "Thermimage", "readxl","tiff", "openxlsx", "stringr","moments", "viridis", "viridisLite" )) %dopar% {
  25.  
  26. #Importing file list and adjusting
  27. flir_file_list2 <- read_excel(paste0(folder_output,"\\",treatments[i],"FLIR_file.xlsx"))
  28. flir_file_list2$photo_name<-paste0(substr(flir_file_list2$photo_name,1,9))
  29. flir_file_list2<-as.data.frame(flir_file_list2)
  30.  
  31. flir_file_list2$photo_name<-as.numeric(flir_file_list2$photo_name)
  32. flir_file_list2$photo_name<-as.integer(flir_file_list2$photo_name)
  33.  
  34.    
  35. #Batch extraction from images and saving results
  36. flir_rawPICS<-batch_extract(in_dir=paste0(folder_input,"\\",treatments[i]),        
  37.                         write_results=TRUE,
  38.                         file_name = paste0(treatments[i],"_flir_batch_converted_",Sys.Date()),
  39.                         inc=flir_file_list,
  40.                         out_dir=folder_output,
  41.                         exiftoolpath="D:/AgriSearchInnovations/Comuni/termocamera/Exiftools/") 
  42.  
  43.  
  44. PIC_index <-match(
  45.  names(flir_rawPICS$raw_dat),
  46.  flir_file_list2$photo_name)
  47.  
  48.  
  49. #onversion from avalues to temperatures
  50. flir_converted<-batch_convert(flir_rawPICS$raw_dat,
  51.   E = 0.98,
  52.   OD = flir_file_list2$object_distance[PIC_index],
  53.   RTemp = flir_file_list2$ambient_temp[PIC_index],
  54.   ATemp = flir_file_list2$ambient_temp[PIC_index],
  55.   IRWTemp = flir_file_list2$ambient_temp[PIC_index],
  56.   IRT = 1,
  57.   RH = flir_file_list2$ambient_humidity[PIC_index],
  58.   PR1 = flir_rawPICS$camera_params$PlanckR1,       
  59.   PB = flir_rawPICS$camera_params$PlanckB,         
  60.   PF = flir_rawPICS$camera_params$PlanckF,         
  61.   PO = flir_rawPICS$camera_params$PlanckO,         
  62.   PR2 = flir_rawPICS$camera_params$PlanckR2,       
  63.   write_results = TRUE,
  64.   out_dir = folder_output,
  65.   file_name = paste0(treatments[i],"_flir_batch_converted_raw2temp_",Sys.Date())
  66. )
  67.  
  68.  
  69. # Average matrices in list
  70.  
  71. averageFLIR<-average_by_group(metadata = flir_file_list2,
  72.                               img_list =flir_converted,                
  73.                               id = "photo_name",
  74.                               grouping_var = "spatial_rep")
  75.                              
  76.  
  77.  
  78.  
  79.  
  80. # Coerce matrix list to raster stack
  81. stackFLIR<-stack_imgs(flir_converted)
  82. saveRDS(stackFLIR, file = paste0(folder_output,"\\",treatments[i],"_stackFLIR"))
  83.  
  84. # Average in raster stack
  85. averageFLIRstack<-average_by_group(metadata = flir_file_list2,
  86.                               img_list =stackFLIR,
  87.                               id = "photo_name",
  88.                               grouping_var = "spatial_rep")
  89.  
  90.  
  91. saveRDS(averageFLIRstack, file = paste0(folder_output,"\\",treatments[i],"_averageFLIRstack.rds"))
  92.  
  93.  
  94. # Export stack image (average of N picture by grouping var
  95. tiff(   paste0(folder_output,"\\",treatments[i],"_stack_",Sys.Date(),".tiff"),
  96.     width = 1080, height = 1440, units = "px", compression ="lzw", res=300)
  97. raster::plot(averageFLIRstack, col=heat.colors(round(max(averageFLIRstack[])-min(averageFLIRstack[]))*5))
  98. dev.off()
  99.  
  100. #Export histogram density picture
  101. tiff(   paste0(folder_output,"\\",treatments[i],"_histogram_density_",Sys.Date(),".tiff"),
  102.     width = 1440, height = 1080, units = "px", compression ="lzw", res=300)
  103.  
  104. averageFLIRstackhist<-raster::hist(averageFLIRstack,
  105.      freq=FALSE,
  106.      breaks=seq(from=round(min(averageFLIRstack[]), digits=1)-0.1,to=round(max(averageFLIRstack[]), digits=1)+0.1,by=0.1),
  107.      ylim=c(0,1.0),
  108.         xlab="average temperature bin in °C",
  109.         ylab="bin density",
  110.      main=paste0(treatments[i]," temperature density distribution"),
  111.      col=inferno(length(seq(from=round(min(averageFLIRstack[]), digits=1)-0.1,to=round(max(averageFLIRstack[]), digits=1)+0.1,by=0.1))))
  112. dev.off()
  113.  
  114. #Export histogram table
  115. averageFLIRstackhist<-raster::hist(averageFLIRstack,
  116.      freq=FALSE,
  117.      breaks=seq(from=0,to=100,by=0.1))
  118.  
  119. write.xlsx(
  120.     data.frame(Mids=averageFLIRstackhist$mids, Density=averageFLIRstackhist$density,Counts=averageFLIRstackhist$counts),
  121.     file=paste0(folder_output,"\\",treatments[i],"_histogram_density_",Sys.Date(),".xlsx"),
  122.     sheetName=treatments[i], asTable = TRUE )
  123.  
  124. }
  125.  
  126.  
  127. stopCluster(cl)
  128.  
  129.  
  130.  
  131.  
Add Comment
Please, Sign In to add comment