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