Sunteți pe pagina 1din 44

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

O captulo trata-se de transformaes no domnio espacial:


transformaes de intensidade e
filtragem espacial.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Funo imadjust
A funo imadjust uma ferramenta bsica em IPT para transformaes de
imagens em escala de cinza.
Sintaxe:
g = imadjust (f, [low_in high_in], [low_out high_out], gamma)

Como mostrado na Fig. 3.2 essa funo mapeia os valores de intensidade


da imagem f para novos valores em g, tal que os valores entre low_in e
high_in mapeiem entre low_out e high_out.
Valores abaixo de low_in e acima de high_in so cortados; isto , valores
abaixo de low_in mapeiam em low_out, e valores acima de high_in
mapeiam em high_out.
A imagem de entrada pode ser da classe uint8, uint16, ou double, e a
imagem de sada tem a mesma classe da imagem de entrada.
2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Todos os valores dos parmetros, exceto f, so especificados como valores


entre 0 e 1, independente da classe de f.
Se f da classe uint8, imadjust multiplica os valores por 255 para determinar o
valor a ser usado;
Se f da classe uint16 os valores so multiplicados por 65535.
Usando a matriz vazia [ ] para [ low_in high_in] ou para [ low_out high_out]
resulta nos valores default [0 1].
Se high_out menor que low_out, a intensidade de sada invertida.
O parmetro gamma especifica a forma da curva que mapeia os valores de
intensidade. Se gamma menor que 1, o mapeamento clareia os valores de
sada; se gamma maior que 1, o mapeamento escurece os valores de sada; e
se o argumento gamma omitido, o valor default 1, mapemento linear.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Fig. 3.3a uma imagem de mamograma, f.


A Fig. 3.3b mostra o negativo, obtido usando o comando:
g1 = imadjust(f,[0 1],[1 0]);
til para detalhe branco ou cinza no meio de uma regio predominantemente escura.
O negativo de uma imagem pode ser obtido tambm com a funo:
g = incomplement(f).
A Fig. 3.3c mostra o resultado usando o comando
g2 = imadjust(f, [0.5 0.75],[0 1]), que aumenta o contraste para o intervalo de
interesse.
Finalmente o comando
g3 = imadjust(f,[], [], 2);
produz um resultado similar ao da Fig.3.3c, comprimindo o low end e expandindo o
high end da escala de cinza (Fig. 3.3d).

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

TRANSFORMAES LOGARITMICAS E DE EXTENSO DE CONTRASTE


A transformao logaritmica implementada por
g = c* log(1 + double(f)),

onde c = constante.

Um dos principais usos dessa transformao comprimir o intervalo dinmico.


Por exemplo, o espectro de Fourier pode ter valores no intervalo [0, 10 6] ou maior.
Quando mostrado num monitor a imagem mapeada linearmente para 8 bits, e os maiores
valores dominam a tela, resultando em detalhes perdidos para os valores baixos.
Computando o logaritmo 106 reduzido para aproximadamente 14, que muito mais
manipulvel.
Quando feita uma transformao logaritmica, desejvel trazer o resultado de volta para
o intervalo completo do display. Para 8 bits, a forma mais fcil
gs = im2uint8(mat2gray(g));

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

A funo da Fig. 3.4a chamada de transformao de extenso de contraste


(contrast stretching), porque o resultado um alto contraste.
No caso limite da Fig. 3.4b a sada uma imagem binria.
A funo da Fig. 3.4a tem a forma
1
s T (r )
1 (m / r ) E
onde r representa a intensidade da imagem de entrada e E controla a inclinao da
funo. Essa funo implementada usando o comando
g = 1./(1+(m./(double(f) + eps)).^E)

Nota-se o uso do eps (ver Tabela 2.10) que corresponde preciso relativa da
representao ponto-flutuante, para prevenir o overflow se f for zero.
Como valor limite de T(r) 1, os valores de sada esto mapeados no intervalo
[0,1]. A forma da Fig. 3.4a foi obtido com E = 20.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

EXEMPLO

A Fig. 3.5a um espectro de Fourier com valores no intervalo de 0 a


1.5x106, mostrado num sistema de mapeamento linear de 8 bits.
A Fig. 3.5b mostra o resultado obtido usando o comando
g= im2uint8(mat2gray(log(1+ double(f))));

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

ALGUMAS M-FUNCTIONS PARA TRANSFORMAES DE


INTENSIDADE
Manipulando um nmero varivel de entradas e/ou sadas:
para verificar o nmero de argumentos que entram numa M-function usar
a funo nargin
n = nargin
Similarmente a funo nargout usada como nmero de sadas de uma Mfunction.
n = nargout
Por exemplo, supondo que a seguinte M-function foi executada:
T = testhv(4,5);
O uso do nargin deve retornar 2, enquanto que o uso de nargout deve
retornar 1.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

A funo nargchk pode ser usada no corpo de uma M-function para


verificar se o nmero correto de argumentos foi passado. A sintaxe
msg=nargchk (low, high, number)
A funo retorna a mensagem Not enough input parameters se o nmero
menor que o low ou Two many input parameters se o nmero maior que
high.
Se o nmero estiver entre low e high (inclusive), nargchk retorna uma
matriz vazia.
Um uso frequente da funo nargchk para parar a execuo via error
function se o nmero incorreto de argumentos foi usado. O nmero de
argumentos usados determinado pela funo nargin.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Por exemplo, seja o cdigo:


function G = testhv2(x, y, z)
.....
error (nargchk(2,3,nargin));
.....
Digitando
testhv2(6);
que tem tem apenas um argumento de entrada produz um erro
Not enough input arguments
e a execuo termina.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

til poder escrever funes com nmero de argumentos de entrada e/ou


sada varivel.
Para isso usa-se as variveis varargin e varargout.
Por exemplo:
function [m,n] = testhv3(varargin)
aceita um nmero varivel de entradas na funo testhv3, e
function [varargout] = testhv4(m,n,p)
retorna um nmero varivel de sadas da funo testhv4.

Se a funo testhv3 tem um argumento fixo de entrada, x, seguido de um


nmero varivel de argumentos de entrada, ento
function [m,n] = testhv3(x, varargin)
faz com que o usurio inicie fornecendo o segundo argumento.

Similar aplicao pode ser feito para varargout.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

UMA OUTRA M-FUNCTION PARA TRANSFORMAO DE


INTENSIDADE
Nesta seo desenvolvida uma funo que computa as transformaes:
negativo, log, gamma e extenso de contraste.
Essas transformaes foram selecionadas porque usamos posteriormente, e
tambm para ilustrar os mecanismos envolvidos na escrita de uma M-function
para transformaes de intensidade.
Para escrever essa funo usamos a funo changeclass, que tem a sintaxe
g = changeclass (newclass, f)
Essa funo converte a imagem f a uma classe especificada no parmetro
newclass e fornece a sada g. Os valores vlidos de newclass so uint8,
uint16 e double.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Function g = intrans(f,varargin)
(ver o cdigo no livro)

A Fig. 3.6b mostra o resultado do uso da funo


f = intrans (f,stretch, mean2(im2double(f)),0.9);
sobre a imagem da Fig. 3.6a.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

PROCESSAMENTO DE HISTOGRAMA E PLOTAGEM DE FUNO


Gerao de plotagem de histogramas de imagens:
A funo para manipular histogramas imhist, que tem a sintaxe
h = imhist(f,b)
onde b o nmero de subdivises na escala de intensidade.
Se b omitido, o valor default = 256.
O histograma normalizado pode ser obtido usando
p = imhist(f,b)/numel(f)
Considerando a imagem da Fig. 3.3a, a forma mais simples de plotar o seu
histograma :
imhist(f);
A Fig. 3.7a mostra o resultado.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Os histogramas so tambm plotadas em bar graphs. Para tanto devemos usar a


funo:
bar (horz, v, width)
Onde v um vetor linha contendo os pontos a serem plotados, horz um vetor
de mesma dimenso que contem os incrementos na escala horizontal, e width
um nmero entre 0 e 1.
Se horiz omitido, o eixo horizontal dividido em unidade de 0 a length(v).
Quando width 1, as barras se tocam; quando zero, as barras so apenas
linhas verticais, como na Fig. 3.7a. O valor default 0.8.
Quando o bar graph usado, reduz a resoluo horizontal dividindo em
intervalos.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

O seguinte programa produz um bar graph, com o eixo horizontal dividido


em 10 nveis.
h = imhist(f);
h1 = h(1:10:256);
horz = 1:10:256;
bar(horz, h1)
axis([0 255 0 15000])
set(gca, xtick, 0:50:255)
set(gca, ytick, 0:2000:15000)

A Fig. 3.7b mostra o resultado.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

O seguinte programa produz o histograma da


Fig. 3.7c.
h = imhist(f);
h1 = h(1:10:256);
horz = 1:10:256;
stem(horz, h1, fill)
axis([0 255 0 15000])
set(gca, xtick, 0:50:255)
set(gca, ytick, 0:2000:15000)
2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Finalmente o histograma da Fig.3.7d obtido


por:
h = imhist(f);
plot(h)
axis([0 255 0 15000])
set(gca, xtick, 0:50:255)
set(gca, ytick, 0:2000:15000)

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

EQUALIZAO DE HISTOGRAMA

A equalizao de histograma implementada usando a funo histeq, com


a sintaxe
g = histeq(f, nlev)
onde nlev o nmero de nveis de intensidade especificado para a imagem
de sada.
Se nlev igual a L (nmero total de possveis nveis), o histeq implementa
a funo de transformao, T (rk), diretamente.
Se nlev menor que L, histeq tenta distribuir os nveis tal que eles se
aproximem de um histograma achatado (flat).
O valor default de nlev 64.

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

A Fig. 3.8 mostra o resultado da aplicao da equalizao de histograma,


passo a passo, usando o seguinte programa:
imshow(f)
figure, imhist(f)
ylim (auto)
g = histeq (f, 256);
figure, imshow (g)
figure, imhist (g)
ylim(auto)

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

ESPECIFICAO DE HISTOGRAMA

O seguinte comando implementa a especificao de histograma

g = histeq(f, hspec)
onde hspec o histograma especificado ( um vetor linha de valores
especificados).

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

FILTRAGEM ESPACIAL

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

Digital Image Processing Using MATLAB

Chapter 3
Intensity Transformations
and Spatial Filtering

2004 R. C. Gonzalez, R. E. Woods, and S. L. Eddins

www.imageprocessingbook.com

S-ar putea să vă placă și