Você está na página 1de 16

Processamento digital de imagens com software livre

Processamento digital de
imagens com software livre
Módulo 1: Introdução

Thiago Statella
statella.thiago@ifmt.edu.br
Processamento digital de imagens com software livre

Sumário

1 Afinal, o que é uma imagem digital? .................................................................... 1

1.1 Imagens monocromáticas................................................................................. 1

1.2 Imagens coloridas ................................................................................................ 2

1.3 Representação computacional de imagem ................................................ 3

2 GNU Octave ................................................................................................................... 5

2.1 Interface Gráfica de Usuário ............................................................................. 5

2.2 Criando o primeiro programa no Octave .................................................... 6

2.3 Classes de dados no Octave .......................................................................... 11

2.4 Operações matemáticas .................................................................................. 12

2.5 Obtendo Ajuda! .................................................................................................. 13

Bibliografia ....................................................................................................................... 14

1
Processamento digital de imagens com software livre

1 Afinal, o que é uma imagem digital?

Neste módulo, veremos definição de imagem digital, de processamento

digital de imagens e uma apresentação ao software GNU Octave.

1.1 Imagens monocromáticas

Uma imagem pode ser definida como uma função 𝑓(𝑥, 𝑦), em que as

variáveis independentes 𝑥 e 𝑦 são coordenadas espaciais (domínio) e o valor de


𝑓(𝑥, 𝑦) (contradomínio) define a intensidade luminosa, ou nível de cinza, da

imagem em (𝑥, 𝑦). Se 𝑥, 𝑦 ∈ ℤ2 e 𝑓(𝑥, 𝑦) ∈ ℤ+ , isto é, se forem quantidades finitas


e discretas, então 𝑓 é uma imagem digital e cada um de seus elementos é

chamado de pixel. A imagem digital definida desta maneira é chamada


monocromática, ou em níveis de cinza. A figura 1.1 mostra uma imagem desse

tipo.

Fig. 1.1 – Imagem monocromática (3.644 linhas por 3.478 colunas)

1
Processamento digital de imagens com software livre

A escala de níveis de cinza que cada pixel na cena pode receber é


determinada por sua resolução radiométrica. Por exemplo, uma imagem com

resolução radiométrica de 8 bits pode apresentar até 28 = 256 níveis de cinza,


variando do 0 (preto) ao 255 (branco) ou, expressando em notação de intervalo,

podemos escrever [0, 255]. Esta é a resolução radiométrica da maioria das


câmeras compactas, mas existem várias outras possibilidades, como 210, 212 etc.

1.2 Imagens coloridas

O nível de cinza de cada pixel guarda uma relação linear com a energia

eletromagnética refletida do objeto naquela posição. Objetos que refletem mais,


aparecem mais claros nas imagens, e aqueles que refletem menos, aparecem mais

escuros.
A aparência de uma imagem depende, também, do filtro utilizado.

Câmeras digitais compactas registram a energia eletromagnética refletida dos


objetos com três filtros: azul, verde e vermelho. São produzidas, portanto, três

cenas (também chamadas bandas ou canais) que, combinadas, resultam numa


imagem colorida.

A figura 1.2 mostra uma imagem colorida e suas bandas em separado. No


processo de composição, à cada uma delas é atribuída uma escala de cor: azul

(B), verde (G) e vermelha (R). Por clareza, a partir deste ponto a seguinte

convenção será adotada: os canais, ou faixas espectrais, serão referenciados pelos


seus nomes, como exemplo, canal azul, canal verde etc.; e as cores atribuídas aos

canais serão referenciadas como Blue (B), Green (G) e Red (R).

2
Processamento digital de imagens com software livre

Fig. 1.2 –Bolinhas coloridas e suas bandas. A: imagem colorida; B: canal azul; C:

canal verde; D: canal vermelho.

Note que as bolas azuis, verdes e vermelhas aparecem mais claras em seus
respectivos canais!

As câmeras digitais compactas empregam um filtro Bayer. Pequenos


Você sabia?

filtros de cores azul, verde e vermelha são dispostos sobre certos pixels
para obter imagens em 3 canais diferentes com uma mesma matriz de
detectores.

1.3 Representação computacional de imagem

No meio computacional, uma imagem é representada por uma matriz de

números inteiros. O número de linhas desta matriz define a altura da imagem e

3
Processamento digital de imagens com software livre

o número de colunas, sua largura. Existem muitos formatos de armazenamento


de imagem, como JPG, TIF, PNG, GIF etc.

A figura 1.3 mostra uma imagem colorida e as três primeiras linhas e


colunas das suas respectivas matrizes. O sistema de coordenadas de imagem tem

origem no canto superior esquerdo, e é contado em linhas e colunas (L, C). A cor
resultante do primeiro pixel, ou seja, o pixel na linha L = 1, coluna C = 1, será uma

mistura da luz refletida nesta posição em cada um dos canais. Como o maior valor
está associado ao canal verde (B = 16, G = 60, R = 24), a cor resultante será uma

tonalidade de verde. De fato, pode-se observar que o canto superior esquerdo


da fotografia é ocupado por um gramado!

Fig. 1.3 – Representação matricial: primeiras 3 linhas e 3 colunas dos canais azul
(B), verde (G) e vermelho (R).

4
Processamento digital de imagens com software livre

Agora que uma imagem digital foi definida, pode-se escrever que o
Processamento Digital de Imagens é a disciplina que emprega equipamentos,

técnicas e algoritmos para modificar ou de interpretar o conteúdo de imagens


digitais através de máquinas (Gonzalez e Woods, 2010).

2 GNU Octave

O GNU Octave é uma linguagem de alto nível, escrita inicialmente por John
W. Eaton em 1988 (majoritariamente em C++) para a solução de cálculos

numéricos lineares e não-lineares (Octave, 2021). O Octave é um software livre,


podendo ser redistribuído e/ou modificado sob os termos da GNU General Public

License (Licença Pública Geral GNU). O endereço oficial para instalação do


software é o site https://www.gnu.org/software/octave.

Além de ser multiplataforma (Windows, MacOS e Linux), o GNU Octave


pode ter sua funcionalidade expandida por meio de pacotes para solução de

problemas específicos. Estes pacotes estão disponíveis no Octave Forge


(https://octave.sourceforge.io). Um exemplo é o pacote image que contém uma

série de ferramentas para processamento de imagens e que será utilizado


extensivamente durante o curso.

Clique aqui para assistir a um vídeo mostrando como é feita a instalação

do GNU Octave e a verificação de pacotes instalados na versão 6.3 para Windows.

2.1 Interface Gráfica de Usuário

O Octave foi inicialmente desenvolvido sem uma interface gráfica, apenas


na forma de linhas de comando. Atualmente, ao ser instalado, o programa fica

disponível nas duas versões, uma operada em linhas de comando (CLI), e outra,
operada com uma interface gráfica (GUI). A figura 1.4 mostra a interface gráfica

5
Processamento digital de imagens com software livre

do Octave: menu de opções (1), diretório de trabalho (2), navegador de arquivos


(3), ambiente de trabalho (4), histórico de comandos (5) e abas de opções para a

janela de comandos, editor de variáveis e editor. Neste vídeo você encontrará


uma explicação mais detalhada de cada um deles.

Fig. 1.4 – Elementos da interface gráfica do Octave.

2.2 Criando o primeiro programa no Octave

Nesta atividade criaremos um pequeno programa para ler e exibir uma


imagem monocromática. Vamos verificar se o pacote de processamento de
imagens está instalado. Na Janela de Comandos, execute:

6
Processamento digital de imagens com software livre

pkg list

Como resultado, uma lista com os pacotes instalados deverá aparecer,

como na figura 1.5.

Fig. 1.5 – Pacotes instalados no Octave.

Na versão para Windows o pacote já vem instalado. Caso isso não ocorra,

ou esteja utilizando um outro sistema operacional, ou, ainda, precise reinstalar


qualquer pacote, utilize o comando:

pkg install nome_do_pacote

7
Processamento digital de imagens com software livre

Para carregar qualquer um dos pacotes instalados, utilize o seguinte


comando:

pkg load nome_do_pacote

Certifique-se de ter baixado a pasta Banco_de_Imagens para seu


computador. Em seguida, navegue até ela pelo browser da GUI (Fig. 1.4, balão 2).

A lista com as imagens da pasta deverá aparecer no navegador de arquivos (Fig.


1.4, balão 3). Nosso programa será escrito na aba Editor (Fig. 1.4, balão 3). Ao

acessar o editor pela primeira vez, você deverá encontrar um documento em


branco.

Fig. 1.6 – Espelho de script para leitura, visualização e gravação de imagem.

Você sempre pode abrir um novo arquivo clicando em Novo Script (fig.
1.6, balão 1) ou seguindo o caminho:

Arquivo -> Novo Script

8
Processamento digital de imagens com software livre

Você também pode abrir um arquivo existente clicando no ícone


apresentado no balão 2 da fig. 1.6. No documento em branco, escreva os

comandos como na fig. 1.6. Note as linhas em verde precedidas pelo símbolo de
porcentagem %. Estas linhas são comentários e não influenciarão nosso

programa. Comentários são opcionais, mas é altamente recomendável que você


sempre comente seus programas. O comando na linha 2 serve para carregar o

pacote de processamento de imagens. Na linha 5, o comando imread lê o arquivo


menina_cinza.jpg e o converte no formato proprietário do Octave, atribuindo-o

à variável img. A partir de agora, nossa imagem está armazenada nesta variável.
Em seguida, na linha 8, passamos dois comandos separados por vírgula, um para

abrir uma figura (figure), e outro para exibir (imshow) o conteúdo da variável na
tela. Perceba que os comandos têm notação funcional, isto é, as funções imread

e imshow requerem argumentos! No primeiro caso, o argumento é o nome do


arquivo de imagem. No segundo, é a variável img. A fig. 1.7 mostra a estrutura

geral de comandos que usaremos.

Fig. 1.7 – Estrutura geral de comandos.

Note o emprego do ponto e vírgula após alguns comandos. Isso é feito


Você sabia?

para suprimir a saída do comando no monitor. Isso é especialmente


importante quando estamos processando imagens. Caso você se
esqueça de usar o ponto e vírgula, pressione Ctrl + c no teclado para
interromper a tarefa.

9
Processamento digital de imagens com software livre

Após escrever os comandos, salve o script clicando no ícone indicado no


balão 3 da figura 1.6, ou, alternativamente, use o caminho:

Arquivo -> Salvar Arquivo Como

Não utilize espaços, acentos e outros caracteres especiais no nome do


arquivo ou ele não funcionará. Para executar o script, clique no ícone indicado

pelo balão 4 da figura 1.6 ou use o caminho:

Executar -> Save File and Run/Continue


Você sabia?

Você também pode usar a tecla de atalho F5 (no Windows) ou escrever


o nome do seu script na janela de comandos e pressionar Enter para
executá-lo.

O resultado deve ser como o da figura 1.8.

Fig. 1.8 – Resultado do primeiro script.

10
Processamento digital de imagens com software livre

Verifique que na pasta Banco_de_Imagens aparecerá um novo arquivo,


com nome menina_cinza.tif.

2.3 Classes de dados no Octave

Esta é uma boa altura para comentarmos sobre classes de dados do

Octave. São elas: logical, string, char, numeric, table, cell e struct. A classe
numérica admite as especializações: números inteiros positivos (uint8, uint16,

uint32 e uint64), inteiros positivos e negativos (int8, int16, int32 e int64) e


representações em ponto flutuante de precisão simples (single) e dupla (double).

A tabela 1 mostra os intervalos de cada um dos tipos numéricos.

Tabela 1 – Tipos de dados numéricos.


Tipo Intervalo

Uint8 [0, 28-1]

Uint16 [0, 216-1]

Uint32 [0, 232-1]

Uint64 [0, 264-1]

Int8 [-27, 27-1]

Int16 [-215, 215-1]

Int32 [-231, 231-1]

Int64 [-263, 263-1]

Single [-2x1038, -2x10-38], [2x1038, 2x10-38]

Double [-2x10308, -2x10-308], [2x10308, 2x10-308]


Você sabia?

Uma imagem digital é uma matriz de números inteiros. No Octave, antes


de fazermos qualquer operação matemática com imagens, devemos
convertê-la de inteiros para double usando a função double().

11
Processamento digital de imagens com software livre

Pode-se obter informação sobre o tipo de dado de uma variável por meio
do comando:

typeinfo(img)
↳ ans = uint8 matrix

O retorno do comando acima informa que nossa variável img é uma matriz

do tipo uint8. O Octave trabalha essencialmente com um tipo de variável

numérica: matriz. Casos especiais são escalares (matriz 1x1) e vetores (matrizes
1xn ou nx1). Para obtermos o número de linhas e colunas de uma imagem

podemos usar o comando:

whos img
↳ Attr Name Size Bytes Class

img 3644x3478 12673832 uint8

Várias outras informações sobre nossa imagem menina_cinza.jpg podem


ser acessadas pelo comando:

imfinfo(“menina_cinza.jpg”)

2.4 Operações matemáticas

As tabelas 2 e 3 listam alguns operadores aritméticos e funções mais


comuns utilizadas no Octave:
Você sabia?

No caso de operações de multiplicação, divisão e potencialização ponto


a ponto entre imagens, deve-se empregar um ponto (.) antes do
operador, por exemplo: .*, ./, e .^.

12
Processamento digital de imagens com software livre

Tabela 2 – Operadores aritméticos.


Operador Símbolo

Adição +

Subtração -

Multiplicação *

Divisão /

Potencialização ^ ou **

Tabela 3 – Funções elementares.


Função Descrição

abs(x) Retorna o valor absoluto de x

sin(x) Retorna o seno de x

cos(x) Retorna o cosseno de x

tan(x) Retorna a tangente de x

sum(x) Retorna a soma de x

2.5 Obtendo Ajuda!

Para obter ajuda sobre qualquer função, basta executar o seguinte

comando na Janela de Comandos:

help nome

Como exemplo, execute o comando help com a função imread. Outro

comando bastante útil é o lookfor. Ao executarmos:

13
Processamento digital de imagens com software livre

lookfor imread

Obteremos uma lista de todas as funções do GNU Octave que contém a

palavra-chave especificada.

Bibliografia

BOVIK, A. The Essential Guide to Image Processing. Academic Press, 2009.

EATON, J. W.; BATEMAN, D.; HAUBERG, S.; WEHBRING, R. GNU Octave – Edition
4 for Octave version 4.0.0 – Free Your Numbers, March, 2015. 966p.

Gomes, J.; VELHO, L. Computação Gráfica - Volume 1. IMPA - Instituto de


Matemática Pura e Aplicada, Rio de Janeiro, RJ-Brasil, 1998. 323p.

Gonzalez, R. C.; Woods, R. C. Processamento de Imagens Digitais. 3 ed. São Paulo:


Pearson Prentice Hall, 2010.

JAIN, A. K. Fundamentals of Digital Image Processing. Prentice Hall, 1989.

McANDREW, A. Introduction to Digital Image Processing with MATLAB®.


Thomson Course Technology, 2004. 509p. ISBN: 0-534-40011-6

Octave. https://www.gnu.org/software/octave/. Acesso em out. 2021.

OTSU, N. A threshold Selection Method from Gray-Level Histograms. IEEE


Transactions on Systems, Man and Cybernetics, v. 9, n. 1, p. 62-69, 1979.

Richards, John A. Remote Sensing Digital Image Analysis: a introduction. Springer,


1999.

Rosenfeld, A.; Kak, A. C. Digital Picture Processing, 2 ed. Nova York: Academic
Press, 1982.

SCHOTT, J.R. Remote Sensing: the image chain approach. 2 ed. New York: Oxford
University Press, 2007.

14

Você também pode gostar