Capítulo 1 Introdução

O Processamento Digital de Imagens (PDI) é uma atividade que vem sendo desenvolvida desde a criação da imagem digital em si. Sendo um ramo da computação, são aplicados diversos algoritmos para a extração informações ou subprodutos das imagens analisadas, de forma que todo o potencial destas possa ser utilizado. Diferentemente do Processamento Analógico de Imagens (PAI), os algorítimos empregados tendema ter baixo teor de subjetividade, o que garante uma maior independência de iterações humanas e por consequente uma menor taxa de erros inerentes a processos manuais.

Uma grande vantagem do PDI é o menor tempo necessário em relação ao PAI para a execução de tarefas morosas, como a calibração das imagens, assim como a extração de feições - sendo a segunda uma tarefa altamente subjetiva. Uma das desvantagens do PDI, em relação ao processamento analógico, é a dificuldade de implementação de ferramentas capazes de realizar tarefas complexas feitas facilmente pela capacidade humana de reconhecer padrões e atribuir significados a eles. Felizmente, com o avanço no ramo da visão computacional, tais técnicas estão sendo melhoradas ao ponto de serem comparáveis às de um analista humano, apresentando resultados aceitáveis aliados à falta de subjetividade e rápido tempo de execução.

Neste texto serão abordados os processos de filtragem de imagens digitais, morfologia matemática, limiarização, e detecção de bordas. Tais processos do PDI são largamente utilizados no âmbito das imagens orbitais para o pré-processamento e extração de feições. Para entender melhor como são implementados os algoritmos de PDI, é necessário antes entender a anatomia de uma imagem digital, o que é discutido no próximo tópico.

1.1 Imagem Digital

De acordo com (R. C. GONZALEZ 2010), uma imagem pode ser definida como:

“Uma função bidimensional, \(f(x,y)\), em que \(x\) e \(y\) são coordenadas espaciais (plano), e a amplitude de \(f\) em qualquer par de coordenadas \((x,y)\) é chamada de intensidade ou nível de cinza da imagem nesse ponto.” (R. C. GONZALEZ 2010)

Gonzalez também diz que quando \(x\) e \(y\), além dos valores de intensidade de \(f\) são quantidades finitas e discretas, chama-se então a imagem de imagem digital. A grosso modo, pode-se definir uma imagem digital como o conjunto de dados matriciais, onde cada índice possui seu correspondente valor de nível de cinza, discretizado a partir de um modelo contínuo.

O processo de discretização para a criação de uma imagem é descrito por (A. E. SCURI 2002) em 4 etapas diferentes: Imagem Contínua, Amostragem, Quantização, e Codificação.

Passos para a dicretização de uma imagem de acordo com [@scuri]. (a) Imagem Contínua, (b) Amostragem, (c) Quantização, e (d) Codificação.

Figura 1.1: Passos para a dicretização de uma imagem de acordo com (A. E. SCURI 2002). (a) Imagem Contínua, (b) Amostragem, (c) Quantização, e (d) Codificação.

A Figura 1.1 (a) representa a Imagem Contínua, formada pelos raios de luz que passam pelos sensores do aparelho obturador da imagem. Já (b) representa o Padrão de Amostragem de tal aparelho. Para captar todos os detalhes da Imagem Contínua, seriam necessárias infinitas divisões do sensor imageador, inviabilizando a construção destes. Desta forma, escolhe-se intervalos para a divisão, de forma a captar o máximo dos detalhes relevantes da cena. Em (c), que é a etapa de Quantização, ocorre a obtenção dos níveis de cinza correspondentes aos raios capturados pelo obturador, normalmente uma média daqueles que atingem cada célula a ser quantizada. Neste modelo, cada célula gera um pixel com um nível de cinza distinto para seu índice correspondente. Por fim em (d) há a Codificação dos níveis de cinza capturados, gerando assim um arquivo digital para a imagem. Este arquivo pode ser interpretado como uma matriz onde cada termo é o valor do nível de cinza correspondente à posição em que está armazenado.

Pelo processo descrito anteriormente, tem-se como produto uma imagem em tons de cinza - para a criação de imagens coloridas faz-se normalmente a combinação de três imagens em tons de cinza, correspondentes à diferentes intervalos do espectro de cores. O mais comum é usar três diferentes componentes que captam a luz nos intervalos do vermelho, verde e azul (RGB) (O. MARQUES FILHO 1999).

Sensores imageadores orbitais normalmente possuem câmeras multiespectrais, ou seja, conseguem adquirir imagens da superfície terrestre correspondentes a diferentes faixas do espectro de ondas eletromagnéticas, e não apenas da faixa do espectro visível. Realizando a combinação de imagens oriundas destas diferentes faixas além do visível, torna-se então possível a distinção de diferentes objetos que utilizando apenas o padrão RGB seriam de difícil diferenciação devido ao diferente comportamento espectral destes objetos, como por exemplo a distinção de gramíneas de vegetação de mata, ambas verdes no RGB.

1.2 Processamento de Imagens Digitais (PDI)

O Processamento Digital de Imagens pode ser subdividido em 10 diferentes passos fundamentais (R. C. GONZALEZ 2010): Aquisição de Imagens, Filtragem e Realce de Imagens, Restauração de Imagens, Processamento de Imagens Coloridas, Wavelets e Processamento Multirresolução, Compressão, Processamento Morfológico, Segmentação, Representação e Descrição, e Reconhecimento de Objetos. A Figura 1.2 retirada do livro Processamento Digital de Imagens (R. C. GONZALEZ 2010), representa a relação destes passos com os resultados alcaçados por eles.

Passos fundamentais do PDI, definidos por Gonzalez e Woods. Fonte: [@gonzalez].

Figura 1.2: Passos fundamentais do PDI, definidos por Gonzalez e Woods. Fonte: (R. C. GONZALEZ 2010).

No âmbito das imagens orbitais todos estes passos são amplamente utilizados. Exemplos a serem dados podem ser as operações de filtragem empregadas para a remoção de ruídos das cenas, ou a compressão das fotografias, dada a grande área coberta pelo sensor aliada à necessidade de imagens com riqueza de detalhes.

1.3 Julia Language

Os algoritmos empregados em PDI se tratam, por vezes, de operações algébricas, dada a natureza matricial das imagens digitais. Esta característica dos algoritmos, aliada ao quão grande a quantidade de dados em uma só cena orbital pode ser, torna necessária a utilização de máquinas computadoras com grande capacidade de processamento, assim como a escolha de uma linguagem de programação eficiente. Uma linguagem que vem se destacando quanto à eficiência na execução de diferentes tipos de algoritmos é a Julia, que ainda possui a vantagem de ser open source.

Julia é uma linguagem de programação dinâmica de alto nível e de alta performance para computação numérica, e como dito anteriormente gratuita e open source. Apesar de ainda estar em sua versão beta (versão 0.6.2 em 02/01/2018), a linguagem já se mostra robusta e algumas vezes até mesmo mais rápida que C ou Python, referências em alta velocidade no ramo da programação. O sistema Julia disponibiliza um compilador sofisticado, execução paralela distribuída, acurácia numérica, e uma biblioteca extensiva de funções matemáticas (JULIA 2018). A Figura 1.3 traz a logo da linguagem de programação.

Logo oficial da linguagem de programação Julia. Fonte: [@julia].

Figura 1.3: Logo oficial da linguagem de programação Julia. Fonte: (JULIA 2018).

A linguagem de programação Julia e todo o seu ambiente de desenvolvimento foi visionada para ser uma linguagem completa (J. BEZANSON 2012):

“Nós queremos a velocidade do C com o dinamismo do Ruby. […] Nós queremos algo tão usável quanto o Python para programação geral, tão fácil para estatística quanto o R, tão natural para o processamento de strings quanto Perl, tão poderoso para álgebra linear como o MATLAB.”

Desta forma, a linguagem Julia foi estabelecida para competir com outras opções disponíveis, tentando sempre manter uma vantagem na eficiência ao executar algoritmos. (J BEZANSON 2017) realizaram testes para comparar os tempos de execução para diferentes algoritmos de processamento de dados em Julia e também em outras linguagens. A Figura 1.4 mostra o resultado do tempo de execução de alguns algoritmos implementados em diferentes linguagens de programação em comparação à Julia (J BEZANSON 2017).

Comparação do desempenho de várias linguagens de programação executando micro benchmarks simples. Tempo de execução relativo ao C (quanto menor, melhor. Tempo de execução em C = 1. Fonte: [@bezanson2017].

Figura 1.4: Comparação do desempenho de várias linguagens de programação executando micro benchmarks simples. Tempo de execução relativo ao C (quanto menor, melhor. Tempo de execução em C = 1. Fonte: (J BEZANSON 2017).

Como pode ser visto na Figura 1.4, a linguagem de programação Julia possui um potencial superior às outras opções comparadas, o que aliado à facilidade e gratuidade da instalação de diferentes pacotes adicionais (semelhante ao R), a torna uma opção altamente atrativa para o processamento de imagens digitais orbitais.

1.4 Exercícios

  1. Defina o que é PDI e quais suas aplicações.

  2. Quais as 4 etapas da aquisição de uma imagem? (descreva cada uma de acordo com o seu entendimento)

  3. Qual a diferença computacional entre imagens preto e branco para imagens coloridas?

  4. Uma imagem binária é composta apenas por pixels com valores iguais a 0 e 1. A que cor corresponde o 0 e a que cor corresponde o 1?

  5. Programas escritos na linguagem de programação Julia são compilados ou executados? Comente.

  6. Considere a seguinte tabela:

0.98 0.10 0.89
0.03 0.91 0.11
0.78 0.00 0.99

Considerando que o maior valor do pixel para uma imagem seja 1, e que o menor seja 0, qual letra do alfabeto é formada interpretando os valores da tabela como níveis de cinza?

  1. Quais as vantagens do Processamento Digital de Imagens (PDI) com relação ao Processamento Analógico de Imagens (PAI)?

References

R. C. GONZALEZ, R. C. WOODS. 2010. Processamento Digital de Imagens. 3ª Edição. São Paulo, São Paulo: Pearson Prentice Hall.

A. E. SCURI. 2002. Fundamentos Da Imagem Digital. 1ª Edição. Rio de Janeiro, Rio de Janeiro: Tecgraf/PUC-Rio.

O. MARQUES FILHO, H. VIEIRA NETO. 1999. Processamento Digital de Imagens. 1ª Edição. Rio de Janeiro, Rio de Janeiro: Brasport.

JULIA. 2018. The Julia Language. https://Julialang.org/.

J. BEZANSON, V. SHAH, S. KARPINSKI. 2012. “Why We Created Julia.” https://Julialang.org/blog/2012/02/why-we-created-Julia.

J BEZANSON, V. SHAH, S. KARPINSKI. 2017. “Julia: A Fast Dynamic Language for Technical Computing” Vol. 59 (No. 1). Society for Industrial; Applied Mathematics.