PIM Guião2 Parte1

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 8

Processamento de Imagem Médica

Guião 2 – Parte 1
Qualidade e formatação de imagens digitais

Objetivos
1. Tipos de representação numérica e conversões
2. Tipos de imagens digitais e conversões
3. Resolução espacial de imagens
4. Manipulação básica de imagens

1. Tipos de representação numérica e conversões

No MATLAB, os elementos que constituem uma matriz podem ser representados


numericamente por diferentes tipos de informação (diferentes classes). Os tipos mais comuns
são apresentados na Tabela 1 (consultar o help do MATLAB para mais informações sobre
estas classes).

Tabela 1: Tipos de informação em MATLAB.

Classe Descrição Intervalo


int8 Inteiro de 8-bit -128 ------127
uint8 Inteiro positivo de 8-bit 0 ------255
int16 Inteiro de 16-bit -32768 ------ 32767
uint16 Inteiro positivo de 16-bit 0 ------ 65535
double Número real -------

Nota 1: a classe de cada matriz é mostrada na área Workspace ou na área Command


Window (neste segundo caso, tem de usar o comando whos img, em que img é um exemplo
representativo para o nome da matriz).

Nota 2: não são permitidas operações aritméticas com as classes int8, uint8, int16. Por
exemplo, uma imagem em tons de cinzento é formada por pixéis cujos valores pertencem à
classe uint8. Estas imagens são razoavelmente eficientes em termos de espaço de
armazenamento, uma vez que cada pixel apenas necessita de 1 byte. No entanto, como não
são permitidas operações aritméticas neste formato, a imagem da classe uint8 tem de ser
convertida no tipo double antes de tentar realizar a operação. Para efetuar a conversão, basta
usar o comando double.

Exemplo: Conversão da imagem ‘caribou.tif’ (classe uint8) na classe double.


img = imread(‘caribou.tif);
img_d = double(img);
figure(1), subplot (1,2,1), imshow (img)
figure(1), subplot (1,2,2), imshow (img_d)

1|8
Processamento de Imagem Médica

Na Figura 1, apresenta-se a imagem original da classe uint8 (esquerda) e a imagem após a


conversão para a classe double (direita). Como é possível verificar, a imagem da direita não
tem qualquer semelhança com a imagem original. Isto sucede, pois, para uma matriz da
classe double, a função imshow espera valores entre 0 (preto) e 1 (branco). Um valor v
(0<v<1) é mostrado em tons de cinzento [255v]. Por outro lado, valores superiores a 1 são
mostrados como 1 (branco) e valores inferiores a 0 são mostrados como 0 (preto). Na
imagem que foi usada como exemplo, todos os pixéis têm um valor superior a 1 (na verdade,
o menor valor é 21), pelo que todos são mostrados como branco.

Figura 1: imagem da classe uint8 (esquerda); imagem após conversão para a classe double (direita)
(retirado de McAndrew, 2004).

Assim, para visualizar a imagem após a conversão. É necessário converter para a escala 0 –
1. Isto é facilmente realizado, através da divisão por 255: imshow(img_d/255).É possível
converter para outras escalas, por exemplo:

• imshow(img_d/512)
Todos os valores da matriz estão entre 0 e 0,5, o que escurece a imagem.

• imshow(img_d/128)
Todos os valores da matriz estão entre 0 e 2, o que aumenta a exposição da imagem pois os
valores entre 1 e 2 são mostrados como branco.

Exercícios
i. Importe a imagem fornecida hands.jpg.
ii. Identifique qual a classe de informação da imagem.
iii. Crie uma variável, C, para representar a imagem após conversão para a classe
double.
iv. Use o comando subplot para representar as duas imagens na mesma figura. O que
visualiza?
v. Realize os ajustes necessários para visualizar a imagem double idêntica à imagem
original.
vi. Faça uma breve pesquisa (help ou Google, por exemplo) para identificar uma função
do MATLAB que realize a conversão de uma matriz para a classe double sem ser
necessário efetuar ajustes de escala.
vii. Crie uma variável, D, na qual aplique a função que encontrou na alínea anterior.
Visualize a imagem original e D na mesma figura.

2|8
Processamento de Imagem Médica

2. Tipos de imagens digitais e conversões

Podem considerar-se quatro tipos básicos de imagens digitais, nomeadamente:

a. Binárias: cada pixel pode ter o valor 0 (preto) ou 1 (branco), como é exemplificado
na Figura 2. Só necessita 1 bit por pixel.

Figura 2: Exemplo de uma imagem binária (retirado de McAndrew, 2004).

b. Tons de cinzento (greyscale): cada pixel tem o valor de um determinado tom de


cinzento, podendo variar entre 0 (preto) e 255 (branco), como é exemplificado na
Figura 3. Este range significa que cada pixel pode ser representado por 8 bits ou
exatamente 1 byte.

Figura 3: Exemplo de uma imagem em tons de cinzento (retirado de McAndrew, 2004).

3|8
Processamento de Imagem Médica

c. RGB (“true color”): cada pixel tem uma determinada cor. Essa cor é descrita por uma
determinada quantidade de vermelho (red – R), verde (green – G) e azul (blue – B),
como é exemplificado na Figura 4. Se cada um destes componentes varia entre 0 e
255, isto dá um total de 2563 = 16 777 216 cores possíveis na imagem. O número
total de bits necessário para cada pixel é 24.

Figura 4: Exemplo de uma imagem RGB (retirado de McAndrew, 2004).

d. Indexadas: a maioria das imagens a cor apenas contém um pequeno subconjunto de


cores de entre as mais de 16 milhões de possibilidades.
Por conveniência de armazenamento e manuseamento de ficheiros, a imagem tem
um mapa de cor (palete de cor) associado, que é simplesmente uma listagem de
todas as cores usadas na imagem. Neste caso, cada pixel tem um valor que não
indica a sua cor, mas sim um índice para a cor do mapa, como é exemplificado na
Figura 5.
Por exemplo, se uma imagem tem, no máximo, 256 cores, cada índice de cor apenas
requer 1 byte. É por este motivo que, por exemplo, os ficheiros de formato GIF
permitem apenas 256 cores ou menos em cada imagem.

Figura 5: Exemplo de uma imagem indexada (retirado de McAndrew, 2004).

4|8
Processamento de Imagem Médica

No MATLAB, é possível converter um tipo de imagem para outro tipo, através da aplicação
de funções específicas. Por exemplo, a função grey2rgb é usada para converter tons de
cinzento em RGB. Note que esta função não gera uma imagem a cor, mas sim uma imagem
em que o valor R, G e B associado a cada pixel é igual. Isto é possível porque replica os
valores “cinzentos” para cada pixel. Assim, cada tom de cinzento numa imagem RGB é obtido
por uma igualdade nos valores das componentes R, G e B.

Exercícios
i. Pesquise (por exemplo, no comando help do MATLAB), qual a função que possibilita
a seguinte conversão:
a. Imagem indexada para imagem em tons de cinzento
b. Imagem RGB para imagem em tons de cinzento
c. Imagem RGB para imagem indexada
d. Imagem indexada para imagem RGB
e. Imagem em tons de cinzento para imagem binária

ii. Crie um ficheiro .m para realizar os exercícios seguintes.


iii. Crie uma variável, E, e importe a imagem RGB que está representada na Figura 6
(angiography.jpg). Esta uma imagem de uma angiografia de fluorescência à retina.
iv. Visualize a imagem.
v. Crie uma variável, F, para converter a imagem anterior para uma imagem em tons
de cinza. Utilize a função adequada.
vi. Visualize as duas imagens na mesma figura, utilizando o comando subplot.
vii. Use o comando imwrite para gravar a imagem original (JPEG) nos tipos PNG e BMP.
Compare o tamanho dos 3 ficheiros de imagem.

Figura 6: angiography.jpg

5|8
Processamento de Imagem Médica

3. Resolução espacial de imagens

A resolução espacial de uma imagem corresponde à densidade de pixéis que constituem a


imagem: quanto maior a resolução espacial, mais pixéis são usados para visualizar a
imagem. É possível alterar a resolução espacial de uma imagem com o MATLAB através da
função imresize.

Exemplo: Suponha que a matriz x contém a informação de uma imagem 256x256, de 8 bits,
em tons de cinzento. O comando imresize (x, ½), reduzirá o tamanho da imagem para
metade. Isto é feito através de eliminar linhas alternadas e colunas alternadas, como se pode
observar na Figura 7. Neste caso, a resolução efetiva de x2 (designação da nova imagem) é
128x128.

Figura 7: exemplo da aplicação da função imresize.

Se aplicar o comando imresize à matriz x2, mas usando o parâmetro 2 em vez de 1/2, todos
os pixéis serão duplicados para produzir uma imagem com o mesmo tamanho de x mas com
a resolução efetiva de x2, ou seja, 128x128 (Figura 8). Este processo é designado de
pixelização.

Figura 8: outro exemplo da aplicação da função imresize.

Os 2 passos anteriores podem ser efetuados numa única linha de código:

x3 = imresize(imresize(x,1/2),2);

Alterando os parâmetros de imresize, é possível alterar a resolução efetiva de uma imagem


sem alterar o seu tamanho original (Tabela 2).
6|8
Processamento de Imagem Médica

Comando Resolução efetiva


imresize(imresize(x,1/2),2); 128x128
imresize(imresize(x,1/4),4); 64x64
imresize(imresize(x,1/8),8); 32x32
imresize(imresize(x,1/16),16); 16x16
imresize(imresize(x,1/32),32); 8x8
Tabela 2: resolução efetiva da aplicação do comando imresize a uma imagem 256x256.

Exercícios
i. Crie novas matrizes (G, H, I, J e K) para representar, respetivamente a alteração da
resolução efetiva na imagem original representada na Figura 6 (angiography.jpg)
para ½, ¼, 1/8, 1/16 e 1/32.
ii. Qual é a resolução efetiva de cada imagem G, H, I, J e K)?
iii. Use o comando subplot, para representar na mesma figura a imagem original e as 5
imagens criadas no ponto 1. Na figura, apresente 3 imagens em cima e 3 imagens
em baixo.

4. Manipulação básica de imagens

Uma das manipulações mais comuns a realizar em imagens é a alteração do brilho. Para tal,
uma forma simples de o fazer é através da adição ou subtração de uma constante à imagem.

Nota: para executar os exercícios propostos em seguida, irá necessitar da imagem que usou
no Guião 1 (hands.jpg) e que se encontra representada abaixo (na Figura 9). Irá também
usar das matrizes A e B, que gravou ao executar o ponto 6 (“Leitura e gravação de imagens”)
do referido guião. Recorde que: Imagem A – mão esquerda; Imagem B – mão direita.

Figura 9: hands.jpg

7|8
Processamento de Imagem Médica

Exercícios
i. Utilize a imagem A. Crie uma nova variável que resulte da soma de 50 à imagem
original (ex: A_soma).
ii. Replique o mesmo processo. A variável resultante deverá incluir a subtração de 50 à
imagem original (ex: A_sub).
iii. Visualize as três imagens na mesma figura, de forma que a imagem original se
encontre no meio. Coloque títulos em cada uma das imagens (consulte o help da
função title). Como justifica a diferença entre elas?
iv. A partir das matrizes A_soma e A_sub tente recuperar a imagem original subtraindo
e somando respetivamente o valor 50.
v. Visualize de novo as três imagens. Conseguiu recuperar a imagem original? Porquê?
(sugestão: pode subtrair as matrizes A_soma e A_sub com a imagem original para
ver se são ou não idênticas.)

Existem um conjunto de bibliotecas que permitem realizar transformadas espaciais da matriz


imagem, incluindo processos como a rotação, translação e redimensionamento. Pode
encontrar essa informação em:

https://www.mathworks.com/help/images/geometric-transformations.html

Exercícios
i. Utilize a imagem B. Aplique uma transformação espacial à imagem de forma a rodar
a imagem 30° no sentido horário, guardando-a numa nova variável.
ii. Repita o passo anterior, mas rode agora a imagem 45° no sentido contrário.
iii. Observe as 3 imagens lado a lado na mesma janela e use títulos em cada uma.
iv. Compare a dimensão da imagem original e de ambas as imagens resultantes
utilizando o comando size. Porquê a diferença de dimensão?
v. Utilizando de novo a imagem B original, aplique um processo de redimensionamento
para metade.
vi. Compare o tamanho da imagem original com a reduzida.
vii. Reverta o processo, compare os tamanhos e visualize a imagem original juntamente
com a imagem redimensionada para o tamanho original. O que explica as
diferenças?

8|8

Você também pode gostar