Em se tratando das informações colorimétricas de cada um dos pixels que compõem a imagem orbital, é possível realizar diversos tipos de ajustes nas imagens para realçar ou suprimir determinadas características. A seguir são apresentadas algumas técnicas comuns relacionadas a isso:
Filtragem passa-alta (realce de bordas): este filtro destaca as transições abruptas de intensidade na imagem, realçando bordas e detalhes. O efeito é obtido subtraindo a versão “borrada” da imagem da imagem original.
Filtragem passa-baixa (suavização): reduz o contraste entre as intensidades dos pixels, suavizando a imagem. Um exemplo é a aplicação de uma média ponderada para suavizar detalhes finos.
Equalização de histograma: esta técnica redistribui as intensidades dos pixels na imagem para melhor utilizar a faixa dinâmica disponível, aumentando o contraste.
Ajuste de brilho e contraste: modificar globalmente o brilho e o contraste da imagem pode ajudar a realçar ou suprimir características.
Segmentação: dividir a imagem em regiões com base em critérios de intensidade pode destacar áreas de interesse.
Transformações morfológicas: operações como erosão e dilatação podem ser usadas para realçar ou suprimir determinados padrões.
A escolha da técnica dependerá do objeto da análise e das características desejadas na imagem. É possível experimentar diferentes abordagens e avaliar os resultados visualmente para determinar qual método atende melhor às necessidades.
Trabalhar com processamento de imagem no R envolve o uso de bibliotecas especificas, tais como raster, rgdal e EBImage, as quais fornecem funcionalidades para manipular e processar imagens. Outro aspecto relevante resguarda o recorte das imagens orbitais antes do carregamento no R, o que facilita a análise, economiza tempo e recursos computacionais. Para escolher a área de interesse é importante certificar-se de manter características relevantes para a análise que se pretende.
Na aula de hoje iremos precisar dos pacotes a seguir. Então, antes de iniciar, realizem a instalação dos pocotes e o carregamento dos mesmos, como instruído no código a seguir.
Antes de darmos início ao trabalho, vamos conferir se estamos trabalhando no diretório correto (pasta de trabalho).
## [1] "C:/ARQUIVOS COMPUTADOR/DOUTORADO/APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS"
Com os pacotes instalados e carregados, vamos carregar a imagem orbital para prática de hoje, referente a uma área de interesse recortada no MultiSpec. A imagem orbital original é aquela que usamos nas práticas anteriores (proveniente do acervo do INPE), aqui focaremos em uma área menor para reduzir o número de pixels na nossa análise. Portanto, utilizaremos o arquivo area_de_interesse.tif e para o carregamento aplicaremos a função será raster().
#Carregamento da imagem orbital
area_de_interesse <- raster("area_de_interesse.tif")
plot(area_de_interesse, col = gray.colors(256), main = "Imagem Orginal da area de interesse")Com a imagem carregada, vamos dividir nosso processo de acordo com os filtros tratados na introdução. O primeiro será o passa alta. Para realizar a filtragem passa-alta, primeiro precisamos extrair os valores dos pixels da imagem. Em seguida, aplicamos um filtro que destaca as variações de intensidade, ou seja, realça as bordas e os detalhes da imagem. Este processo envolve a aplicação de uma máscara de convolução na imagem.
Para começar, podemos usar a função as.matrix para converter a imagem raster em uma matriz e então aplicar a filtragem passa-alta usando uma máscara apropriada. Vamos prosseguir com a extração dos valores colorimétricos e a aplicação do filtro passa-alta.
# Converter a imagem em uma matriz
matriz_pixels <- as.matrix(area_de_interesse)
# Verificar as dimensões da matriz (altura x largura x número de canais)
dim(matriz_pixels)## [1] 753 737
Através do resultado da função dim(), observamos que a imagem tem dimensões de 753 pixels de altura por 737 pixels de largura. Agora podemos continuar aplicando o filtro passa-alta. Vamos definir uma máscara de convolução apropriada para realçar as bordas e detalhes na imagem. Posteriormente, vamos criar uma função para que a convolução seja aplicada a cada um dos pixels da imagem que estamos analisando. Após a criação da máscara de convolução, vamos aplicá-la a imagem referente a nossa área de interesse.
# Definir uma máscara de convolução para filtragem passa-alta
mascara_passa_alta <- matrix(c(-1, -1, -1, -1, 8, -1, -1, -1, -1), nrow = 3)
# Criar uma função para aplicar a convolução
filtro_passa_alta <- function(x) {
sum(x * mascara_passa_alta)
}
# Aplicar a filtragem passa-alta usando a função focal
img_filtrada_passaalta <- focal(area_de_interesse, w = mascara_passa_alta, fun = filtro_passa_alta)Após a filtragem passa-alta da imagem orbrital que estamos trabalhando, vamos comparar o resultado obtido.
par(mfrow=c(1,2))
plot(area_de_interesse, col = gray.colors(256), main = "Imagem Original")
plot(img_filtrada_passaalta, col = gray.colors(256), main = "Imagem Filtrada (Passa-Alta)")No segundo momento, vamos aplicar a filtragem passa-baixa usando a técnica da média. Isso suavizará a imagem, removendo detalhes finos e ruídos. A filtragem passa-baixa de média consiste em substituir o valor de cada pixel na imagem pela média dos valores dos pixels em sua vizinhança. Vamos definir o tamanho da vizinhança (também chamado de tamanho do kernel) e calcular a média para cada pixel. Depois vamos criar a função para a filtragem passa-baixa de média e na sequência realizar a filtragem
# Definir o tamanho do kernel para a filtragem passa-baixa de média
tamanho_kernel <- 3 # Por exemplo, um kernel de 3x3
# Função para realizar a filtragem passa-baixa de média
filtro_passa_baixa_media <- function(x) {
return(mean(x))
}
# Aplicar a filtragem passa-baixa usando a função focal
img_filtrada_passabaixamedia <- focal(area_de_interesse, w = matrix(1, nrow = tamanho_kernel, ncol = tamanho_kernel), fun = filtro_passa_baixa_media)Agora vamos comparar nossa imagem original à imagem filtrada pela passa-baixa de média
par(mfrow=c(1,2))
plot(area_de_interesse, col = gray.colors(256), main = "Imagem Original")
plot(img_filtrada_passabaixamedia, col = gray.colors(256), main = "Imagem Filtrada (Passa-Baixa de Media)")E finalmente vamos focar no filtro passa-baixa de mediana. Essa técnica é útil para remover ruídos da imagem, preservando melhor as bordas e detalhes do que a filtragem passa-baixa de média. Para realizar a filtragem passa-baixa de mediana, vamos definir uma vizinhança em torno de cada pixel, calcular a mediana dos valores dos pixels nessa vizinhança e atribuir esse valor ao pixel central. Vamos usar a função focal() do pacote raster para aplicar a filtragem. Para tal, vamos reutizar tamanho_kernel <- 3 para a função. Posteriormente vamos construir a função para a filtragem e, na sequência, filtrar nossa imagem original.
# Função para realizar a filtragem passa-baixa de mediana
filtro_passa_baixa_mediana <- function(x) {
return(median(x))
}
# Aplicar a filtragem passa-baixa usando a função focal
img_filtrada_passabaixa_mediana <- focal(area_de_interesse, w = matrix(1, nrow = tamanho_kernel, ncol = tamanho_kernel), fun = filtro_passa_baixa_mediana)Agora vamos comparar nossa imagem original à imagem filtrada pela passa-baixa de mediana
par(mfrow=c(1,2))
plot(area_de_interesse, col = gray.colors(256), main = "Imagem Original")
plot(img_filtrada_passabaixa_mediana, col = gray.colors(256), main = "Imagem Filtrada (Passa-Baixa de Mediana)")Com isso, encerramos nossa prática sobre filtragem passa-alta, passa-baixa de média e passa baixa de mediana. Vimos como estes filtros podem ser aplicados no R e como as imagens geradas são filtradas. Até a próxima aula.
ANDERSON, E. C. Making Maps with R Â: Reproducible Research. GitHub, 2021. Disponível em: https://eriqande.github.io/rep-res-web/lectures/making-maps-with-R.html.
CHAMBERS, J. M. Extending R. CRC Press, 364p., 2017. ISBN: 9781498775724.
DA SILVA, F. R.; GONÇALVES-SOUZA, T.; PATERNO, G. B.; PROVETE, D. B.; VANCINE, M. H. Análises ecológicas no R. Recife, PE: Nupeea, 1ª ed., 640p., 2022. ISBN: 9788579175640. Disponível em: https://analises-ecologicas.com/.
GAUTHIER, N. Anthromes 12K DGG (V1) analysis code and R research compendium. Harvard Dataverse, 2021. DOI: https://doi.org/10.7910/DVN/6FWPZ9.
LOVELACE, R. Introduction to visualizing spatial data in R. 2017. Disponível em:https://github.com/Robinlovelace/Creating-maps-in-R.
LOVELACE, R., NOWOSAD, J., & MUENCHOW, J. Geocomputation with R. Chapman and Hall/CRC, 353p., 2019. Disponível em: https://www.routledge.com/Geocomputation-withR/Lovelace-Nowosad-Muenchow/p/book/9780367670573
MACHLIS, S. Create maps in R in 10 (fairly) easy steps. Computerworld, 2017. Disponível em: https://www.computerworld.com/article/3038270/create-maps-in-r-in-10-fairly-easy-steps.html.
MARTOS, G. Cluster Analysis with R. 2021. Disponível em: https://rstudio-pubsstatic.s3.amazonaws.com/33876_1d7794d9a86647ca90c4f182df93f0e8.html.
MENESES, P. R.; ALMEIDA, T. D.; ROSA, A. N. D. C. S.; SANO, E. E. et al. Introdução ao Processamento de Imagens de Sensoriamento Remoto. Brasília: UnB-CNPq, 276 p., 2012.
MORENO, M. & BASILLE, M. Drawing beautiful maps programmatically with R, sf and ggplot2 - Part 1: Basics. 2021. Disponível em: https://r-spatial.org/r/2018/10/25/ggplot2-sf.html.
MUENCHOW, J.; SCHRATZ, P.; BRENNING, A. RQGIS: Integrating R with QGIS for Statistical Geocomputing. The R Journal, 9, n. 2, p. 409-428, 2017 2017. Doi: https://doi.org/10.32614/RJ-2017-067.
NOVIA, D. Cluster Analysis in R: Tips for Great Analysis and Visualization. Datanovia, 2018.Disponível em: https://www.datanovia.com/en/blog/cluster-analysis-in-r-simplified-and-enhanced/.
PEBESMA, E.; BIVAND, R. Spatial Data Science: With Applications in R. Chapman and Hall/CRC, 1ª ed., 314p., 2023. Doi: https://doi.org/10.1201/9780429459016.
R-BLOGGERS. Cluster Analysis in R. 2021. Disponível em: https://www.rbloggers.com/2021/04/cluster-analysis-in-r/.
STANIAK, M.; BIECEK, P. The Landscape of R Packages for Automated Exploratory Data Analysis. The R Journal, v. 11, n. 2, 23 p., 2019. Disponível em: https://arxiv.org/pdf/1904.02101.
VENABLES, W. N.; SMITH, D. M. An Introduction to R. R Core Team, 2017. Disponível em: http://colinfay.me/intro-to-r/#.
WICKHAM, H. Advanced R. CRC Press, 2ª ed., 2022. Disponível em: https://advr.hadley.nz/#license
:::