Você está na página 1de 4

Comandos Básicos de Matlab aplicados ao Processamento Digital de Imagens

Prof. Dr. Antonio César Germano Martins

As imagens utilizadas como exemplo estão disponíveis em:

http://www.sorocaba.unesp.br/#!/graduacao/engenharia-ambiental/paginas-docentes/antonio/teste/ci/

Uma forma prática de se trabalhar com o Matlab é criar arquivos .m. Na janela principal deve-se
selecionar FILE, NEW, SCRIPT. No editor que será aberto digita-se todos os comandos que devam ser
executados, inclusive os referentes à abertura de arquivos que contenham imagens. Para se executar o .m,
basta-se clicar no ícone ► da barra de ferramentas do editor. As mensagens de erro são apresentadas na
janela principal do Matlab.

Uma imagem digital é uma matriz de valores onde cada elemento é chamado de pixel. No caso de
imagens em tons de cinza cada pixel pode assumir valores entre 0 e G, sendo G é tipicamente 255. Um pixel
de valor 0 é associado ao preto e G ao branco. Em imagens coloridas, cada pixel possui 3 valores, um para
cada canal R (vermelho) G (verde) B (azul).

Desta forma, em imagens com tons de cinza trabalha-se com matrizes A(i,j) e em imagens coloridas
com matrizes C(i,j,k), onde i identifica a linha, j a coluna e k um dos canais R,G ou B. Para imagens de M
linhas e N colunas, os índices são tais que: 1≤i≤M , 1≤j≤N e 1≤k≤3. Deve-se notar que A e C são nomes
genéricos que podem ser escolhidos livremente ao se utilizar o Matlab, contanto que comecem com uma
letra e sejam formados somente por letras, números ou o símbolo de sublinhado ( _ ).

Uma imagem é armazenada em um computador em vários formatos: .jpg, .bmp, .raw , . pgm, entre
outros. Cada um destes formatos possui uma maneira para armazenar os pixes, podendo inclusive utilizar
processos de compressão para reduzir o tamanho do arquivo.

Para se trabalhar com imagens no Matlab, estas devem estar armazenadas em arquivos, sendo que a
pasta que contenha estes arquivos deve ser referenciada através da caixa Current Folder.

Enquanto se estiver usando o Matlab, as variáveis criadas são mantidas ativas e com os valores que
foram atualizados na última operação. Para se limpar a área de trabalho, excluindo-se todas as variáveis,
pode-se utilizar o comando clear all na janela principal.

O Matlab possui uma função (imread) que permite a importação de imagens de um arquivo em vários
formatos e a associação de cada pixel a um elemento de uma matriz . Por exemplo, a linha de comando:

A=imread(‘masp.bmp’);

abre o arquivo masp.bmp e associa dada pixel com um elemento da matriz A. Como esta imagem possui 375
pixels por 500 pixels e está em tons de cinza, a matriz A criada possui 375 linhas por 500 colunas . O ‘’;’’ ao
final da linha , evita que todos os elementos de A (187500 pixels ) sejam mostrados na tela .

A linha de comando:

C=imread('igreja.jpg');

abre o arquivo ‘igreja.jpg’ e associa cada pixel com um elemento da matriz C. Como esta é uma imagem
colorida com 1920 pixels por 2560 pixels, a matriz C possui 1920 linha por 2560 colunas por 3 níveis .
Trata-se, desta forma, de uma matriz tridimensional.

É importante lembrar que as matrizes criadas são do tipo uint8 que contém números inteiros de 0 a
255.
Para se apresentar uma matriz na forma de uma imagem pode-se utilizar a função imshow, conforme
o exemplo a seguir:

imshow(A);

Se for necessário mostrar duas imagens em uma mesma janela, pode-se utilizar:

figure(1)
subplot(1,2,1)
imshow(A)
subplot(1,2,2)
imshow(C)

Para se saber o tamanho de uma imagem armazenada em uma matriz A, pode-se utilizar o comando
size.

A linha de comando:

size(A)

retornará

375 500

ao passo que o comando

size(C)

retornará

1920 2560 3

Pode-se armazenar estes valores em uma matriz para uso posterior, usando-se os seguintes
comandos:

ta=size(A);
tc=size(C);

Assim , ta (1,1) será igual a 375 e ta(1,2) a 500, tc(1,1) será igual a 1920, tc (1,2) a 2560 e tc(1,3) a 3.

Uma ferramenta muito utilizado em processamento de imagens é o histograma da imagem. O Matlab


possui o comando imhist que gera e apresenta o histograma. Por exemplo, a linha de comando:

imhist(A)

Apresenta o histograma da imagem armazenada em A.

Analisando o histograma de A, pode-se perceber que a imagem masp.bmp possui apenas pixels com
valores menores que 128, o que torna a imagem escura. Pode-se deixa-la mais clara somando um valor a
cada pixel. Para isto pode-se utilizar a linha de comando:

A=A+100;

ou

for i=1: ta(1,1)


for j=1 : ta (1,2)
A(i,j) = A (i,j)+100;
end
end

Após os comandos anteriores, a matriz A possui valores entre 100 e 228. Para aumentar o contraste,
pode-se fazer uma transformação linear, onde pixels de valor 100 assumem o valor 0, pixels de valor 228
assumem o valor 255 e os demais:

A=255*(A-100)/128;

Para isto, deve-se transformar a matriz A de uint8 para double e, após a transformação linear, deve-se
retornar a matriz para uint8.

O código completo referente à discussão feita é:

clear all;
A=imread(‘masp.bmp’);
A=A+100;
A=double(A);
A=255*(A-100)/128;
A=uint8(A);
imhist(A).

Pode-se binarizar uma imagem, ou seja, deixa-la apenas com valores 0 e 255 de acordo com um
limiar, utilizando-se o seguinte código:

for i=1:ta(1,1)
for j=1:ta(1,2)
if(A(i,j)<125)
A(i,j)=0;
else
A(i,j)=255;
end
end
end

Dada uma máscara armazenada em uma matriz D, pode-se obter o resultado da convolução de uma
imagem armazenada em uma matriz E com a matriz D usando-se a função conv2. No entanto, antes de se
fazer a convolução, deve-se passar todas as matrizes para double.

O exemplo a seguir apresenta a linha de comando com esta operação:

saida=conv2(E,D);

Deve-se notar que neste exemplo, a imagem resultante está sendo armazenada na matriz saida. Após
a operação de convolução, deve-se acertar a escala de cinza da matriz resultante usando-se:

saida=double(saida);
saida=255*(saida-min(min(saida)))/(max(max(saida))-min(min(saida)));
saida=uint8(saida);

Novamente as funções double e uint8 foram utilizadas para transformar a imagem saida de uint8 para
double, de forma que a operação da linha seguinte pudesse ser executada, e transformar a imagem saida de
double para uint8 para que a matriz possa ser apresentada como uma imagem utilizando-se a função imshow.
As funções min e max obtêm os valores mínimos e máximos da matriz, sendo que a primeira aplicação gera
um vetor com o menor(maior) valor de cada linha e a segunda aplicação obtém o menor(maior) valor deste
vetor. Deve-se notar que o acerto de escala foi feito de acordo com a seguinte transformação:

min(min(saida) max(max(saida)

Pode-se criar uma máscara de convolução acessando-se individualmente cada elemento da uma
matriz:

MC(1,1)=1;
MC(2,1)=0;

...

ou ainda inicializando todos os elementos de uma só vez:

MC=[1,1,1;0,0,0;-1,-1,-1];

O comando anterior cria a seguinte matriz

1 1 1
0 0 0
-1 -1 -1

Para se salvar uma imagem no disco, pode-se utilizar a função imwrite, como no exemplo a seguir:

imwrite(A, ‘NovoMasp.bmp’);

Para se converter uma imagem em tons de cinza que tenha sido armazenada como colorida e
colocada em uma matriz E, deve-se utilizar:

L=E( : ; : ; 1 );

onde L armazena a imagem em tons de cinza. O 1 que aparece entre os parênteses, se refere ao canal R.
Como em uma imagem em tons de cinza, todos os canais possuem o mesmo valor, o resultado de usar 2
(Canal G) ou 3 (Canal B) é o mesmo nesta situação.

Você também pode gostar