Análisis de imágenes, a través de la librería Pliman para el cálculo de la severidad

La **fitopatometría* es la ciencia que se encartga de las mediciones cuantitativas, a nivel de enfermedades, donde se realizan cálculos de severidad, incidencia y rendimiento (Mariño, 2021). Permite medir los niveles de enfermedades vegetales. Una heramienta para ello, es el uso de la libería Pliman. Desarrollada por Tiago Olivoto, permite a través de la detección de patrones en las imágenes el cálculo de la severidad que se presentan en hojas enfermas. Dado que uno de los retos para el análsis de imágenes es la obtención y cuantificación de los datos, surge la necesidad de crear herramientas que permiten la automatización de estos procesos, haciendo más eficiente el trabajo del investigador. Pliman (Plante image analoysys), paquete del Softawe R, permite abordar esta problemática, realizadno el procesamiento de imagenes de plantas en simultáneo, permitiendo la medición de variables como la severidad conteo de lesiones, conteo de objetos en una imagen y extracción de características del objeto (Pliman, 2024).

Roya del cafeto y muerte descendente del cafeto

Colombia, como tercer productor de café en el mundo, basa su economía en la producción de grano de alta calidad para exportación y consumo interno. Sin embargo, ésta se ve afectada por enfermedades limitantes como roya y muerte descendente del cafeto. La roya del café, desarrollada por Hemileia vastatrix, es una enfermedad que está ligada con el desarrollo fisiológico del cultivo, dado que disminuya la producción de la planta, por la irrupción en los procesos fotosintéticos y desarrollo de foto asimilados. La formación de uredinos y especialización en el parasitismo de células vegetales vivas, implica un patógeno obligado, con alta capacidad de dispersión por sus ciclos de producción de uredinosporas, con capacidad de formación de tubos germinativos de entre 6 a 12 horas, luego de que la espora llega sobre el envés de la hoja (Rivillas O. et al., 2011).

Por otro lado, la muerte descendente del café, enfermedad atribuida al patógeno Phoma spp., es una enfermedad limitante, principalmente en las etapas vegetativas de la planta. Afecta tejidos tiernos en hojas en desarrollo y brotes terminales, en tallo principal, causando necrosis que puede avanzar hasta el tejido lignificado (Menza F. & Pelaez P., 2015). En hojas jóvenes, se observan manchas oscuras redondas con bordes irregulares que luego llegan a necrosarse y en un estado avanzado, produce malformaciones, debido al crecimiento normal del tejido vegetal alrededor (Menza F. & Pelaez P., 2015). Estas enfermedades de importante limitación económica requieren de estudios como la determinación de la severidad que puede presentarse, para darle un manejo efectivo antes de generar pérdidas en el rendimiento.

Análisis de imágenes de Roya y Phoma en Cultivos de Café

Las imágenes analizadas para el presente estudio, fueron descargadas de Kaggle, una plataforma de ciencias de datos, de libre acceso, del cual se bajaron imágenes de plantas sanas y enfermedad de ambos patógenos (https://www.kaggle.com/datasets/gauravduttakiit/coffee-leaf-diseases/data)

Descarga Libreria Pliman

Se realizó la descarga de la libreria versión 3.0.0

#install.packages ("pliman")

Librerias

library(pliman)
## |======================================================|
## | Welcome to the pliman package (version 3.0.0)!       |
## | Developed collaboratively by NEPEM - nepemufsc.com   |
## | Group lead: Prof. Tiago Olivoto                      |
## | For citation: type `citation('pliman')`              |
## | We welcome your feedback and suggestions!            |
## |======================================================|
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ forcats::%>%()               masks stringr::%>%(), dplyr::%>%(), purrr::%>%(), tidyr::%>%(), tibble::%>%(), pliman::%>%()
## ✖ tibble::column_to_rownames() masks pliman::column_to_rownames()
## ✖ dplyr::filter()              masks stats::filter()
## ✖ dplyr::lag()                 masks stats::lag()
## ✖ tibble::remove_rownames()    masks pliman::remove_rownames()
## ✖ tibble::rownames_to_column() masks pliman::rownames_to_column()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(patchwork)

Directorio de Trabajo

setwd("C:/Users/Anamaria/Documents/Estudio/Datos_Cafe/train/rust/img")

Importación de imágenes

Para llamar las imagenes a analizar, se usa la función image_import, donde una vez establecido el directorio, se llama directamente a las imágenes de interés, de acuerdo la nombre asignado.

img<- image_import("1492.jpg")

También, pueden llamarse las imágenes mediante un vector en una lista, o si tienen una estructura de nombre establecida, se pueden llamar un paquete de imágenes por el patrón en el nombre asignado. Es importante que luego del nombre pattern siga un formato establecido, bien sea de números o letras, que pueda ser reconocido por el programa y cargadas las imágenes.

img_list1 <- image_import(c("145.jpg", "148.jpg"))
img_list2 <- image_import(pattern = "1")
str(img_list2)
## List of 85
##  $ 135.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.384 0.376 0.376 0.384 0.396 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 136.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.537 0.537 0.533 0.529 0.529 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 137.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.486 0.498 0.514 0.529 0.533 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 138.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.369 0.373 0.376 0.384 0.384 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 139.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.388 0.384 0.38 0.376 0.38 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 140.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.553 0.549 0.549 0.549 0.549 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 141.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.553 0.549 0.545 0.537 0.537 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 142.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.341 0.341 0.345 0.353 0.353 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 143.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.376 0.376 0.373 0.365 0.353 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 144.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.506 0.506 0.506 0.498 0.494 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 145.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.506 0.506 0.502 0.502 0.502 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 146.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.376 0.376 0.38 0.38 0.38 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 147.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.369 0.369 0.369 0.365 0.365 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1475.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.686 0.682 0.678 0.678 0.682 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1476.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.769 0.773 0.776 0.78 0.78 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1477.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.812 0.808 0.808 0.808 0.808 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1478.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.729 0.729 0.729 0.733 0.733 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1479.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.694 0.694 0.698 0.702 0.702 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 148.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.616 0.616 0.616 0.612 0.612 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1484.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.827 0.824 0.812 0.808 0.808 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1485.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.855 0.855 0.863 0.867 0.867 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1486.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.812 0.808 0.8 0.792 0.784 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1487.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.773 0.773 0.773 0.776 0.78 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1488.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.824 0.824 0.824 0.824 0.824 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1489.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.82 0.82 0.82 0.824 0.824 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 149.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.612 0.612 0.616 0.616 0.62 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1490.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.643 0.639 0.639 0.635 0.635 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1491.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.376 0.38 0.384 0.384 0.376 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1492.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.804 0.804 0.804 0.808 0.808 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1493.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.808 0.808 0.808 0.812 0.812 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1494.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.616 0.62 0.624 0.627 0.627 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1495.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.337 0.337 0.337 0.337 0.337 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 150.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.584 0.584 0.584 0.584 0.584 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1504.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.808 0.808 0.812 0.816 0.816 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1505.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.851 0.851 0.855 0.859 0.863 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1506.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.804 0.808 0.816 0.82 0.824 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1507.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.78 0.78 0.78 0.78 0.78 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1508.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.796 0.796 0.796 0.796 0.796 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1509.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.804 0.804 0.804 0.804 0.804 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1510.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.635 0.635 0.635 0.635 0.635 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1511.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.549 0.545 0.545 0.545 0.545 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1512.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 1 1 1 1 1 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1513.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 1 0.996 0.996 0.992 0.992 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1514.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.898 0.898 0.898 0.898 0.898 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1515.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.725 0.725 0.725 0.725 0.725 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1516.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.898 0.898 0.898 0.898 0.898 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1517.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.91 0.91 0.91 0.91 0.91 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1518.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.737 0.741 0.741 0.745 0.745 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1555.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.667 0.671 0.671 0.675 0.675 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1556.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.882 0.882 0.882 0.882 0.882 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1557.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.902 0.898 0.898 0.898 0.898 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1558.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.808 0.816 0.812 0.792 0.796 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1559.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.761 0.769 0.78 0.792 0.8 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1564.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.804 0.804 0.804 0.804 0.804 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1565.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.82 0.82 0.82 0.82 0.82 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1566.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.667 0.667 0.667 0.667 0.667 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1567.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.392 0.388 0.384 0.384 0.384 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1568.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.753 0.753 0.753 0.753 0.753 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1569.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.761 0.757 0.757 0.753 0.753 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1570.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.624 0.627 0.631 0.631 0.624 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1571.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.333 0.333 0.333 0.337 0.337 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1572.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.78 0.78 0.78 0.78 0.78 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1573.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.773 0.769 0.769 0.776 0.784 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 1574.jpg:Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.737 0.737 0.741 0.741 0.741 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 159.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.392 0.384 0.38 0.38 0.384 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 160.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.467 0.471 0.478 0.482 0.49 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 161.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.518 0.522 0.525 0.522 0.514 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 162.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.353 0.353 0.353 0.357 0.357 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 163.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.373 0.376 0.38 0.384 0.384 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 164.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.435 0.447 0.447 0.431 0.412 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 165.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.443 0.447 0.447 0.451 0.451 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 166.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.294 0.294 0.294 0.294 0.294 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 167.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.314 0.314 0.314 0.31 0.306 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 168.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.478 0.478 0.478 0.478 0.478 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 169.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.498 0.498 0.498 0.498 0.498 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 170.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.455 0.455 0.455 0.459 0.459 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 171.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.498 0.494 0.494 0.49 0.49 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 172.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.565 0.565 0.565 0.565 0.565 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 173.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.576 0.58 0.58 0.584 0.584 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 174.jpg :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.451 0.455 0.455 0.459 0.459 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 2.jpg   :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.725 0.729 0.729 0.733 0.733 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 21.jpg  :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.804 0.804 0.804 0.808 0.808 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 22.jpg  :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.714 0.714 0.714 0.714 0.714 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 23.jpg  :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.427 0.416 0.408 0.416 0.427 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3
##  $ 24.jpg  :Formal class 'Image' [package "EBImage"] with 2 slots
##   .. ..@ .Data    : num [1:2048, 1:1024, 1:3] 0.737 0.737 0.737 0.741 0.741 ...
##   .. ..@ colormode: int 2
##   .. ..$ dim: int [1:3] 2048 1024 3

Visualización de imágenes

Para visualizar imágenes se utiliza la función plot o image_combine, que permite observar las imágenes combinadas, que premivamente se habian agrupado en una lista.

plot(img)

image_combine(img_list1)

Redimensión de la imagen

Dado que muchas de las imágenes que por su tamaño son pesadas, el procesamiento para el equipo puede tomar más tiempo, trabajo y esfuerzo para la máquina. Es por ello que se realiza una redimensión de las fotografías, sin perder información para facilitar el procesamiento de las imágenes.

image_dimension(img)
## 
## ----------------------
## Image dimension
## ----------------------
## Width :  2048 
## Height:  1024
img_resized <- image_resize(img, rel_size = 40)
image_dimension(img_resized)
## 
## ----------------------
## Image dimension
## ----------------------
## Width :  819 
## Height:  410
plot(img_resized)

Resolución de imagenes

Es importante para corregir medidas después. Es la cantidad de pixeles contenidos en un área determinada. Identifica la resolución con la función DPI.

rule <- image_import("1492.jpg", plot = TRUE)
x11()
(imgres <- dpi(rule))

rule2 <- 
  image_crop(rule,
             width = 130:1280,
             height = 582:959,
             plot = TRUE)

analyze_objects(rule2,
                watershed = FALSE,
                marker = "area",
                contour_col = "blue",
                contour_size = 8) |> 
  get_measures(dpi = 518) |> 
  plot_measures(measure = "area", vjust = -100, size = 2)

Segmentación de objetos

Permite visualizar en distintos rangos de color la imagen para realizar su análisis. Cambios como el fondo, convertir la imagen a binaria o analizar la foto con información que permita faciliar su análisis. Se permite mayores contrastes entre los objetos.

Nota: El símbolo |> permite encadenar funciones. Es decir, a partir del resultado de la primera línea de código antes del símbolo, se ejecuta la segunda.

img <- 
  image_import("1492.jpg") |> 
  image_horizontal(plot = TRUE) |> 
  image_rotate(180, plot = TRUE)

Donde se observa que los mejores colores contrastante corresponde a R y NR.

Cálculo de la severidad en Roya

Para el análisis de la severidad en un pool de imágenes, primero se hace la definición de las imágenes que correponden a tejido sano, tejido enfermo y background, correspondiente al fondo de la imagen. Es importante entrenar bien el modelo, brindandole distintas imágenes de enfermedad, tejido sano y background, para que pueda delimitar bien las áreas enfermas

library("pliman")
# import images

imagen1 <- image_import("1492.jpg")
h <- image_import("nond.png")
d <- image_import("symp.png")
b <- image_import("back.png")
image_combine(imagen1, h, d, b, ncol = 4)

rust_path <- "C:/Users/Anamaria/Documents/Estudio/Datos_Cafe/test/rust"

h <- image_import("nond.png")
d <- image_import("symp.png")
b <- image_import("back.png")
image_combine(img, h, d, b, ncol = 4)

f1<-measure_disease(img = imagen1,
                img_healthy = image_import("nond.png"),
                img_symptoms = image_import("symp.png"),
                img_background = image_import("back.png"),
                save_image = TRUE,
                show_original = TRUE,
                dir_processed = rust_path)

f2<-measure_disease(img = imagen1,
                img_healthy = image_import("nond.png"),
                img_symptoms = image_import("symp.png"),
                img_background = image_import("back.png"),
                save_image = TRUE,
                show_original = FALSE,
                prefix = "proc_mask_",
                dir_processed = rust_path)

sev2 <- 
  measure_disease(img = img,
                  img_healthy = h,
                  img_symptoms = d,
                  img_background = b,
                  show_contour = FALSE,
                  col_lesions = "brown")

f1$severity
##    healthy symptomatic
## 1 57.87644    42.12356
sev2$severity
##    healthy symptomatic
## 1 57.58371    42.41629

Ahora, para el análisis de varias imágenes en simultaneo, es necesario llamar en la función un patrón que corresponda al nombre de las imágenes guardadas en el directorio, que en este caso corresponde a “1”, almacenando las imágenes en un directorio temporal.

#Crear un Directorio Temporal
temp_dir <- tempdir()

system.time(
  sev_rust <- 
    measure_disease(pattern = "1",
                    img_healthy = h,
                    img_symptoms = d,
                    img_background = b,
                    plot =  FALSE,
                    save_image = TRUE,
                    dir_processed = temp_dir,
                    show_contour = FALSE,
                    col_lesions = "brown")
)
## Processing image 135 |=                                          | 1% 00:00:00 
## Processing image 136 |=                                          | 2% 00:00:02 
## Processing image 137 |==                                         | 4% 00:00:05 
## Processing image 138 |==                                         | 5% 00:00:08 
## Processing image 139 |===                                        | 6% 00:00:11 
## Processing image 140 |===                                        | 7% 00:00:14 
## Processing image 141 |====                                       | 8% 00:00:17 
## Processing image 142 |====                                       | 9% 00:00:19 
## Processing image 143 |=====                                      | 11% 00:00:23 
## Processing image 144 |=====                                      | 12% 00:00:25 
## Processing image 145 |======                                     | 13% 00:00:28 
## Processing image 146 |======                                     | 14% 00:00:30 
## Processing image 147 |=======                                    | 15% 00:00:33 
## Processing image 1475 |=======                                   | 16% 00:00:37 
## Processing image 1476 |=======                                   | 18% 00:00:39 
## Processing image 1477 |========                                  | 19% 00:00:42 
## Processing image 1478 |========                                  | 20% 00:00:45 
## Processing image 1479 |=========                                 | 21% 00:00:48 
## Processing image 148 |==========                                 | 22% 00:00:50 
## Processing image 1484 |==========                                | 24% 00:00:53 
## Processing image 1485 |==========                                | 25% 00:00:56 
## Processing image 1486 |===========                               | 26% 00:00:59 
## Processing image 1487 |===========                               | 27% 00:01:03 
## Processing image 1488 |============                              | 28% 00:01:06 
## Processing image 1489 |============                              | 29% 00:01:08 
## Processing image 149 |=============                              | 31% 00:01:11 
## Processing image 1490 |=============                             | 32% 00:01:13 
## Processing image 1491 |==============                            | 33% 00:01:16 
## Processing image 1492 |==============                            | 34% 00:01:18 
## Processing image 1493 |===============                           | 35% 00:01:21 
## Processing image 1494 |===============                           | 36% 00:01:24 
## Processing image 1495 |================                          | 38% 00:01:27 
## Processing image 150 |=================                          | 39% 00:01:29 
## Processing image 1504 |=================                         | 40% 00:01:32 
## Processing image 1505 |=================                         | 41% 00:01:35 
## Processing image 1506 |==================                        | 42% 00:01:37 
## Processing image 1507 |==================                        | 44% 00:01:40 
## Processing image 1508 |===================                       | 45% 00:01:42 
## Processing image 1509 |===================                       | 46% 00:01:45 
## Processing image 1510 |====================                      | 47% 00:01:48 
## Processing image 1511 |====================                      | 48% 00:01:51 
## Processing image 1512 |=====================                     | 49% 00:01:53 
## Processing image 1513 |=====================                     | 51% 00:01:56 
## Processing image 1514 |======================                    | 52% 00:01:58 
## Processing image 1515 |======================                    | 53% 00:02:01 
## Processing image 1516 |=======================                   | 54% 00:02:03 
## Processing image 1517 |=======================                   | 55% 00:02:06 
## Processing image 1518 |========================                  | 56% 00:02:08 
## Processing image 1555 |========================                  | 58% 00:02:10 
## Processing image 1556 |=========================                 | 59% 00:02:14 
## Processing image 1557 |=========================                 | 60% 00:02:21 
## Processing image 1558 |==========================                | 61% 00:02:27 
## Processing image 1559 |==========================                | 62% 00:02:35 
## Processing image 1564 |===========================               | 64% 00:02:40 
## Processing image 1565 |===========================               | 65% 00:02:43 
## Processing image 1566 |============================              | 66% 00:02:45 
## Processing image 1567 |============================              | 67% 00:02:48 
## Processing image 1568 |=============================             | 68% 00:02:50 
## Processing image 1569 |=============================             | 69% 00:02:54 
## Processing image 1570 |==============================            | 71% 00:02:56 
## Processing image 1571 |==============================            | 72% 00:02:59 
## Processing image 1572 |===============================           | 73% 00:03:02 
## Processing image 1573 |===============================           | 74% 00:03:04 
## Processing image 1574 |================================          | 75% 00:03:07 
## Processing image 159 |=================================          | 76% 00:03:10 
## Processing image 160 |=================================          | 78% 00:03:13 
## Processing image 161 |==================================         | 79% 00:03:16 
## Processing image 162 |==================================         | 80% 00:03:18 
## Processing image 163 |===================================        | 81% 00:03:21 
## Processing image 164 |===================================        | 82% 00:03:23 
## Processing image 165 |====================================       | 84% 00:03:26 
## Processing image 166 |====================================       | 85% 00:03:29 
## Processing image 167 |=====================================      | 86% 00:03:31 
## Processing image 168 |=====================================      | 87% 00:03:34 
## Processing image 169 |======================================     | 88% 00:03:36 
## Processing image 170 |======================================     | 89% 00:03:39 
## Processing image 171 |=======================================    | 91% 00:03:42 
## Processing image 172 |=======================================    | 92% 00:03:45 
## Processing image 173 |========================================   | 93% 00:03:47 
## Processing image 174 |========================================   | 94% 00:03:50 
## Processing image 2 |===========================================  | 95% 00:03:53 
## Processing image 21 |==========================================  | 96% 00:03:55 
## Processing image 22 |=========================================== | 98% 00:03:58 
## Processing image 23 |=========================================== | 99% 00:04:00 
## Processing image 24 |============================================| 100% 00:04:03 
## Done!
## Elapsed time: 00:04:06
##    user  system elapsed 
##  191.44   53.92  246.20
data<-sev_rust$severity
data<-sev_rust$severity
data
##     img  healthy symptomatic
## 1   135 95.71235   4.2876508
## 2   136 88.62907  11.3709312
## 3   137 88.69449  11.3055112
## 4   138 88.81634  11.1836615
## 5   139 88.71589  11.2841103
## 6   140 95.88672   4.1132783
## 7   141 95.91437   4.0856317
## 8   142 95.94230   4.0576994
## 9   143 96.04861   3.9513864
## 10  144 97.88812   2.1118752
## 11  145 98.06180   1.9382046
## 12  146 97.84132   2.1586767
## 13  147 97.86479   2.1352086
## 14 1475 87.36047  12.6395298
## 15 1476 83.34310  16.6569024
## 16 1477 82.84328  17.1567235
## 17 1478 83.45717  16.5428321
## 18 1479 83.61318  16.3868159
## 19  148 98.40033   1.5996691
## 20 1484 87.72739  12.2726119
## 21 1485 87.31972  12.6802837
## 22 1486 87.63992  12.3600774
## 23 1487 87.57242  12.4275802
## 24 1488 97.32352   2.6764762
## 25 1489 97.38961   2.6103854
## 26  149 98.46245   1.5375477
## 27 1490 97.25795   2.7420502
## 28 1491 97.34604   2.6539595
## 29 1492 56.57660  43.4233992
## 30 1493 57.26901  42.7309914
## 31 1494 57.93501  42.0649948
## 32 1495 57.43627  42.5637279
## 33  150 98.34476   1.6552413
## 34 1504 99.35528   0.6447218
## 35 1505 99.33293   0.6670708
## 36 1506 99.35072   0.6492756
## 37 1507 99.34130   0.6587036
## 38 1508 93.35368   6.6463200
## 39 1509 93.34861   6.6513868
## 40 1510 93.51581   6.4841903
## 41 1511 93.29803   6.7019669
## 42 1512 88.16456  11.8354421
## 43 1513 88.24346  11.7565405
## 44 1514 88.39477  11.6052270
## 45 1515 88.34154  11.6584635
## 46 1516 98.04046   1.9595399
## 47 1517 98.09767   1.9023294
## 48 1518 98.05184   1.9481591
## 49 1555 79.82023  20.1797727
## 50 1556 70.50498  29.4950167
## 51 1557 67.29480  32.7052005
## 52 1558 68.70914  31.2908561
## 53 1559 67.34207  32.6579343
## 54 1564 97.13468   2.8653194
## 55 1565 97.12889   2.8711094
## 56 1566 97.20673   2.7932742
## 57 1567 97.13510   2.8648977
## 58 1568 82.98390  17.0161008
## 59 1569 82.99317  17.0068281
## 60 1570 84.40676  15.5932407
## 61 1571 82.73175  17.2682488
## 62 1572 74.54832  25.4516777
## 63 1573 72.58249  27.4175073
## 64 1574 74.44452  25.5554844
## 65  159 94.11121   5.8887943
## 66  160 97.44153   2.5584659
## 67  161 97.39481   2.6051879
## 68  162 97.46752   2.5324769
## 69  163 97.47263   2.5273739
## 70  164 88.12552  11.8744773
## 71  165 88.25285  11.7471504
## 72  166 88.21680  11.7832030
## 73  167 88.02382  11.9761806
## 74  168 95.00071   4.9992941
## 75  169 95.13732   4.8626831
## 76  170 95.07293   4.9270691
## 77  171 95.23334   4.7666641
## 78  172 99.07746   0.9225359
## 79  173 99.02712   0.9728787
## 80  174 98.90432   1.0956759
## 81    2 94.86648   5.1335181
## 82   21 96.57844   3.4215613
## 83   22 92.15955   7.8404460
## 84   23 72.14614  27.8538561
## 85   24 97.58821   2.4117867

A partir de dichos datos, se realiza una gráfica para visualizar como es el comportamiento de los datos en 4 intervalos distintos y cuál es la predominancia en el estado de severidad de acuerdo al pool de imágenes.

str(sev_rust$severity)  # Ver estructura
## 'data.frame':    85 obs. of  3 variables:
##  $ img        : chr  "135" "136" "137" "138" ...
##  $ healthy    : num  95.7 88.6 88.7 88.8 88.7 ...
##  $ symptomatic: num  4.29 11.37 11.31 11.18 11.28 ...
length(sev_rust$severity)  # Ver cuántos elementos tiene
## [1] 3
tabla_severidad <- data.frame(
  img = sev_rust$severity$img,  # Nombres de las imágenes
  symptomatic = sev_rust$severity$symptomatic # Severidad
)

# Verificar que la tabla se creó bien
print(tabla_severidad)
##     img symptomatic
## 1   135   4.2876508
## 2   136  11.3709312
## 3   137  11.3055112
## 4   138  11.1836615
## 5   139  11.2841103
## 6   140   4.1132783
## 7   141   4.0856317
## 8   142   4.0576994
## 9   143   3.9513864
## 10  144   2.1118752
## 11  145   1.9382046
## 12  146   2.1586767
## 13  147   2.1352086
## 14 1475  12.6395298
## 15 1476  16.6569024
## 16 1477  17.1567235
## 17 1478  16.5428321
## 18 1479  16.3868159
## 19  148   1.5996691
## 20 1484  12.2726119
## 21 1485  12.6802837
## 22 1486  12.3600774
## 23 1487  12.4275802
## 24 1488   2.6764762
## 25 1489   2.6103854
## 26  149   1.5375477
## 27 1490   2.7420502
## 28 1491   2.6539595
## 29 1492  43.4233992
## 30 1493  42.7309914
## 31 1494  42.0649948
## 32 1495  42.5637279
## 33  150   1.6552413
## 34 1504   0.6447218
## 35 1505   0.6670708
## 36 1506   0.6492756
## 37 1507   0.6587036
## 38 1508   6.6463200
## 39 1509   6.6513868
## 40 1510   6.4841903
## 41 1511   6.7019669
## 42 1512  11.8354421
## 43 1513  11.7565405
## 44 1514  11.6052270
## 45 1515  11.6584635
## 46 1516   1.9595399
## 47 1517   1.9023294
## 48 1518   1.9481591
## 49 1555  20.1797727
## 50 1556  29.4950167
## 51 1557  32.7052005
## 52 1558  31.2908561
## 53 1559  32.6579343
## 54 1564   2.8653194
## 55 1565   2.8711094
## 56 1566   2.7932742
## 57 1567   2.8648977
## 58 1568  17.0161008
## 59 1569  17.0068281
## 60 1570  15.5932407
## 61 1571  17.2682488
## 62 1572  25.4516777
## 63 1573  27.4175073
## 64 1574  25.5554844
## 65  159   5.8887943
## 66  160   2.5584659
## 67  161   2.6051879
## 68  162   2.5324769
## 69  163   2.5273739
## 70  164  11.8744773
## 71  165  11.7471504
## 72  166  11.7832030
## 73  167  11.9761806
## 74  168   4.9992941
## 75  169   4.8626831
## 76  170   4.9270691
## 77  171   4.7666641
## 78  172   0.9225359
## 79  173   0.9728787
## 80  174   1.0956759
## 81    2   5.1335181
## 82   21   3.4215613
## 83   22   7.8404460
## 84   23  27.8538561
## 85   24   2.4117867
# Crear los rangos de severidad
tabla_severidad$rango <- cut(tabla_severidad$symptomatic, 
                             breaks = c(0, 10, 20, 30, Inf), 
                             labels = c("0-10", "10-20", "20-30", ">30"),
                             right = TRUE)  

# Contar cuántas imágenes hay en cada categoría
conteo_severidad <- as.data.frame(table(tabla_severidad$rango))
colnames(conteo_severidad) <- c("Rango", "Frecuencia")

# Ver la tabla final
print(conteo_severidad)
##   Rango Frecuencia
## 1  0-10         47
## 2 10-20         25
## 3 20-30          6
## 4   >30          7
library(ggplot2)

ggplot(conteo_severidad, aes(x = Rango, y = Frecuencia, fill = Rango)) +
  geom_bar(stat = "identity") +
  labs(title = "Distribución de severidad de la Roya",
       x = "Severidad (%)",
       y = "Número de imágenes") +
  theme_minimal() +
  scale_fill_manual(values = c("lightgreen", "yellow", "orange", "red"))

ggplot(tabla_severidad, aes(x = img, y = symptomatic, fill = symptomatic)) +
  geom_bar(stat = "identity") +
  scale_fill_gradient(low = "lightblue", high = "purple") +
  labs(title = "Severidad de la Roya por Imagen",
       x = "Imagen",
       y = "Severidad (%)") +
  theme_minimal() +
  theme(axis.text.x = element_blank())  # Ocultar nombres de imágenes si hay muchas

Cálculo de la severidad en Phoma

ruta_imagen <- file.path("C:/Users/Anamaria/Documents/Estudio/Datos_Cafe/train/rust/img/phoma")
ph1 <- image_import("262.jpg", path= "phoma")
plot(ph1)

h1 <- image_import("nond.png", path= "phoma")
d1 <- image_import("dphom.png", path= "phoma")
b1 <- image_import("back.png", path= "phoma")
image_combine(ph1, h1, d1, b1, ncol = 4)

pf1<-measure_disease(img = ph1,
                img_healthy = h1,
                img_symptoms = d1,
                img_background = b1,
                save_image = TRUE,
                show_original = TRUE,
                dir_processed = rust_path)

pf2<-measure_disease(img = ph1,
                img_healthy = h1,
                img_symptoms = d1,
                img_background = b1,
                save_image = TRUE,
                show_original = FALSE,
                prefix = "proc_mask_",
                dir_processed = rust_path)

pf3 <- 
  measure_disease(img = ph1,
                  img_healthy = h,
                  img_symptoms = d,
                  img_background = b,
                  show_contour = FALSE,
                  col_lesions = "brown")

Agradecimientos

Este ejercicio y análisis fue realizado gracias al trabajo de Tiago Olivoto.

Olivoto, Tiago. 2022. “Lights, Camera, Pliman! An R Package for Plant Image Analysis”. Methods in Ecology and Evolution 13(4): 789–98 doi: 10.1111/2041-210X.13803

Bibliografía Mariño, V. (2021). ELABORACIÓN Y VALIDACIÓN DE DIAGRAMAS DE SEVERIDAD PARA EL DAÑO CAUSADO POR MILDIU (Peronospora variabilis) EN QUINUA (Chenopodium quinoa Will.) [Tesis: Proyecto de Investigación, ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO]. http://dspace.espoch.edu.ec/bitstream/123456789/15655/1/13T00937.pdf

Menza F., H. D., & Pelaez P., M. J. (2015). Alternativas para el manejo cultural de la muerte descendente del cafeto [Technical Report]. Centro Nacional de Investigaciones de Café (Cenicafé). https://biblioteca.cenicafe.org/handle/10778/610

Pliman. (2024). Recuperado 16 de enero de 2025, de https://tiagoolivoto.github.io/pliman/

Rivillas O., C. A., Serna G., C. A., Cristancho A., M. A., & Gaitan B., A. L. (2011). La roya del cafeto en Colombia: Impacto manejo y costos del control. https://biblioteca.cenicafe.org/handle/10778/594