Curso Matlab aplicado ao processamento de imagens
Esta é a página do curso avançado de Matlab, elaborado pelo professor Diego da Silva de Medeiros dentro do projeto intitulado MATLAB - Software de estudos matemáticos. Este curso visa complementar o primeiro curso, de nível básico, com técnicas mais avançadas.
Classes de dados
No curso de nível básico, classes numéricas de dados foram estudados. Nesta etapa iremos conhecer outras classes existentes:
Char
Nos dados de tipo char estão compreendidos os caracteres textuais. Para indicar que uma variável é do tipo char, usamos aspas simples:
>> var1 = 'a' var1 = a
Da mesma forma que números, vetores de dados char podem ser criados:
>> var2 = ['a', 'b', 'c'] var2 = abc
Repare que um vetor de caracteres é uma string, e a sua criação pode ser feita diretamente, inclusive sem os colchetes:
>> var3 = 'ola amiguinhos!' var3 = ola amiguinhos!
O Matlab faz uso da Tabela ASCII quando um número é concatenado à um dado da classe char:
>> var4 = ['a' 35] var4 = a#
Porém, é possível converter o número em um vetor char, não realizando a conversão. Para isso é usada a função num2str:
>> var5 = ['a' num2str(35)] var5 = a35
Cell
Muitas vezes, queremos criar listas de nomes, e a primeira opção que temos é usar strings:
>> lista1 = ['Jose Aparecido'; 'Maria Silveira'; 'Etevaldo Mario'] lista1 = Jose Aparecido Maria Silveira Etevaldo Mario
Este tipo de solução, porém, funciona apenas quando todas as strings tem o mesmo número de caracteres, pois em suma, o que estamos fazendo é uma matriz de dados do tipo char:
>> size(lista1) ans = 3 14
Se tentarmos criar uma lista com strings de tamanhos diferentes, estamos criando uma matriz com número de elementos incompletos, sendo retornado um erro:
>> lista2 = ['mae'; 'pai'; 'filho'] Error using vertcat Dimensions of matrices being concatenated are not consistent.
Para resolver este e outros problemas, o Matlab disponibiliza uma classe de dados adicionais, a cell. O tipo cell é como um invólucro que armazena dados de outros tipos do Matlab. Sua criação é feita usando chaves ao invés de colchetes:
>> celula1 = {5} celula1 = [5]
>> celula2 = {'b'} celula2 = 'b' >> celula3 = {[1, 2, 3, 4, 5]} celula3 = [1x5 double] >> celula4 = {'boa noite'} celula4 = 'boa noite'
Repare que todas as variáveis criadas são do tipo cell, independente de estarem armazenando números ou letras:
>> whos celula1 celula2 celula3 celula4 Name Size Bytes Class Attributes celula1 1x1 120 cell celula2 1x1 114 cell celula3 1x1 152 cell celula4 1x1 130 cell
Além disso, todas as variáveis criadas tem o mesmo tamanho, 1x1. Porém, assim como qualquer outro tipo de dado do Matlab, vetores ou matrizes podem ser criados.
>> celula5 = {1, 2, 3, 4} celula5 = [1] [2] [3] [4] >> celula6 = {'g'; 'y'; 'A'} celula6 = 'g' 'y' 'A' >> celula7 = {[1 2], [3; 4]} celula7 = [1x2 double] [2x1 double] >> celula8 = {'oi', 'amigo'} celula8 = 'oi' 'amigo'
>> whos celula5 celula6 celula7 celula8 Name Size Bytes Class Attributes celula5 1x4 480 cell celula6 3x1 342 cell celula7 1x2 256 cell celula8 1x2 238 cell
Um dado da classe cell pode agrupar dados de diferentes tamanhos e classes:
>> celula9 = {'Joao', 13, 'O+', [140, 35]; 'Maria', 15, 'A-', [135, 29]}
celula9 = 'Joao' [13] 'O+' [1x2 double] 'Maria' [15] 'A-' [1x2 double]
Structs
As cells permitem criar listas com tipos diferentes de dados e com diferentes tamanhos. Porém, é algumas vezes necessária a criação de listas mais elaboradas. Para isso, structs podem ser utilizadas