Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
imhist(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
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.
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.
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;
...
MC=[1,1,1;0,0,0;-1,-1,-1];
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.