Автоматизация обработки изображений и обработки нескольких изображений в R - PullRequest
0 голосов
/ 23 апреля 2020

Я готов оценить почвенный покров культур с помощью обработки изображений в т.

Для оценки почвенного покрова культуры на основе 1 индивидуального снимка я использовал следующий код:

install.packages("imager")
library(imager)
image<-load.image('Path.PNG')

R<-R(image)
G<-G(image)
B<-B(image)

ExGreen<-2*G-R-B #convert the picture to an index value
rowMn <- rowMeans(ExGreen)
plot(rowMn) #plot the index value to visually assess the threshold value to discern between plant material and background+soil

ExGreenThreshold <- 0.1 #insert the visually assessed threshold value
Mask <- ExGreen
Mask[] <- 1
Mask[ExGreen < ExGreenThreshold] <- 0
layout(t(1:2))
plot(image)
plot(Mask)

Mask<-split_connected(Mask) %>% purrr::discard(~ sum(.) < 1000) %>%
  parany %>% plot #remove small weeds from the background

pixPlant <- sum(Mask[]==1) #calculate the share of black and white pixels to assess the canopy cover
pixSoil <- sum(Mask[]==0)
CanCovr <- pixPlant/(pixPlant + pixSoil)
print(paste("The canopy coverage is ", round(CanCovr, 2), sep=""))

Теперь меня интересуют следующие вещи:

  1. Как мне автоматизировать выбор порогового значения для ExGreen ?? Теперь я делаю это вручную, глядя на график rowMeans индекса ExGreen (но это может оказаться трудоемким и не очень научным c подходом)

  2. Как я могу обработать несколько изображений одновременно ?? Теперь я использую следующий код для загрузки всех изображений:

    filenames <-list.files (path = '', pattern = '.PNG', full.names = TRUE) images <-lapply (filenames, load .image) </p>

Однако тогда я больше не могу их обрабатывать ... Если я применяю описанную мной процедуру к 1 изображению, я уже застреваю при выборе диапазонов RGB со следующей ошибкой:

> R<-R(images[1])
Error in im[, , , ind, drop = FALSE] : incorrect number of dimensions

Я надеюсь, что кто-нибудь может мне помочь или направить меня к другим темам, где были даны ответы на эти вопросы. Заранее спасибо!

...