PIM Guião2 Parte1
PIM Guião2 Parte1
PIM Guião2 Parte1
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
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.
1|8
Processamento de Imagem Médica
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
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.
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.
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
Figura 6: angiography.jpg
5|8
Processamento de Imagem Médica
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.
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.
x3 = imresize(imresize(x,1/2),2);
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.
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.)
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