Your SlideShare is downloading. ×
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Introdução ao Octave
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introdução ao Octave

8,040

Published on

Aula de Introdução ao octave, linguagem interpretada, voltado a processamento de imagens elaborada pelo Prof. Dr. Fábio Cappabianco. …

Aula de Introdução ao octave, linguagem interpretada, voltado a processamento de imagens elaborada pelo Prof. Dr. Fábio Cappabianco.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,040
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
137
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Processamento de Imagens Aula 03 Octave Professor Dr. Fábio Augusto M. Cappabianco
  • 2. RoteiroTerminal Octave.Comandos sobre arquivos.Comandos matemáticos básicos.Comandos de vetores e matrizes.Comandos lógicos.Comandos sobre imagens.Comandos de conversão de tipos.Funções.Scripts.Erros comuns. Octave 2/43
  • 3. InstruçõesPara aproveitar bem esta aula, siga os slidesexecutando no terminal do Linux e no terminaldo Octave os exemplos dados. Octave 3/43
  • 4. Terminal Octave (1)Para abrir um terminal do octave basta abrir um terminaldo Linux, acessar a pasta onde você deseja trabalhar eexecutar o comando:> octave Octave 4/43
  • 5. Terminal Octave (2)Para sair do octave de volta para o terminal do Linux,basta digitar a palavra quit ou a palavra exitoctave:1> exitouoctave:1> quitO comando help <cmd> imprime na tela a documentaçãodo comando de nome <cmd>. Esta documentação explicacomo o comando deve ser utilizado.Exemplo: Digite no terminal a frase abaixo e veja adocumentação do comando exit.octave:1> help exit Octave 5/43
  • 6. Terminal Octave (3)O comando lookfor <str> procura pela string<str> dentro da primeira linha da descrição doscomandos e funções padrão do Octave.O comando lookfor -all <str> busca a string<str> em todo texto dos comandos e dasfunções.Exemplo: digite no terminal do Octave:octave:1> lookfor help Octave 6/43
  • 7. Comandos Sobre Arquivos (1)Alguns comandos sobre o sistema de arquivos do Octavesão iguais aos comandos utilizados pelo terminal do Linux.Teste o resultado dos seguintes comandos:Comando para listar conteúdo da pasta atual. octave:1> lsComando para exibir qual é a pasta atual. octave:2> pwdComando para subir um nível em uma pasta: octave:3> cd ..Comando para descer para uma pasta de nome <p>: octave:4> cd <p> Octave 7/43
  • 8. Comandos Sobre Arquivos (2)Comando para limpar a tela: Mantenha a tecla Ctrl pressionada e aperte a tecla l.Comando para minimizar/maximizar a janela (noUbuntu) Mantenha a tecla Alt pressionada e aperte a tecla F10.Outra alternativa para sair do Octave: Mantenha a tecla Ctrl pressionada e aperte a tecla D. Octave 8/43
  • 9. Comandos Matemáticos Básicos (1)Digite um número no terminal do Octave e estenúmero será repetido no terminal: Exemplo: octave:1> 3Digite uma operação aritmética no terminal doOctave tela e o resultado será impresso: Exemplo: octave:1> 3 + 5 Exemplo: octave:2> 4 / 9 Exemplo: octave:3> 4 * 4 Exemplo: octave:4> 9 ** 2 Octave 9/43
  • 10. Comandos Matemáticos Básicos (2)Existem também algumas funções e constantes pré-definidaspara operações matemáticas mais complexas:Exemplos: > sin( 1 ) > cos( 2.1 ) > tan( pi / 4 ) > exp( 3.2 )Caso tenha dúvidas de como uma dastas funções ou contantesesteja declarada leia o help da função.Exemplos: > help cot > help tand Octave 10/43
  • 11. Comandos Matemáticos Básicos (3)No Octave, não é necessário declarar variáveis.Quando você quiser utilizar uma variável, bastaatribuir para ela um determinado valor.Exemplos: > a1 = 4 > i = 15 / 2As variáveis podem ser alteradas.Exemplo: > gu = 3 > gu = gu - 10 Octave 11/43
  • 12. Comandos Matemáticos Básicos (4)Os nomes das variáveis podem ser quaisquerpalavras compostas por letras maiúsculas eminúsculas, números e o caractere _.Sugiro que os nomes sejam iniciados comletras.Não utilize o nome de uma constante ou funçãopré-definida, a não ser que você queira alteraro valor da constante e não utilizar a função. Octave 12/43
  • 13. Comandos Matemáticos Básicos (5)Existem vários tipos de dados no Octave.O tipo de dado de uma variável será definido peloprimeiro valor atribuído a ela.No caso de atribuição numérica, como nos exemplosanteriores, o tipo será double.Existem os tipos escalares: int8, uint8, int16, uint16, int32, uint32, int64, uint64, double.Existem ainda números complexos.Exemplo: X = 2 + 7.5i Octave 13/43
  • 14. Comandos Matemáticos Básicos (6)Caso você queira que o resultado de uma operação sejaatribuído a uma variável, mas que não seja impresso noterminal, acrescente um caractere ; ao final da operação.Exemplos: > a = 3.0; > b = sin( a );Para apenas visualizar o valor atual de uma variável, digite onome dela no terminal.Exemplo: > a = 5.5; >a Octave 14/43
  • 15. Comandos de Vetores e Matrizes (1)Para declarar uma matriz com valores pré-definidos, basta inserir os valoresentre colchetes, separando as colunas por , e as linhas por ;.Exemplo de atribuição de matriz 3x3 pré-definida a uma variável de nome A: > A = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ];É possível também gerar uma matriz de números aleatórios:Exemplo de atribuição de matriz 2x3x4 aleatória a uma variável de nome B: > B = rand ( 2, 3, 4 );Para calcular a matriz transposta de uma matriz A digite: > C = AA matriz inversa é dada por: > D = inv( A ); ou > E = A^-1 Octave 15/43
  • 16. Comandos de Vetores e Matrizes (2)É possível também resolver sistemas por matrizes com comando x = A b, ondeA é matriz 2x2 e B é matriz 2x1.Exemplo: > A = rand( 2, 2 ) > b = rand( 2, 1 ) >x=AbAs operações +, - e * executam soma, subtração e multiplicação de matrizes.Exemplo: > A = rand( 2, 2 ) > b = rand( 2, 1 ) > C = rand( 2, 2 ) >D=A+C >E=C–A >f=A*b Octave 16/43
  • 17. Comandos de Vetores e Matrizes (3)Elementos de um vetor ou matriz podem ser acessado pordigitar o nome da variável que contém a matriz e a posiçãodo elementos entre parêntesis, separando as coordenadasde cada dimensão por ,.As coordenadas são definidas entre 1 e n, onde n é otamanho da dimensão na coordenada. Se uma ou maiscoordenadas forem omitidas, elas terão valor 1.Exemplo: > a = rand( 3,2, 2 ) > a( 1, 2, 2 ) > a( 2,1 ) > a( 3 ) Octave 17/43
  • 18. Comandos de Vetores e Matrizes (4)Além de obter o valor de uma determinada coordenada, épossível atribuir o um valor para o elemento de umadeterminada coordenada de maneira semelhante: > a = rand( 3, 3 ) > a( 2, 2 ) = 5Note que se a coordenada for maior que a dimensão damatriz, o Octave automaticamente aumenta o tamanho damatriz em todas as dimensões necessárias paracomportar o novo elemento. Os outros elementosacrescentados terão valor 0: > a = rand( 2 ) > a( 7, 4 ) = 9 Octave 18/43
  • 19. Comandos de Vetores e Matrizes (5)É possível também acessar um intervalo ou todos oselementos de uma linha, coluna ou sub-matriz. Veja algunsexemplos: > v = [ 2, 3, 4, 5, 6 ] > v( 2 : 4 ) > m = rand( 3, 3 ) > m( :, 1 ) > m( :, 1 : 2 ) > m( 2 : 3, 1 : 2 )O símbulo : indica intervalo. Se nenhum valor for colocadoantes ou depois dele, o valor mínimo e máximo,respectivamente, são selecionados. Octave 19/43
  • 20. Comandos de Vetores e Matrizes (6)Muitas vezes as funções pré-definidas do Octave queoperam sobre escalares, operam também sobrematrizes e vetores.Veja alguns exemplos: > n = rand( 10, 1 ) > sin( n ) > m = rand( 3, 3 ) > exp( m )Como veremos adiante, esta regra normalmente seaplica também a funções desenvolvidas pelo usuário. Octave 20/43
  • 21. Comandos de Vetores e Matrizes (7)Algumas funções interessantes para manipulação dematrizes e vetores são: rows: retorna o número de linhas de uma matriz. columns: retorna o número de colunas de uma matriz. length: retorna o comprimento de um vetor. max: retorna o máximo valor máximo de um vetor. Para retornar o valor máximo de uma matriz 2D de nome mat, basta utilizar o comando: max( max( mat ) ) sum: retorna a somatória dos elementos de um vetor. Para retornar a somatória dos valores de uma matriz 2D de nome mat, basta utilizar o comando: sum( sum( mat ) ) Octave 21/43
  • 22. Comandos Lógicos (1)Os comandos for, while, do-until, if-else, switch-case são funções derepetição e condicionais. Utilize o comando help para ver a sintaxe decada um deles.Eles podem ser utilizados para percorrer os elementos de vetores ematrizes e para avaliar condições de desvio e atribuição.Exemplo de impressão de números pares entre 0 e 50: > s = 0; > do > if( mod( s, 2 ) == 0 ) > s > endif; > s++; > until( s > 4 ); Octave 22/43
  • 23. Comandos Lógicos (2)Exemplo de percorrer um vetor aleatório e imprimirapenas os números menores que 0.5 e inverter osdemais números: > n = rand( 10, 1 ) > for s = 1:10 > if( n(s) < 0.5 ) > n( s ) > else > n( s ) = 1 / n( s ); > endif > endfor Octave 23/43
  • 24. Comandos sobre Imagens (1)Existem diversos tipos de imagens sobre as quais o Octavetrabalha. Por exemplo, png, pgm, jpg, gif.Para ler uma imagem de um arquivo basta executar o comando: > img = imread( “<nome_do_arquivo>” );Neste caso, img receberá uma matriz contendo a informação decada pixel da imagem aberta, sendo 2D para imagens em tonsde cinza e 3D para imagens coloridas.Os dados da matriz serão do tipo uint8, e não double, como naatribuição de valores escalares.Tente abrir alguma imagem em um dos formatos citados pelocomando imread. Octave 24/43
  • 25. Comandos sobre Imagens (2)Para que o Octave exiba uma imagem que estáem uma matriz de nome img, execute ocomando imshow.Exemplo: > img = imread( “vegetables.jpg” ); > imshow( img );Tente abrir uma imagem e visualizá-la peloOctave. Octave 25/43
  • 26. Comandos sobre Imagens (3)Finalmente, é possível salvar uma imagemcontida em uma matriz de nome img em umarquivo de nome resultado.jpg pelo comandoimwrite.Exemplo: imwrite( img, “resultado.jpg” );Tente abrir uma imagem pelo comando imreade salvá-la pelo comando imwrite. Octave 26/43
  • 27. Comandos sobre Imagens (4)Para realizar processamentos sobre os dadosde uma imagem, basta percorrer seuselementos e alterar os seus valores.Note, porém, que algumas funções do Octaverequerem que o dado utilizado seja do tipodouble.Neste caso é necessário a conversão de dadosentre os tipos uint8 e double. Octave 27/43
  • 28. Comandos de Conversão de Tipos (1)Para converter um dado de um tipo para outro,basta chamar uma função definida pelo nome dotipo desejado.Conversão de imagem armazenada em matriz denome img para números reais: > img = imread( “minha_imagem.jpg” ); > img = double( img );Conversão de matriz real de nome result parainteira sem sinal de 8 bits: > result = uint8( result ); Octave 28/43
  • 29. Comandos de Conversão de Tipos (2)Dependendo de como uma matriz é inicializada, cadaelemento pode ser considerado pelo Octave como umvetor de uma unidade de números reais, ao invés deum simples escalar inteiro. Isto pode resultar emalguns erros, ao executar as funções imshow eimwrite.Caso este seja o caso em uma matriz de nome result,tente o seguinte procedimento: > result = single( uint8( result ) );Este comando fará todas as conversões necessáriaspara escalares inteiros sem sinal de 8 bits. Octave 29/43
  • 30. Comandos de Conversão de Tipos (3)Existem ainda outros tipos de dados como strings, listas de strings,registros e arrays de células.As strings podem ser utilizadas para imprimir textos para o usuário,muito embora não sejam comumente convertidas para números.Listas de strings são uma sequência de strings. Elas são acessadaspelo nome da lista e entre chaves o elemento da lista. Exemplo: s{ 2 }Registros são estruturas de dados muito parecidas com resgistrosem C.Arrays de células são semelhantes a arrays, mas podem possuir emcada posição um tipo de dado diferente.Os tipos registro e array de células estão fora do escopo deste curso. Octave 30/43
  • 31. Funções (1)Além de utilizar funções do Octave, podemos tambéminstanciar nossas próprias funções.As funções em Octave possuem um nome podem tervários parâmetros e valores de retorno.Veremos também como escrever funções em arquivospara que elas possam ser carregadas toda vez queinicializarmos o terminal do Octave.O ideal é que as suas funções sejam agrupadas emarquivos por alguma semântica, facilitando o seu uso edocumentação. Octave 31/43
  • 32. Funções (2)Veja um exemplo de uma função simples, semparâmetros e sem retorno:> function hello( )> printf( "Hello, World!n" );> endfunctionA função printf funciona de maneirapraticamente igual à função de mesmo nomeem C. Octave 32/43
  • 33. Funções (3)Veja um exemplo de uma função com umparâmetro e sem retorno: > function hello2( who = "World" ) > printf( "Hello, %s!n", who ); > endfunctionA função possui um parâmetro do tipo stringchamado who, com valor padrão igual a“World”. Octave 33/43
  • 34. Funções (4)Veja um exemplo de uma função f com umparâmetro x e uma variável de retorno y: > function y = f( x ) > y = x ** 2; > endfunctionEsta função recebe parâmetros de qualquer tiponumérico e retorna o seu quadrado. Caso x sejauma matriz quadrada, a função retornará amultiplicação de x por x. Caso seja uma matriznão quadrada, um erro irá ocorrer. Octave 34/43
  • 35. Funções (5)Veja um exemplo de > function[ m, i ] = vmax( v )uma função vmax com > i = 1;um parâmetro de > m = v( i );entrada v e duas > for j = 2:length( v )variáveis de retornoretorno m e i. > if( v( j ) > m ) > m = v( j );v é um vetor, m retorna omaior valor de v e i > i = j;retorna o índice do maior > endifvalor. > endfor > endfunction Octave 35/43
  • 36. Funções (6)A utilização de funções escritas pelo usuário é feita da mesmaforma que as funções primitivas do Octave.Veja exemplos de como chamar as funções instanciadas nos slidesanteriores: > hello( ) > hello2( ) > hello2( “People” ) > b = f( 4 ) > x = [ 1, 2, 3, 4, 5 ]; > [ m, I ] = vmax( x )Note que a função vmax requer duas variáveis de retorno. Elas sãoespecificadas entre colchetes e separadas por vírgulas. Octave 36/43
  • 37. Funções (7)Como dito anteriormente, é melhor que as funçõescriadas sejam gravadas em um arquivo.Um arquivo com funções pode ser carregado utilizando-se o comando source. > source( “meu.m” );Exemplo: Crie um arquivo de nome teste.m e salve-o na pasta de trabalho do Octave. Escreva algumas funções dentro deste arquivo. Carregue o arquivo pelo comando source. Execute alguma das funções contidas em teste.m. Octave 37/43
  • 38. Scripts (1)Outra opção que o Octave oferece é de escrever arquivos descript que podem ser executados diretamente do terminal doLinux.Um arquivo de script do Octave é um arquivo texto pode terqualquer extensão.Um arquivo de script de Octave sempre começa com ocomando: #! /usr/bin/octave -qfDepois, ele pode conter declaração de funções e a execuçãode uma sequência de comandos desejada.Exceto no caso da primeira linha, o símbolo # correspondea um comentário. Octave 38/43
  • 39. Scripts (2)Alguns comandos só funcionam em scripts como é o casodos comandos abaixo: A função scanf( ) funciona de maneira semelhante ao scanf da linguagem C, mas retorna o valor lido, ao invés de armazená-lo em um endereço passado como arqumento. O segundo arqumento do scanf é o número de vezes que o valor será lido. > a = scanf( “%d”, 1 ); A função program_name( ) retorna o nome do script. A variável nargin contém o número de parâmetros entrados ao executar o script. A função argv( ) retorna uma lista de strings contendo os parâmetros entrados para executar o script. Octave 39/43
  • 40. Scripts (3)Veja um exemplo de um script que utilizaalguns dos comandos anteriores: #! /usr/bin/octave -qf printf ( "%s", program_name( ) ); arg_list = argv( ); for i = 1:nargin printf ( " %s", arg_list{ I } ); endfor printf ( "n" ) Octave 40/43
  • 41. Scripts (4)Outro exemplo de programa, agora que utiliza a função scanf eque contém um comentário: #! /usr/bin/octave -qf # um comentario!!! who = scanf( "%s", 1 ); printf( "Hello %s!n", who );Exercício: Crie um arquivo para cada um dos scripts dados eexecute-os pelo terminal do Linux.Você precisa ter permissão para executar um arquivo pelo terminaldo Linux.Assim, acesse a pasta onde você escreveu o arquivo de script eantes de executá-lo execute o seguinte comando. chmod +x <nome_do_arquivo> Octave 41/43
  • 42. Erros Comuns (1)Existem dois tipos de erros no Octave: os erros desintaxe, que ocorrem quando você escreve algumapalavra errada e os erros de execução, quando nãoé possível executar uma função ou operação, muitoembora não haja erro de sintaxe.Um erro de sintaxe simples é dado por executar ocomando: > a = b *** 3Neste caso, o Octave indicará que houve erro desintaxe e pode até mesmo apontar o local de onde oerro ocorreu. Octave 42/43
  • 43. Erros Comuns (2)Os erros de execução geralmente são mais difíceis de seencontra do que os de sintaxe, pois sua mensagem nem sempreé fácil de compreender.Um exemplo de erro de sintaxe é a execução abaixo: > a = [ 2, 3 ] > b = a * a;Este erro ocorre porque o número de colunas de a teria de serigual ao de linhas, para que a multiplicação de matrizes fossepossível.O código abaixo gera um erro semelhante, mas é mais fácil de seidentificar. > a = [ 2, 3 ] > b = a ** 2; Octave 43/43

×