Passos iniciais Matlab

Propaganda
COMANDOS BÁSICOS
VOLTADOS AO
PROCESSAMENTO DE IMAGENS
EM MATLAB
Processamento Digital de Imagens
CURSO TÉCNICO EM GEOPROCESSAMENTO
Prof. Daniel C. Zanotta
2015/1
1
1 INTRODUÇÃO
O MATLAB foi desenvolvido no início da década de 80 por Cleve Moler, no
Departamento de Ciência da Computação da Universidade do Novo México, EUA. É um
software interativo de alta performance voltado para o cálculo numérico. Integra análise
numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em
ambiente de fácil uso, onde problemas e soluções são expressos intuitivamente como eles são
escritos matematicamente, ao contrário da programação tradicional (C, C++, Java). O
MATLAB pode ser entendido como um código de programação interpretado, uma vez que
sempre é traduzido para linguagem de máquina quando executado. Essa característica pode
ser vista como uma comodidade, uma vez que torna sintaxe e comandos mais intuitivos, mas
também como uma desvantagem a medida que o código interpretado é computacionalmente
mais lento.
Figura 1.1. MATLAB R2012a.
O MATLAB caracteriza-se também por ser um sistema cujo elemento básico de
informação é uma matriz, daí surge seu nome MATrix LABoratory (Laboratório de Matrizes).
Esse sistema de organização permite a resolução de muitos problemas numéricos em apenas
uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem
Fortran, Basic ou C. A estrutura do MATLAB está toda organizada para manipular matrizes1,
tornando todas as operações matriciais mais eficientes computacionalmente. Além disso, essa
estrutura matricial dos dados é extremamente conveniente para tratamento e processamento
de dados bidimensionais, ou espaciais, como imagens.
1
Isso não impossibilita que o usuário também possa fazer procedimentos matemáticos simples ou vetoriais.
2
1.1 Inicialização do MATLAB
Figura 1.2 Tela de inicialização do MATLAB R2012a.
Quando o MATLAB é carregado, algumas janelas básicas são exibidas: a Janela de
Comando (Command Window), o Espaço de Trabalho (WorkSpace) que é onde ficam as
variáveis, a pasta de trabalho atual (Current Folder), e o Histórico de Comandos
(Command History). A Janela de Comando é ativada quando se inicializa o MATLAB, e o
"prompt" padrão (>>) é exibido na tela2.
1.2 Comandos
A partir desse ponto, o MATLAB espera as instruções do usuário. Para inserir uma matriz
pequena, por exemplo, pode-se digitar:
>> A = [1 2 3; 4 5 6; 7 8 9]
colocando-se colchetes em volta dos números e separando as linhas por ponto e vírgula.
Quando se pressiona a tecla <Enter> o MATLAB responde com:
2
O software está pronto para receber comandos quando no canto inferior esquerdo aparece a mensagem
“Ready”. Quando ele está inicializando ou executando algum comando aparece “busy” e o usuário deve
aguardar.
3
A variável “A” aparece no workspace. É importante ressaltear que todas as variáveis
(imagens, por exemplo) a serem futuramente trabalhadas devem constar no workspace.
Para fazer uma operação aritmética simples, o usuário pode teclar:
>> soma = 5 + 2
soma = 7
A variável “soma” aparece no workspace para uso futuro.
Se o usuário acrescentar o terminador ponto-e-vírgula ( ; ), o cálculo será executado e
a variável é criada/alterada no workspace, porém, o resultado não será mostrado na tela. Isso
evita que a tela fique cheia de resultados calculados previamente3. Esse procedimento é
especialmente usado em arquivos com extensão ".m" e em situações onde o resultado é uma
matriz de grandes dimensões, como imagens.
O sinal de percentagem (%), indica comentários, e não é lido como parte do comando.
>> soma = 6 + 5 % somatório de dois valores inteiros.
As teclas com setas ↑ podem ser usadas para encontrar comandos digitados
anteriormente, para execução novamente ou sua reedição. Por exemplo, suponha que seja
necessário calcular uma raiz quadrada com a função sqrt:
>> sqt(tan(pi/5))
Como o comando foi digitado incorretamente, o MATLAB responde com uma mensagem
de erro:
??? Undefined funcion or variable sqt.
Ao invés de repetir novamente a digitação da linha inteira, simplesmente pressiona-se a
tecla ↑. O comando anterior retorna, podendo-se inserir a letra "r" com maior facilidade.
>>sqrt(tan(pi/5))
ans =
0.8524
1.3 Declaração de Variáveis
Como mencionado anteriormente, o MATLAB é uma linguagem interpretada. As expressões
usadas são traduzidas pelo sistema e transformadas em linguagem de máquina. As declarações
no MATLAB são frequentemente da forma:
>> variável = expressão
3
Imagine quando um procedimento realizado com uma imagem de milhões de pixels é executado sem ponto-evírgula? Todos os pixel serão mostrados na tela dificultando a visualização.
4
ou simplesmente
>> expressão
A avaliação das expressões produzem matrizes, que são então mostradas na tela e
atribuídas às variáveis para uso futuro. Se o nome da variável e o sinal de igualdade "=" são
omitidos, a variável com o nome ans, que representa a palavra "answer" (resposta), é
automaticamente criada. Por exemplo, digite a expressão:
>> 1900 / 81
que produz:
Ans = 23.4568
Ou alternativamente:
>> V = 1900 / 81
que produz:
V = 23.4568
É importante observar que se outro comando for dado sem atribuição inicial a
nenhuma variável, o valor antigo de “ans” será substituído pelo novo.
Se a expressão é tão grande que não cabe em apenas uma linha, pode-se continuar a
expressão na próxima linha usando um espaço em branco e reticencias, ( ... ), ao final das
linhas incompletas. Por exemplo:
>> S = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/10 + 1/11 - 1/12 + 1/3 - 1/4 . . .
>> - 1/8 + 1/9 - 1/10 + 1/11 - 1/12 + 1/13;
calcula o resultado da série, atribuindo o somatório à variável “S”, mas não imprime o
resultado na tela, isto porque adicionou-se um ‘ ; ‘ ao final da expressão. Note que os espaços
em branco entre os sinais ‘=’, ‘+’ e "-" são opcionais, mas o espaço em branco entre "1/4" e
"..." é obrigatório.
As variáveis e funções podem ser formadas por um conjunto de letras, ou por um
conjunto de letras e números, onde somente os primeiros 19 caracteres do conjunto são
identificados. O MATLAB é case-sensitive, isto é, faz distinção entre letras maiúsculas e
minúsculas, assim a e A não são as mesmas variáveis. Todas as funções devem ser escritas
em letras minúsculas: inv(A) calcula a inversa de A, enquanto INV(A) é uma função
indefinida, não existe.
Execute algumas expressões como:
>> A = 5 + 2
>> B = A + 3
>> C = A + B;
>> D = B / C
>> P = (10*A) – (2 / C)*3
Note que todas as novas variáveis criadas vão sendo automaticamente salvas no
workspace. Experimente também criar algumas matrizes:
M = [ 1 2 3; 4 5 6; 7 8 9]
5
N = [ 1 1 1; 2 2 2; 3 3 3]
1.4 Números e Expressões Aritméticas
A notação decimal convencional com ponto decimal opcional e o sinal de menos é usada
para números (observe que um números com virgulas, assim como nas calculadoras, são
representados com ponto). A potência de dez pode ser incluída como um sufixo. A seguir são
mostrados alguns exemplos de números aceitos:
3
-99
0.00001
9.6374586
1.602E-20
6.06375e23
As expressões podem ser construídas usando-se os operadores aritméticos básicos e as regras
de precedência:
1
^
Exponenciação
2
sqrt()
Raiz quadrada
3
/
Divisão a direita
4
\
Divisão a esquerda
5
*
Multiplicação
6
+
Adição
7
-
Subtração
Deve-se notar que existem dois símbolos para divisão: as expressões 1/4 e 4\1 possuem o
mesmo valor numérico, isto é, 0,25. Parênteses são usados em sua forma padrão para
delimitar a atuação dos operadores aritméticos. Não existem colchetes e chaves, apenas
parênteses em diversos níveis.
2 FUNÇÕES
O MATLAB possui um conjunto extenso de funções incluídas nas mais diversas
bibliotecas internas (MATLAB TOOLBOX), que são na realidade arquivos com a extensão
6
‘.m’ criados a partir das funções intrínsecas4. A biblioteca externa pode ser constantemente
atualizada à medida que novas aplicações são desenvolvidas por você.
As categorias gerais de funções matemáticas disponíveis no MATLAB incluem:
 matemática elementar;
 matemática avançada;
 matrizes elementares;
 matrizes especiais;
 decomposição e fatoração de matrizes;
 polinômios;
 solução de equações diferenciais;
 equações não-lineares e otimização;
 derivação e integração numérica;
 análise de dados;
 análise estatística;
 ferramentas para mapas
 processamento de sinais;
 processamento de imagens.
2.1 Arquivos ‘.m’ (ambiente de programação)
Os comandos do MATLAB são normalmente digitados na Comand Window, onde uma
única linha de comando é introduzida e processada imediatamente. O MATLAB é também
capaz de executar sequências de comandos armazenadas em arquivos. Os arquivos que
contêm as declarações do MATLAB são chamadas arquivos ‘.m’, e consistem de uma
sequências de comandos normais do MATLAB, possibilitando incluir outros arquivos ‘.m’
escritos no formato texto (ASCII).
Na Janela de Comando do MATLAB selecione New M-File para criar um novo arquivo
ou Open M-File para editar um arquivo já existente, a partir do menu File. Os arquivos
podem também ser editados fora do MATLAB utilizando qualquer editor de texto (como o
bloco de notas). Vale notar que ao se editar o arquivo ‘.m’ no editor padrão do Matlab, o
usuário contará com uma série de codificações em forma de cores que auxiliarão a diferenciar
funções, variáveis e operadores lógicos.
2.2 Toolbox de Processamento de Imagens
A toolbox de processamento de imagens do MATLAB conta com os mais variados
procedimentos aplicados no processamento digital de imagens para as mais diversas
4
Estas funções são criadas por desenvolvedores profissionais e atualizadas a cada nova versão do MATLAB.
7
aplicações. Um dos principais motivos da utilização do MATLAB por diversos segmentos da
ciência e do mercado de trabalho voltado à utilização de imagens é a qualidade e utilidade do
toolbox de processamento de imagens. Seguem abaixo alguns exemplos de comandos básicos
desta toolbox:
 imread = (‘filename’, ‘fmt’) lê uma imagem do arquivo especificado pelo nome
do arquivo string.
Se o arquivo não está na pasta atual (aquela cujo caminho foi apontado em current folder), ou
em uma pasta no caminho MATLAB, especificar o caminho completo
((‘C:/Arquivos/.../filename’, ‘fmt’)). É possível também abrir uma imagem
simplesmente arrastando o arquivo para dentro do workspace com maior facilidade.
O fmt especifica o formato do arquivo, sua extensão de arquivo padrão. Por exemplo,
especifique 'gif' para arquivos de formato Graphics Interchange. Existe uma lista de
formatos suportados, com suas extensões de arquivo, digite imformats para conhecer.
O valor de retorno A é uma matriz que contém os dados de imagem importada para o
workspace do MATLAB. Se o arquivo contém uma imagem em tons de cinza, A é uma matriz
M-por-N, onde M é o número de linhas e N o número de colunas da imagem. Se o arquivo
contém uma imagem truecolor (com cores vermelho, verde e azul5), A é uma matriz M-por-Npor-3. Se o arquivo for uma imagem de satélite, por exemplo, que possui mais de 3 camadas,
A é uma matriz M-por-N-por-K, sendo K o número de camadas.
 imshow (I) exibe a imagem.
imshow (I)
exibe a imagem em tons de cinza6 I
imshow (RGB (:,:,ki:kf) exibe uma imagem em cor verdadeira RGB. Os dois
primeiros “ : ” indicam que todas as linha e todas as colunas da imagem, respectivamente,
serão mostradas. Ki indica a banda inicial e kf indica a banda final. É importante lembrar que,
mesmo que as imagens contenham mais de 3 bandas (o que é muito comum), os programas
conseguem mostrar em tela apenas composições coloridas de 3 dessas bandas.
imwrite
(A, ‘nome de arquivo’, ‘fmt’) escreve a imagem A para o arquivo
especificado pelo nome do arquivo no formato especificado pelo fmt.
A
pode ser uma matriz M-por-N (escala de cinza da imagem) ou M-por-N-por-3 (imagem em
cor verdadeira), mas não pode ser uma matriz vazia. Para arquivos TIFF, A pode ser uma
matriz M-por-N-por-K, onde K é o número de bandas da imagem.
nome do arquivo
é uma string que especifica o nome do arquivo de saída.
fmt
pode ser qualquer uma das cadeias de texto listados na tabela de tipos de imagens
suportados.
3 CLASSES DE DADOS
Assim que a imagem é aberta no workspace do MATLAB, é possível verificar a classe dos
dados do arquivo. Pixels são geralmente representadas por números inteiros e positivos, ou
5
6
(RED, GREEN e BLUE).
Também chamada de Níveis de Cinza ou Monocromática.
8
seja, 1, 2, 3, 4, 5, e assim por diante. Essa formatação dos dados confere um tamanho menor
ao arquivo que contém a imagem. Por exemplo, se a imagem tem 8 bits, significa que 28 =
256 e ela poderá assumir apenas 256 níveis diferentes de coloração (de 0 até 255)7, ou níveis
de cinza entre o branco puro e o preto puro. Imagens de Sensoriamento Remoto usualmente
possuem 8 bits. Se a imagem possuir 16 ou 24 bits, seus níveis de cinza conterão 216 = 65536
e 224 = 167772168, respectivamente. Obviamente a imagem contará com um detalhamento
maior, mas o tamanho computacional de cada pixel aumentará de acordo o seu valor em bits.
Esse valor (8, 16, 24) é conhecido como a resolução radiométrica da imagem. O MATLAB
representa essa estruturação de dados por uint8 (Inteiros 8 bits) ou uint16 (Inteiros 16 bits),
por exemplo.
Quanto maior o número de bits, maior é a quantidade de níveis de cinza e melhor é a
resolução:
Figura 3.1 Correspondência entre número de bits e qualidade da imagem. Fonte:
CEPSRM-UFRGS.
Para a manipulação da imagem através de operações matemáticas, é preciso “quebrar” essa
formatação padrão para permitir que os cálculos possam ser feitos (ex: valor do pixel 53/2 =
26,5). Uma classe de dados que pode assumir valores fracionários é a classe double. A classe
double pode assumir qualquer valor Real entre menos infinito e mais infinito. Em
7
8
Onde 0 representa o preto e 255 representa o branco.
Nesse caso, 0 representa o preto e 16777216 representa o branco.
9
processamento de imagens é muito comum trabalhar com os dados na classe double, uma vez
que esta classe permite a manipulação completa dos dados sem restrições. Portanto, essa é a
classe de dados que devemos trabalhar em PDI9. A figura abaixo mostra a origem dessas
classes dentro do conjunto matemático dos números:
Figura 3.4 Exemplificação de onde se encontram os valores das imagens no conjunto
matemático dos números
Comandos comumente utilizados para transferência entre classes de dados no MATLAB:
 double (x) : Converte os dados (x) de qualquer classe para a classe double, números
fracionários positivos ou negativos.
 uint8(x): Converte os dados (x) de qualquer classe para a classe uint8, inteiros
positivos de 0 a 255.
 uint16 (x): Converte os dados (x) de qualquer classe para a classe uint16, inteiros
positivos de 0 a 65536
Ao mesmo tempo que é importante trabalhar com as imagens no formato double dentro do
MATLAB, é necessário converter a mesma para uint8 ao final dos processos antes de gravar.
Assim, outros softwares poderão ler a imagem processada sem maiores problemas.
 Muito importante:
Ao visualizar alguma imagem na tela, a função imshow(img) pode variar dependendo do tipo
de classe da imagem. Por exemplo, para o MATLAB, se a imagem estiver na classe uint8,
entende-se que ela possui valores variando de 0 até 255, e a função imshow desta imagem
mostrará o valor 0 como preto e o valor 255 como branco. Os demais valores intermediários
receberão diferentes níveis de cinza de acordo com o seu valor. Se por acaso a imagem
possuir a classe double, a função imshow mostrará o valor 0 como preto, e o valor 1 como
branco. Os demais valores fracionários entre 0 e 1 receberão diferentes níveis de cinza.
9
Acostume-se a sempre que abrir a imagem no workspace transformar ela para class double.
10
Qualquer pixel com valor menor que 0 ficará preto, assim como qualquer pixel com valor
maior que 1 ficará branco. Assim, ao converter uma imagem de uint8 para double, deve-se
tomar o cuidado de dividir seus valores por 255 (valor máximo da classe uint8). Dessa forma,
todos os valores da imagem ficarão entre 0 e 1, e quando a imagem for apresentada na tela por
imshow apresentará os valores corretos de níveis de cinza. Caso essa divisão por 255 não seja
feita, pixels com valores maiores que 1 ficarão brancos (ou seja, muitos pixels na imagem).
IMPORTANTE: Se "A" for uma imagem de intensidade de cinzas ou uma imagem colorida
(RGB) de classe <uint8>, imwrite grava os valores reais da matriz no arquivo. Se "A" for da
classe <double>, imwrite redimensiona os valores da matriz antes de gravá-los, usando
uint8(round(255*A)). Esta operação converte os números de ponto-flutuante na faixa [0,1] em
inteiros de 8 bits na faixa [0,255].
Sugere-se a seguinte sequencia de comandos para a abertura e salvamento de imagens:
Abrir:
1) Arrastar a imagem para o worspace;
2) Passar para a classe double >> img = double (img);
3) Se quiser mostrar em tela, dividir por 255 (máximo valor)
>> imshow = img(: , : , [R G B]) / 255);
10
4) Processar a imagem
Salvar:
1) Converter a imagem para uint8 >> img = uint8 (img);
2) Salvar com a função imwrite, imsave ou geotiffwrite;
4 REPRESENTAÇÃO DE IMAGENS DIGITAIS
O termo imagem refere-se à função bidimensional de intensidade da luz f(x,y), onde x e y
denotam as coordenadas espaciais e o valor f em qualquer ponto (x, y) é proporcional ao
brilho (ou níveis de cinza) da imagem naquele ponto.
Uma imagem digital é uma imagem f(x, y), duas dimensões, discretizada11 tanto em
coordenadas espaciais quanto em brilho. Uma imagem digital pode ser considerada como
sendo uma matriz cujos índices de linhas e de colunas identificam um único ponto na
imagem, e o correspondente valor do elemento da matriz identifica o nível de cinza naquele
ponto. A Convenção dos eixos para representação de imagens digitais no Processamento de
Imagens é diferente da convenção usada na Computação Gráfica.
10
11
Se for imagem 8 bits 28 = 256.
Onde usam-se penas valores inteiros.
11
Figura 4.1 Convenção dos eixos para representação de imagens digitais
Os elementos dessa matriz digital são chamados de elementos da imagem, elementos da
figura, "pixels" , abreviação de "picture elements" (elementos da figura). Quanto mais pixels
uma imagem tiver, melhor é a sua resolução e qualidade. A imagem abaixo mostra como uma
imagem em níveis de cinza é representada através de uma matriz composta por números
inteiros, cada um com um certo valor correspondente a um nível de cinza.
12
Figura 4.2 (a) imagem digital com grupo de pixels selecionados; (b) zoom da janela de
9x9 pixels; (c) valor dos contadores digitais da função f(x, y). Fonte: CEPSRM-UFRGS.
4.1 Histograma da Imagem
Numa imagem, a informação da quantidade de vezes que uma determinada cor se repete
representa o histograma dessa imagem. Como as imagens são formadas por diversas matrizes
sobrepostas, o histograma é gerado banda por banda separadamente. Uma informação assim
sobre a imagem é importante, pois pode gerar parâmetros para a avaliação da qualidade da
mesma, como nitidez, luminosidade e profundidade.
 A função imhist exibe o histograma da imagem.
>> imhist (I) exibe um histograma de 256 tons de cinza para a imagem. Uma barra de
calibragem de tons de cinza é sempre exibida abaixo do traçado.
>> imhist (I , N) exibe o histograma usando N posições ao invés de 256.
13
Figura 4.3 Exemplo de Histograma de Imagem.
4.2 Imagens Coloridas
As imagens obtidas por sensores eletrônicos, em diferentes canais, são formadas por
níveis de cinza (imagens monocromáticas). A quantidade de energia refletida pelos objetos
vai determinar a intensidade dos níveis de cinza entre o branco (quando refletem toda a
energia) e o preto (quando absorvem toda a energia). Ao combinar as imagens
monocromáticas produzidas por cada banda através das cores azul, verde e vermelho (cores
primárias), é possível gerar imagens ou composições coloridas. Nas imagens coloridas, a cor
de um objeto vai depender da quantidade de energia por ele refletida nas faixas espectrais de
cada uma das bandas selecionadas para visualização.
Figura 4.4 Imagem colorida, obtida a partir das imagens ETM+ LANDSAT-7, dos
canais 1, 2 e 3, com as cores azul, verde e vermelho. Fonte: FLORENZANO (2002)
14
Figura 4.5 Imagem colorida, obtida a partir das imagens ETM+ LANDSAT-7, dos
canais 3, 4 e 5, com as cores azul, verde e vermelho. Fonte: FLORENZANO (2002)
5 PASSOS FUNDAMENTAIS DO PROCESSAMENTO DE IMAGENS
A área de processamento de imagens é um excelente exemplo de interdisciplinaridade.
As diversas técnicas originalmente desenvolvidas para tratamento de sinais unidimensionais
foram, em primeiro lugar, adaptadas para tratamento de imagens obtidas de satélites e de
naves espaciais. Posteriormente, com o rápido avanço das opções de hardware e software,
estas mesmas técnicas passaram a ser aplicadas em inúmeros domínios tais como fotografia,
medicina, ciência dos materiais, microscopia, artes, etc...
O primeiro passo no processo é a aquisição da imagem, isto é, adquirir uma imagem
digital. Para fazer isso, necessitamos de um sensor para imageamento e a capacidade de
digitalizar o sinal produzido pelo sensor. O sensor poderia ser uma câmera fotográfica que
adquire fotografias de áreas inteiras de uma só vez. O sensor de imageamento poderia também
ser uma câmera de varredura por linha que produza uma única linha de imagem por vez, como
no caso dos Satélites de Sensoriamento Remoto. Vale lembrar que se a saída da câmera ou
outro sensor de imageamento não se encontrar na forma digital, um conversor analógicodigital realiza a digitalização, um Scanner, por exemplo. A natureza do sensor e da imagem
que ele produz são determinadas pela aplicação. As imagens digitais tomadas por sensores
remotos podem ser adquiridas por provedores na internet. São exemplos desses provedores a
Divisão de Geração de Imagens do Instituto Nacional de Pesquisas Espaciais (DGI-INPE),
acessível em www.dgi.inpe.br através de um pequeno cadastro, ou United States Geological
Survey USGS – NASA em www.usgs.gov .
Após a obtenção de uma imagem digital, o próximo passo trata de pré-processar a
imagem. A função chave no pré-processamento é melhorar a imagem de forma a aumentar as
chances para o sucesso dos processos que serão aplicados na etapa de processamento. Nesse
15
exemplo, o pré-processamento tipicamente envolve técnicas para calibração radiométrica,
remoção de ruídos, correção atmosférica e seleção da região a ser estudada.
O processamento, realizado após o pré-processamento, visa à extração de informações
úteis para uma determinada aplicação. São exemplos disso aplicações urbanas, florestais,
cultivo agrícola, desastres naturais, detecção de mudanças, mapeamento de diversos tipos em
diversas escalas e estudos meteorológicos. A variedade desses processos será estudada uma a
uma nos capítulos seguintes.
6 REFERÊNCIAS
BASTOS, V.P. Técnicas de Segmentação de Imagens para Recuperação de Informações
Visuais.
FLORENZANO, Tereza Gallotti. Imagens de satélites para estudos ambientais. São Paulo: Oficina de
Textos, 2002.
CROSTA, Álvaro Penteado - Processamento Digital de Imagens de Sensoriamento Remoto. Ed. Rev. Campinas, SP: IG/UNICAMP, 1993.
Engenharia Cartográfica – UFRGS - Página Dinâmica para Aprendizado do Sensoriamento
Remoto (PDASR).
16
Histograma da Imagem
O histograma de uma imagem fornece informação útil para fazer realce e análise da
imagem. O histograma de uma imagem revela a distribuição dos níveis de cinza da imagem. É
representado por um gráfico que dá o número de pixels na imagem para cada nível de cinza.
Definição: Seja uma imagem digital g de M linhas e N colunas. O histograma da imagem
g, Hg, pode, analiticamente, ser definido por :
onde nk é o número de vezes que o nível de cinza K aparece na imagem.
Pode-se utilizar o MATLAB para gerar o Histograma de uma imagem. Primeiro a
imagem deve ser lida com o comando "imread"
» a =imread('baronesa.jpg');
17
O resultado e mostrado na FIGURA 03 (Museu da Baronesa - Pelotas/RS).
FIGURA 03 - Imagem lida no MATLAB
Depois, gera-se o histograma como o comando "imhist"
» imhist(a);
O resultado é mostrado na FIGURA 04.
FIGURA 04 - Histograma da Figura03
Realce
O objetivo principal das técnicas de realce é processar uma imagem, de modo que o
resultado seja mais apropriado para uma aplicação específica do que a imagem original [1].
As Técnicas de realce podem ser baseadas em processamento ponto-a-ponto, que modifica o
nível de cinza de um pixel independentemente da natureza de seus vizinhos, ou pelo processo
de filtragem, onde o novo valor depende também dos valores dos pontos vizinhos do ponto a
ser processado.
Contraste
18
A manipulação do contraste de uma imagem tem como objetivo melhorar a sua qualidade
visual sob critérios subjetivos ao olho humano. Esse processo não aumenta a quantidade de
informação contida na imagem, mas torna mais fácil a sua percepção. É normalmente
utilizada como uma etapa de pré-processamento.
Tipicamente, os sensores são capazes de discretizar os valores recebidos da cena em um
intervalo máximo que vai de 0 até 255 (8 bits = 256 possíveis valores). Devido à má
iluminação, defeitos do sensor ou mesmo às características da cena, o intervalo de valores de
intensidade ocupados pelos pixels presentes em uma imagem, pode ser muito menor que esse
intervalo máximo. Diz-se então que a imagem possui baixo contraste, o que torna difícil a sua
visualização ou interpretação por um intérprete humano ou um sistema de processamento
digital.
O contraste de uma imagem pode ser avaliado observando-se o seu histograma. Uma
imagem com bom contraste possui um histograma cujas barras são razoavelmente espalhadas
ao longo de todo o intervalo da escala. Por exemplo, a imagem da Figura 05 (Mercado
Público - Pelotas/RS) e seu histograma (Figura 06). Já o histograma mostrado na Figura 08
tem uma forma estreita que indica uma escala dinâmica pequena , isto porque corresponde a
uma imagem de baixo contraste.
FIGURA 05 - Imagem com contraste alto
FIGURA 06- Histograma da Figura 05
FIGURA 07 - Imagem com contraste baixo
FIGURA 08 - Histograma da Figura 07
Um realçamento de contraste pode ser feito mapeando as variações dentro do intervalo de
tons de cinza [Vmin-Vmax] da imagem original para a variação máxima do dispositivo de
19
visualização que, geralmente, é [0, 255]. Vmin e Vmax são os valores de níveis de cinza
mínimos e máximos, respectivamente, presentes na imagem original.
O mapeamento é realizado através de uma função de mapeamento. Cada valor de nível de
cinza na imagem original é mapeado para um novo valor de acordo com uma função de
transferência, que pode ser definida como:
y =f(x)
onde: x é o nível de cinza original e y é o novo valor correspondente.
A escolha da função f determina qual será o efeito visual obtido, e deve ser escolhida de
acordo com a imagem original e o efeito desejado. Em uma transformação linear, os valores
de níveis de cinza dos pixels são escalonados de tal forma que todos os pixels com valores
Vmin e Vmax são mapeados para 0 e 255, respectivamente. Da mesma forma, os outros
valores de níveis de cinza são mapeados para valores entre 0 e 255.
Normalmente, a forma do histograma da imagem realçada é a mesma da imagem original,
pois cada barra do histograma continua tendo a mesma altura, porém em uma posição
diferente. No entanto, algumas vezes a função de transferência causa uma sobreposição de
valores, ou seja, dois ou mais valores x são mapeados para o mesmo valor y.
Quando muitos valores de intensidade na imagem original são mapeados para o valor
mínimo ou máximo na imagem original diz-se que, ocorreu uma saturação (overflow) e uma
perda de informação, pois os pixels que originalmente podiam ser diferenciados na imagem
original agora possuem o mesmo valor de intensidade.
No entanto isto pode ser um efeito desejado, por exemplo, quando as regiões escuras da
imagem com pequenas variações radiométricas correspondem a áreas com o mesmo tipo de
cobertura as quais não se deseja diferenciar.
Um procedimento de modificação de contraste útil é o mapeamento linear por partes
com a função de mapeamento caracterizada por um conjunto de pontos de quebra, que pode
ser escolhido pelo usuário. Funções de mapeamento não-lineares podem ser usadas para
realçar detalhes específicos na imagem.
Uma função linear também utilizada é a função negativa. Ela realiza o mapeamento
inverso dos níveis de cinza, revertendo a ordem do preto para o branco, de tal forma que
pixels com intensidade clara serão mapeados para escuro e vice-versa.
A escolha do mapeamento direto adequado é, em geral, essencialmente empírica, mas
existe uma classe de métodos nos quais o mapeamento tem por finalidade produzir uma
imagem cujo histograma tenha um formato desejado.
Um destes métodos é a equalização de histograma.
Na equalização de histograma o mapeamento tem por finalidade produzir uma imagem cujo
histograma tenha um formato desejado. A equalização modifica o histograma da imagem
original de tal forma que a imagem transformada tenha um histograma uniforme, ou seja,
todos os níveis de cinza devem aparecer na imagem com a mesma freqüência.
20
Exemplo:
Dada uma Imagem de n x m Pixels e “g” níveis de cinza.
No. Ideal de pixels em cada nível => I = (n x m)/g
A equalização pode ser obtida através da aplicação da formúla:
Onde: g = níveis de cinza da Imagem Original
q = níveis de cinza da Imagem Equalizada
Figura 09) Imagem original e seu histograma[2]
Figura 10) Imagem equalizada e seu histograma[2]
21
Na prática, a obtenção de um histograma perfeitamente uniforme não é possível devido à
natureza das imagens digitais de sensoriamento remoto, cujos pixels podem assumir somente
valores discretos. Existem técnicas para melhorar este problema, mas pode acontecer de áreas
homogêneas na imagem original aparecerem "pipocadas", por que tons de cinza iguais são
mapeados para níveis de cinza diferentes.
O processo de equalização pode levar a falsos contornos na imagem, pois o número de
níveis de cinza pode ser reduzido. A equalização pode ter um efeito de realce notável da
imagem, mas o contraste pode ser muito forte e, por isto a equalização de histograma deve ser
usada com muito cuidado.
22
Download