MATLAB

Pensando como o Software II: Classificação Supervisionada Método do Paralelepípedo – MATLAB

Pessoal Neste tutorial apresento a resolução do exercício proposto no post anterior pelo Método
do Paralelepípedo, que apesar de ser um dos métodos mais simples da Classificação Supervisionada
tem o seu valor por ser mais rápido no processamento, mas informo que perdemos um pouco na
“eficiência” devido suas restrições na hora de classificar, por isso aconselho que seja utilizado quando
se deseja “separar” poucas variedades.

por exemplo:
Realizar a classificação em uma imagem que só tenha Aguá de Vegetação.
Pode parecer banal, mas acredite tem suas aplicações.

Vejam a Resolução no MATLAB:

%Classificação Supervisionada
%Método do Paralelepípedo

clear
clc

%CLASSE 1
C1B1=[16;18;20;11;17;18;14;10;4;7] %AMOSTRAS DA BANDA 1
C1B2=[13;13;13;12;12;11;11;10;9;9] %AMOSTRAS DA BANDA 2
%CLASSE 2
C2B1=[8;9;6;8;5;7;4;6;4;3] %AMOSTRAS DA BANDA 1
C2B2=[8;7;7;6;5;5;4;3;2;2] %AMOSTRAS DA BANDA 2
%CLASSE 3
C3B1=[19;19;17;17;16;14;13;13;11;11] %MEDIA DAS AMOSTRAS DA BANDA 1
C3B2=[6;3;8;1;4;5;8;1;6;3] %MEDIA DAS AMOSTRAS DA BANDA 2

%Pixels:
C1X=5;
C1Y=9;
C2X=9;
C2Y=8;
C3X=15;
C3Y=9;

%valores máximos e mínimos
MAXC1B1 = max(C1B1);
MINC1B1 = min(C1B1);
MAXC1B2 = max(C1B2);
MINC1B2 = min(C1B2);

MAXC2B1 = max(C2B1);
MINC2B1 = min(C2B1);
MAXC2B2 = max(C2B2);
MINC2B2 = min(C2B2);

MAXC3B1 = max(C3B1);
MINC3B1 = min(C3B1);
MAXC3B2 = max(C3B2);
MINC3B2 = min(C3B2);

fprintf(‘——————-Teste para C1——————-\n’);
if C1X<=MAXC1B1 & C1X>=MINC1B1 & C1Y<=MAXC1B2 & C1Y>=MINC1B2
fprintf(‘O pixel X1 pertence a Classe 1 \n’);
end

if C1X<=MAXC2B1 & C1X>=MINC2B1 & C1Y<=MAXC2B2 & C1Y>=MINC2B2
fprintf(‘O pixel X1 pertence a Classe 2 \n’);
end

if C1X<=MAXC3B1 & C1X>=MINC3B1 & C1Y<=MAXC3B2 & C1Y>=MINC3B2
fprintf(‘O pixel X1 pertence a Classe 3 \n’);
end

fprintf(‘\n’);
fprintf(‘—————————————————\n’);
fprintf(‘\n’);

fprintf(‘——————-Teste para C2——————-\n’);
if C2X<=MAXC1B1 & C2X>=MINC1B1 & C2Y<=MAXC1B2 & C2Y>=MINC1B2
fprintf(‘O pixel X2 pertence a Classe 1 \n’);
end

if C2X<=MAXC2B1 & C2X>=MINC2B1 & C2Y<=MAXC2B2 & C2Y>=MINC2B2
fprintf(‘O pixel X2 pertence a Classe 2 \n’);
end

if C2X<=MAXC3B1 & C2X>=MINC3B1 & C2Y<=MAXC3B2 & C2Y>=MINC3B2
fprintf(‘O pixel X2 pertence a Classe 3 \n’);
end

fprintf(‘\n’);
fprintf(‘—————————————————\n’);
fprintf(‘\n’);

fprintf(‘——————-Teste para C3——————-\n’);
if C3X<=MAXC1B1 & C3X>=MINC1B1 & C3Y<=MAXC1B2 & C3Y>=MINC1B2
fprintf(‘O pixel X3 pertence a Classe 1 \n’);
end

if C3X<=MAXC2B1 & C3X>=MINC2B1 & C3Y<=MAXC2B2 & C3Y>=MINC2B2
fprintf(‘O pixel X3 pertence a Classe 2 \n’);
end

if C3X<=MAXC3B1 & C3X>=MINC3B1 & C3Y<=MAXC3B2 & C3Y>=MINC3B2
fprintf(‘O pixel X3 pertence a Classe 3 \n’);
end

fprintf(‘\n’);
fprintf(‘—————————————————\n’);
fprintf(‘\n’);

RESULTADO:
C1B1 =

16
18
20
11
17
18
14
10
4
7
C1B2 =

13
13
13
12
12
11
11
10
9
9
C2B1 =

8
9
6
8
5
7
4
6
4
3
C2B2 =

8
7
7
6
5
5
4
3
2
2
C3B1 =

19
19
17
17
16
14
13
13
11
11
C3B2 =

6
3
8
1
4
5
8
1
6
3

——————-Teste para C1——————-
O pixel X1 pertence a Classe 1

—————————————————

——————-Teste para C2——————-
O pixel X2 pertence a Classe 2

—————————————————

——————-Teste para C3——————-
O pixel X3 pertence a Classe 1

—————————————————

>>

O interessante é perceber a diferença entre as classificações, os resultados foram diferentes devido o Método

da Distância Mínima da Média ser mais eficiente do que o Método do Paralelepípedo.
Existem outros métodos melhores, um dos mais usados é o Máxima verossimilhança, mas irei parar por aqui!

=)

Espero que tenham gostado.


Pensando como o Software: Classificação Supervisionada Método da Distância Mínima da Média – MATLAB

Realização da Classificação Supervisionada de uma imagem multiespectral referente a uma região bem conhecida a priori, dispõe-se de um conjunto de dados de treinamento para três classes de informação, onde cada pixel é caracterizado em apenas duas componentes espectrais: B1 e B2.
Este exercício foi proposto por Elaine Costa, Professora de Processamento Digital de Imagens do IFG
Resolvendo o exercício no MATLAB
por: Amarildo Junior
%Classificação Supervisionada
%Metodo: Distancia Minima da Media
clear
clc
%CLASSE 1
C1B1=(16+18+20+11+17+18+14+10+4+7)/(10); %MEDIA DAS AMOSTRAS DA BANDA 1
C1B2=(13+13+13+12+12+11+11+10+9+9)/(10); %MEDIA DAS AMOSTRAS DA BANDA 2
%CLASSE 2
C2B1=(8+9+6+8+5+7+4+6+4+3)/(10); %MEDIA DAS AMOSTRAS DA BANDA 1
C2B2=(8+7+7+6+5+5+4+3+2+2)/(10); %MEDIA DAS AMOSTRAS DA BANDA 2
%CLASSE 3
C3B1=(19+19+17+17+16+14+13+13+11+11)/(10); %MEDIA DAS AMOSTRAS DA BANDA 1
C3B2=(6+3+8+1+4+5+8+1+6+3)/(10); %MEDIA DAS AMOSTRAS DA BANDA 2
M1=[C1B1;C1B2]
M2=[C2B1;C2B2]
M3=[C3B1;C3B2]
%Pixels:
X1=[5;9];
X2=[9;8];
X3=[15;9];
clc
fprintf(‘Calculo para o Primeiro Pixel’);
GM1=2*X1’*M1-M1’*M1
GM2=2*X1’*M2-M2’*M2
GM3=2*X1’*M3-M3’*M3
if GM1>GM2 & GM1>GM3
    fprintf(‘O pixel X1 pertence a Classe 1 \n’);
elseif GM2>GM1 & GM2>GM3
    fprintf(‘O pixel X1 pertence a Classe 2 \n’);
elseif GM3>GM1 & GM3>GM2
    fprintf(‘O pixel X1 pertence a Classe 3 \n’);
end
fprintf(‘\n’);
fprintf(‘—————————————————\n’);
fprintf(‘\n’);
fprintf(‘Calculo para o Segundo Pixel’);
GM12=2*X2’*M1-M1’*M1
GM22=2*X2’*M2-M2’*M2
GM32=2*X2’*M3-M3’*M3
if GM12>GM22 & GM12>GM32
    fprintf(‘O pixel X2 pertence a Classe 1 \n’);
elseif GM22>GM12 & GM22>GM32
    fprintf(‘O pixel X2 pertence a Classe 2 \n’);
elseif GM32>GM12 & GM32>GM22
    fprintf(‘O pixel X2 pertence a Classe 3 \n’);
end
fprintf(‘\n’);
fprintf(‘—————————————————\n’);
fprintf(‘\n’);
fprintf(‘Calculo para o Terceiro Pixel’);
GM13=2*X3’*M1-M1’*M1
GM23=2*X3’*M2-M2’*M2
GM33=2*X3’*M3-M3’*M3
if GM13>GM23 & GM13>GM33
    fprintf(‘O pixel X3 pertence a Classe 1 \n’);
elseif GM23>GM13 & GM23>GM33
    fprintf(‘O pixel X3 pertence a Classe 2 \n’);
elseif GM33>GM13 & GM33>GM23
    fprintf(‘O pixel X3 pertence a Classe 3 \n’);
end
RESULTADO:
Calculo para o Primeiro Pixel
GM1 =
   28.4600
GM2 =
   88.1900
GM3 =
  -14.2500
O pixel X1 pertence a Classe 2
—————————————————
Calculo para o Segundo Pixel
GM12 =
  113.8600
GM22 =
  126.3900
GM32 =
   96.7500
O pixel X2 pertence a Classe 2 
—————————————————
Calculo para o Terceiro Pixel
GM13 =
  298.4600
GM23 =
  208.1900
GM33 =
  285.7500
O pixel X3 pertence a Classe 1
>>

Propagação de Variância [Ajustamento de Observações] – Código Matlab

% PROPAGAÇÃO DE VARIÂNCIA
% DADOS
A01=60; %azimute
d01=1000; %distância 1
dpA=10; %precisão A
dpd=0.02; %precisão de d
X0=0;
Y0=0;
A01=A01*pi/180;
% CALCULO DAS COORDENADAS
X1=X0+d01*sin(A01);
Y1=Y0+d01*cos(A01);
% propagacao
D=[ sin(A01) d01*cos(A01) ;
cos(A01) -d01*sin(A01) ];

MVCdA=[ dpd^2 0 ;
0 ((dpA/3600)*pi/180)^2];

MVCX1Y1=D*MVCdA*D’;

dpX1=sqrt(MVCX1Y1(1,1));
dpY1=sqrt(MVCX1Y1(2,2));
corX1Y1=MVCX1Y1(1,2)/(dpX1*dpY1);

X1
dpX1
Y1
dpY1
corX1Y1


Apostilas Matlab

“O Matlab é um software criado pela Mathworks em 1984 destinado à análise e modelagem de sistemas e algoritmos. Devido à sua praticidade, essa poderosa ferramenta computacional vem sendo utilizada tanto em universidades quanto em empresas do mundo todo. Em relação a uma linguagem de programação tradicional (como C/C++ ou Fortran), o desenvolvimento de algoritmos no ambiente Matlab é sem dúvida mais fácil e rápido.”

Em breve estarei postando novos tutoriais

Abaixo irei disponibilizar 4 apostilas úteis aos que
estão interessados em aprofundar neste Software.

 Introdução ao MatLab 

Apostila básica do Software Matlab

Apostila de introdução ao MATLAB

Apostila de MATLAB 

Espero que tenham gostado do material.
Bons estudos.


Primeiro programa no Matlab

Apresentação da interface do Matlab, destacando as principais abas que mais serão utilizadas.

Após familiarizar com o software, vamos dar início ao nosso primeiro programa.
Abra o Matlab e clique em New M-File para criarmos um novo editor de texto, neste editor é que iremos criar toda a estrutura do programa. O M-File é semelhante a aba Command Window pois os 2 tem o poder  de executar as funções criadas, mas o M-File permite salvar toda a estrutura do programa para ser aberto quantas vezes for necessária.

No Editor vamos desenvolver um programa que irá ler um arquivo de texto(xyzi.txt) que contém as coordenadas X, Y, Z e as respectivas intensidades para gerar a imagem de intensidade.

Digite no Editor os comandos conforme apresentado na figura abaixo, lembrando que tudo que está representado com o símbolo da porcentagem (%) o programa reconhece como comentário, ou seja, não fará parte dos comandos que serão executados.

Após desenvolver a estrutura do programa, é necessário salvar o arquivo do Editor acessando File>Save As…. e determinar o local para salvar o arquivo do formato .m

Para Executar o programa clique em Run teste

Volte para a interface inicial do Matlab e perceba que na aba Workspace estão presentes as respectivas matrizes que criamos. Para realizar a visualização de uma delas basta clicar 2 vezes sobre a variável desejada. Note a visualização do arquivo que importamos (txt) representado pela variável A (147279 linhas x 5 colunas).

Perceba que o Matlab também criou uma nova janela determinada Figure 1 que representa a imagem de intensidade gerada a partir do arquivo “xyzi.txt”

Então é isso, nosso primeiro programa foi desenvolvido, caso interessem no arquivo utilizado basta clicar aqui . O arquivo disponível para download se encontra no formato doc ao baixá-lo transfira todos os dados a um bloco de notas e salve com o nome “xyzi.txt”

Qualquer dúvida ou correção entre em contato.

Twitter @A_Juni0r

e-mail: aro_junior@hotmail.com