SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Processamento de Imagens

                Aula 03


               Octave

 Professor Dr. Fábio Augusto M. Cappabianco
Roteiro
Terminal 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
Instruções
Para aproveitar bem esta aula, siga os slides
executando no terminal do Linux e no terminal
do Octave os exemplos dados.




            Octave                        3/43
Terminal Octave (1)
Para abrir um terminal do octave basta abrir um terminal
do Linux, acessar a pasta onde você deseja trabalhar e
executar o comando:
> octave




                Octave                               4/43
Terminal Octave (2)
Para sair do octave de volta para o terminal do Linux,
basta digitar a palavra 'quit' ou a palavra 'exit'
octave:1> exit
ou
octave:1> quit
O comando 'help <cmd>' imprime na tela a documentação
do comando de nome <cmd>. Esta documentação explica
como o comando deve ser utilizado.
Exemplo: Digite no terminal a frase abaixo e veja a
documentação do comando exit.
octave:1> help exit
                 Octave                                  5/43
Terminal Octave (3)
O comando 'lookfor <str>' procura pela string
<str> dentro da primeira linha da descrição dos
comandos e funções padrão do Octave.
O comando 'lookfor -all <str>' busca a string
<str> em todo texto dos comandos e das
funções.
Exemplo: digite no terminal do Octave:
octave:1> lookfor help


             Octave                         6/43
Comandos Sobre Arquivos (1)
Alguns comandos sobre o sistema de arquivos do Octave
sã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> ls
Comando para exibir qual é a pasta atual.
  octave:2> pwd
Comando 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
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 (no
Ubuntu)
  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
Comandos Matemáticos
          Básicos (1)
Digite um número no terminal do Octave e este
número será repetido no terminal:
  Exemplo: octave:1> 3
Digite uma operação aritmética no terminal do
Octave 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
Comandos Matemáticos
              Básicos (2)
Existem também algumas funções e constantes pré-definidas
para 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 contantes
esteja declarada leia o help da função.
Exemplos:
  > help cot
  > help tand

                    Octave                          10/43
Comandos Matemáticos
           Básicos (3)
No Octave, não é necessário declarar variáveis.
Quando você quiser utilizar uma variável, basta
atribuir para ela um determinado valor.
Exemplos:
  > a1 = 4
  > i = 15 / 2
As variáveis podem ser alteradas.
Exemplo:
  > gu = 3
  > gu = gu - 10
                   Octave                     11/43
Comandos Matemáticos
          Básicos (4)
Os nomes das variáveis podem ser quaisquer
palavras compostas por letras maiúsculas e
minúsculas, números e o caractere '_'.
Sugiro que os nomes sejam iniciados com
letras.
Não utilize o nome de uma constante ou função
pré-definida, a não ser que você queira alterar
o valor da constante e não utilizar a função.


            Octave                        12/43
Comandos Matemáticos
            Básicos (5)
Existem vários tipos de dados no Octave.
O tipo de dado de uma variável será definido pelo
primeiro valor atribuído a ela.
No caso de atribuição numérica, como nos exemplos
anteriores, 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
Comandos Matemáticos
             Básicos (6)
Caso você queira que o resultado de uma operação seja
atribuído a uma variável, mas que não seja impresso no
terminal, 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 o
nome dela no terminal.
Exemplo:
  > a = 5.5;
  >a


                    Octave                              14/43
Comandos de Vetores e
                 Matrizes (1)
Para declarar uma matriz com valores pré-definidos, basta inserir os valores
entre 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 = A'
A matriz inversa é dada por:
  > D = inv( A );
  ou
  > E = A^-1


                            Octave                                     15/43
Comandos de Vetores e
                Matrizes (2)
É possível também resolver sistemas por matrizes com comando x = A  b, onde
A é matriz 2x2 e B é matriz 2x1.
Exemplo:
  > A = rand( 2, 2 )
  > b = rand( 2, 1 )
  >x=Ab
As 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
Comandos de Vetores e
             Matrizes (3)
Elementos de um vetor ou matriz podem ser acessado por
digitar o nome da variável que contém a matriz e a posição
do elementos entre parêntesis, separando as coordenadas
de cada dimensão por ','.
As coordenadas são definidas entre 1 e n, onde n é o
tamanho da dimensão na coordenada. Se uma ou mais
coordenadas 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
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 uma
determinada coordenada de maneira semelhante:
  > a = rand( 3, 3 )
  > a( 2, 2 ) = 5
Note que se a coordenada for maior que a dimensão da
matriz, o Octave automaticamente aumenta o tamanho da
matriz em todas as dimensões necessárias para
comportar o novo elemento. Os outros elementos
acrescentados terão valor 0:
  > a = rand( 2 )
  > a( 7, 4 ) = 9

                    Octave                       18/43
Comandos de Vetores e
             Matrizes (5)
É possível também acessar um intervalo ou todos os
elementos de uma linha, coluna ou sub-matriz. Veja alguns
exemplos:
  > 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 colocado
antes ou depois dele, o valor mínimo e máximo,
respectivamente, são selecionados.
                     Octave                           19/43
Comandos de Vetores e
            Matrizes (6)
Muitas vezes as funções pré-definidas do Octave que
operam sobre escalares, operam também sobre
matrizes e vetores.
Veja alguns exemplos:
  > n = rand( 10, 1 )
  > sin( n )
  > m = rand( 3, 3 )
  > exp( m )
Como veremos adiante, esta regra normalmente se
aplica também a funções desenvolvidas pelo usuário.

                 Octave                        20/43
Comandos de Vetores e
            Matrizes (7)
Algumas funções interessantes para manipulação de
matrizes 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
Comandos Lógicos (1)
Os comandos for, while, do-until, if-else, switch-case são funções de
repetição e condicionais. Utilize o comando 'help' para ver a sintaxe de
cada um deles.
Eles podem ser utilizados para percorrer os elementos de vetores e
matrizes 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
Comandos Lógicos (2)
Exemplo de percorrer um vetor aleatório e imprimir
apenas os números menores que 0.5 e inverter os
demais 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
Comandos sobre Imagens (1)
Existem diversos tipos de imagens sobre as quais o Octave
trabalha. 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 de
cada pixel da imagem aberta, sendo 2D para imagens em tons
de cinza e 3D para imagens coloridas.
Os dados da matriz serão do tipo uint8, e não double, como na
atribuição de valores escalares.
Tente abrir alguma imagem em um dos formatos citados pelo
comando imread.



                   Octave                               24/43
Comandos sobre Imagens (2)
Para que o Octave exiba uma imagem que está
em uma matriz de nome img, execute o
comando imshow.
Exemplo:
  > img = imread( “vegetables.jpg” );
  > imshow( img );
Tente abrir uma imagem e visualizá-la pelo
Octave.


              Octave                     25/43
Comandos sobre Imagens (3)
Finalmente, é possível salvar uma imagem
contida em uma matriz de nome img em um
arquivo de nome resultado.jpg pelo comando
imwrite.
Exemplo:
  imwrite( img, “resultado.jpg” );
Tente abrir uma imagem pelo comando imread
e salvá-la pelo comando imwrite.


               Octave                  26/43
Comandos sobre Imagens (4)
Para realizar processamentos sobre os dados
de uma imagem, basta percorrer seus
elementos e alterar os seus valores.
Note, porém, que algumas funções do Octave
requerem que o dado utilizado seja do tipo
double.
Neste caso é necessário a conversão de dados
entre os tipos uint8 e double.


            Octave                     27/43
Comandos de Conversão
           de Tipos (1)
Para converter um dado de um tipo para outro,
basta chamar uma função definida pelo nome do
tipo desejado.
Conversão de imagem armazenada em matriz de
nome img para números reais:
  > img = imread( “minha_imagem.jpg” );
  > img = double( img );
Conversão de matriz real de nome result para
inteira sem sinal de 8 bits:
  > result = uint8( result );
                Octave                     28/43
Comandos de Conversão
           de Tipos (2)
Dependendo de como uma matriz é inicializada, cada
elemento pode ser considerado pelo Octave como um
vetor de uma unidade de números reais, ao invés de
um simples escalar inteiro. Isto pode resultar em
alguns erros, ao executar as funções imshow e
imwrite.
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árias
para escalares inteiros sem sinal de 8 bits.

                 Octave                       29/43
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 acessadas
pelo nome da lista e entre chaves o elemento da lista.
   Exemplo: s{ 2 }
Registros são estruturas de dados muito parecidas com resgistros
em C.
Arrays de células são semelhantes a arrays, mas podem possuir em
cada 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
Funções (1)
Além de utilizar funções do Octave, podemos também
instanciar nossas próprias funções.
As funções em Octave possuem um nome podem ter
vários parâmetros e valores de retorno.
Veremos também como escrever funções em arquivos
para que elas possam ser carregadas toda vez que
inicializarmos o terminal do Octave.
O ideal é que as suas funções sejam agrupadas em
arquivos por alguma semântica, facilitando o seu uso e
documentação.


                Octave                             31/43
Funções (2)
Veja um exemplo de uma função simples, sem
parâmetros e sem retorno:
> function hello( )
>     printf( "Hello, World!n" );
> endfunction
A função printf funciona de maneira
praticamente igual à função de mesmo nome
em C.

              Octave                  32/43
Funções (3)
Veja um exemplo de uma função com um
parâmetro e sem retorno:
  > function hello2( who = "World" )
   > printf( "Hello, %s!n", who );
  > endfunction
A função possui um parâmetro do tipo string
chamado who, com valor padrão igual a
“World”.


              Octave                     33/43
Funções (4)
Veja um exemplo de uma função f com um
parâmetro x e uma variável de retorno y:
  > function y = f( x )
  > y = x ** 2;
  > endfunction
Esta função recebe parâmetros de qualquer tipo
numérico e retorna o seu quadrado. Caso x seja
uma matriz quadrada, a função retornará a
multiplicação de x por x. Caso seja uma matriz
não quadrada, um erro irá ocorrer.
                Octave                     34/43
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 retorno
retorno m e i.              >   if( v( j ) > m )
                            >     m = v( j );
v é um vetor, m retorna o
maior valor de v e i        >     i = j;
retorna o índice do maior   >   endif
valor.                      > endfor
                            > endfunction

              Octave                                  35/43
Funções (6)
A utilização de funções escritas pelo usuário é feita da mesma
forma que as funções primitivas do Octave.
Veja exemplos de como chamar as funções instanciadas nos slides
anteriores:
  > 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ão
especificadas entre colchetes e separadas por vírgulas.


                        Octave                              36/43
Funções (7)
Como dito anteriormente, é melhor que as funções
criadas 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
Scripts (1)
Outra opção que o Octave oferece é de escrever arquivos de
script que podem ser executados diretamente do terminal do
Linux.
Um arquivo de script do Octave é um arquivo texto pode ter
qualquer extensão.
Um arquivo de script de Octave sempre começa com o
comando:
  #! /usr/bin/octave -qf
Depois, ele pode conter declaração de funções e a execução
de uma sequência de comandos desejada.
Exceto no caso da primeira linha, o símbolo '#' corresponde
a um comentário.
                    Octave                            38/43
Scripts (2)
Alguns comandos só funcionam em scripts como é o caso
dos 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
Scripts (3)
Veja um exemplo de um script que utiliza
alguns 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
Scripts (4)
Outro exemplo de programa, agora que utiliza a função scanf e
que 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 e
execute-os pelo terminal do Linux.
Você precisa ter permissão para executar um arquivo pelo terminal
do Linux.
Assim, acesse a pasta onde você escreveu o arquivo de script e
antes de executá-lo execute o seguinte comando.
  chmod +x <nome_do_arquivo>

                       Octave                             41/43
Erros Comuns (1)
Existem dois tipos de erros no Octave: os erros de
sintaxe, que ocorrem quando você escreve alguma
palavra errada e os erros de execução, quando não
é possível executar uma função ou operação, muito
embora não haja erro de sintaxe.
Um erro de sintaxe simples é dado por executar o
comando:
  > a = b *** 3
Neste caso, o Octave indicará que houve erro de
sintaxe e pode até mesmo apontar o local de onde o
erro ocorreu.
                  Octave                     42/43
Erros Comuns (2)
Os erros de execução geralmente são mais difíceis de se
encontra 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 ser
igual ao de linhas, para que a multiplicação de matrizes fosse
possível.
O código abaixo gera um erro semelhante, mas é mais fácil de se
identificar.
  > a = [ 2, 3 ]
  > b = a ** 2;

                    Octave                                 43/43

Mais conteúdo relacionado

Mais procurados

Fenômeno do transporte aula 01
Fenômeno do transporte aula 01Fenômeno do transporte aula 01
Fenômeno do transporte aula 01Diomedes Manoel
 
Teste de hipoteses
Teste de hipotesesTeste de hipoteses
Teste de hipoteseszimbu
 
Operações unitárias
Operações unitáriasOperações unitárias
Operações unitáriasMarcela Abreu
 
[Mfl ii] relatório 2 (4)
[Mfl ii] relatório 2 (4)[Mfl ii] relatório 2 (4)
[Mfl ii] relatório 2 (4)toninho250393
 
Fundamentos quimica analitica
Fundamentos quimica analiticaFundamentos quimica analitica
Fundamentos quimica analiticaKzona99
 
Reservatórios de Petróelo
Reservatórios de PetróeloReservatórios de Petróelo
Reservatórios de PetróeloAnderson Pontes
 
Tabela completa de derivadas e integrais
Tabela completa de derivadas e integraisTabela completa de derivadas e integrais
Tabela completa de derivadas e integraisDiego Rodrigues Vaz
 
Aula 07 tecnologias da eng quimica - reatores quimicos - 18.03
Aula 07   tecnologias da eng quimica - reatores quimicos - 18.03Aula 07   tecnologias da eng quimica - reatores quimicos - 18.03
Aula 07 tecnologias da eng quimica - reatores quimicos - 18.03Nelson Virgilio Carvalho Filho
 
Resistência dos materiais - Exercícios Resolvidos
Resistência dos materiais - Exercícios ResolvidosResistência dos materiais - Exercícios Resolvidos
Resistência dos materiais - Exercícios ResolvidosMoreira1972
 
Distribuicao continua
Distribuicao continuaDistribuicao continua
Distribuicao continuacarneiro62
 
Resmat ii material de aula com exercicios da av1 até av2
Resmat ii material de aula com exercicios da av1 até av2Resmat ii material de aula com exercicios da av1 até av2
Resmat ii material de aula com exercicios da av1 até av2Douglas Alves
 
Aula 2 - Distribuição de probabilidade
Aula 2 - Distribuição de probabilidadeAula 2 - Distribuição de probabilidade
Aula 2 - Distribuição de probabilidadeFelipe Pontes
 
Calculo vetorial
Calculo vetorialCalculo vetorial
Calculo vetorialtooonks
 
Estatica dos-corpos-rigidos parte3
Estatica dos-corpos-rigidos parte3Estatica dos-corpos-rigidos parte3
Estatica dos-corpos-rigidos parte3Emerson Assis
 

Mais procurados (20)

Fenômeno do transporte aula 01
Fenômeno do transporte aula 01Fenômeno do transporte aula 01
Fenômeno do transporte aula 01
 
Teste de hipoteses
Teste de hipotesesTeste de hipoteses
Teste de hipoteses
 
Operações unitárias
Operações unitáriasOperações unitárias
Operações unitárias
 
[Mfl ii] relatório 2 (4)
[Mfl ii] relatório 2 (4)[Mfl ii] relatório 2 (4)
[Mfl ii] relatório 2 (4)
 
Fundamentos quimica analitica
Fundamentos quimica analiticaFundamentos quimica analitica
Fundamentos quimica analitica
 
Distribuição binomial, poisson e hipergeométrica - Estatística I
Distribuição binomial, poisson e hipergeométrica - Estatística IDistribuição binomial, poisson e hipergeométrica - Estatística I
Distribuição binomial, poisson e hipergeométrica - Estatística I
 
Reservatórios de Petróelo
Reservatórios de PetróeloReservatórios de Petróelo
Reservatórios de Petróelo
 
Tabela completa de derivadas e integrais
Tabela completa de derivadas e integraisTabela completa de derivadas e integrais
Tabela completa de derivadas e integrais
 
Aula 07 tecnologias da eng quimica - reatores quimicos - 18.03
Aula 07   tecnologias da eng quimica - reatores quimicos - 18.03Aula 07   tecnologias da eng quimica - reatores quimicos - 18.03
Aula 07 tecnologias da eng quimica - reatores quimicos - 18.03
 
Resistência dos materiais - Exercícios Resolvidos
Resistência dos materiais - Exercícios ResolvidosResistência dos materiais - Exercícios Resolvidos
Resistência dos materiais - Exercícios Resolvidos
 
Distribuicao continua
Distribuicao continuaDistribuicao continua
Distribuicao continua
 
Resmat ii material de aula com exercicios da av1 até av2
Resmat ii material de aula com exercicios da av1 até av2Resmat ii material de aula com exercicios da av1 até av2
Resmat ii material de aula com exercicios da av1 até av2
 
Aula 2 - Distribuição de probabilidade
Aula 2 - Distribuição de probabilidadeAula 2 - Distribuição de probabilidade
Aula 2 - Distribuição de probabilidade
 
Apostila operações i
Apostila operações iApostila operações i
Apostila operações i
 
Calculo vetorial
Calculo vetorialCalculo vetorial
Calculo vetorial
 
Aula 1 concreto armado
Aula 1 concreto armado Aula 1 concreto armado
Aula 1 concreto armado
 
Modelos Hidrológicos
Modelos HidrológicosModelos Hidrológicos
Modelos Hidrológicos
 
Macadame betuminoso
Macadame betuminosoMacadame betuminoso
Macadame betuminoso
 
Estatica dos-corpos-rigidos parte3
Estatica dos-corpos-rigidos parte3Estatica dos-corpos-rigidos parte3
Estatica dos-corpos-rigidos parte3
 
Liquidos e sólidos
Liquidos e sólidosLiquidos e sólidos
Liquidos e sólidos
 

Semelhante a Processamento de Imagens Octave

Filtro_matlab_toobox
Filtro_matlab_tooboxFiltro_matlab_toobox
Filtro_matlab_tooboxDiego Menezes
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfEdkallenn Lima
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
Tutorial Octave Matlab
Tutorial Octave MatlabTutorial Octave Matlab
Tutorial Octave Matlabblogmaxima
 
Aula6 programação
Aula6 programaçãoAula6 programação
Aula6 programaçãoIFPB
 
Minicurso Matlab IVSEE 2013 UERJ
Minicurso Matlab IVSEE 2013 UERJMinicurso Matlab IVSEE 2013 UERJ
Minicurso Matlab IVSEE 2013 UERJRenan Prata
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Linguagem c wellington telles - aula 06
Linguagem c   wellington telles - aula 06Linguagem c   wellington telles - aula 06
Linguagem c wellington telles - aula 06profwtelles
 
Turorial Básico de Matlab.
Turorial Básico de Matlab. Turorial Básico de Matlab.
Turorial Básico de Matlab. Lourran Freire
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorialblogmaxima
 
Alg aula 07 - matrizes tp1
Alg   aula 07 - matrizes tp1Alg   aula 07 - matrizes tp1
Alg aula 07 - matrizes tp1Thalles Anderson
 

Semelhante a Processamento de Imagens Octave (20)

Filtro_matlab_toobox
Filtro_matlab_tooboxFiltro_matlab_toobox
Filtro_matlab_toobox
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
 
Apostila vol1 matlab
Apostila vol1 matlabApostila vol1 matlab
Apostila vol1 matlab
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Tutorial Octave Matlab
Tutorial Octave MatlabTutorial Octave Matlab
Tutorial Octave Matlab
 
Aula6 programação
Aula6 programaçãoAula6 programação
Aula6 programação
 
Minicurso Matlab IVSEE 2013 UERJ
Minicurso Matlab IVSEE 2013 UERJMinicurso Matlab IVSEE 2013 UERJ
Minicurso Matlab IVSEE 2013 UERJ
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Tutorial matlab
Tutorial matlabTutorial matlab
Tutorial matlab
 
Matlab1
Matlab1Matlab1
Matlab1
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Aula2
Aula2Aula2
Aula2
 
Linguagem c wellington telles - aula 06
Linguagem c   wellington telles - aula 06Linguagem c   wellington telles - aula 06
Linguagem c wellington telles - aula 06
 
Turorial Básico de Matlab.
Turorial Básico de Matlab. Turorial Básico de Matlab.
Turorial Básico de Matlab.
 
Aula algoritmo
Aula algoritmoAula algoritmo
Aula algoritmo
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
 
Alg aula 07 - matrizes tp1
Alg   aula 07 - matrizes tp1Alg   aula 07 - matrizes tp1
Alg aula 07 - matrizes tp1
 

Mais de PeslPinguim

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao ArduinoPeslPinguim
 
Aula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalAula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalPeslPinguim
 
Aula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalAula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalPeslPinguim
 
Aula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalAula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalPeslPinguim
 
Aula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalAula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalPeslPinguim
 
Aula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalAula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalPeslPinguim
 
Aula 1 apresentacao
Aula 1 apresentacaoAula 1 apresentacao
Aula 1 apresentacaoPeslPinguim
 
Aula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalAula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalPeslPinguim
 
Apresentação1_
Apresentação1_Apresentação1_
Apresentação1_PeslPinguim
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10PeslPinguim
 
Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5PeslPinguim
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4PeslPinguim
 
Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1PeslPinguim
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3PeslPinguim
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2PeslPinguim
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9PeslPinguim
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 PeslPinguim
 
Eletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroEletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroPeslPinguim
 

Mais de PeslPinguim (20)

Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Aula 4 redes Inclusão Digital
Aula 4 redes Inclusão DigitalAula 4 redes Inclusão Digital
Aula 4 redes Inclusão Digital
 
Aula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão DigitalAula 3 parte 2 software Inclusão Digital
Aula 3 parte 2 software Inclusão Digital
 
Aula 3 software Inclusão Digital
Aula 3 software Inclusão DigitalAula 3 software Inclusão Digital
Aula 3 software Inclusão Digital
 
Aula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão DigitalAula 2 parte 2 hardware Inclusão Digital
Aula 2 parte 2 hardware Inclusão Digital
 
Aula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão DigitalAula 2 hardware Inclusão Digital
Aula 2 hardware Inclusão Digital
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Aula 1 apresentacao
Aula 1 apresentacaoAula 1 apresentacao
Aula 1 apresentacao
 
Aula 5 internet Inclusão Digital
Aula 5 internet Inclusão DigitalAula 5 internet Inclusão Digital
Aula 5 internet Inclusão Digital
 
Apresentação1_
Apresentação1_Apresentação1_
Apresentação1_
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5Curso Básico de Java - Aula 5
Curso Básico de Java - Aula 5
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4
 
Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1Curso Básico de Java - Aula 1
Curso Básico de Java - Aula 1
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
 
Eletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoroEletrônica aplicada - interruptor sonoro
Eletrônica aplicada - interruptor sonoro
 

Processamento de Imagens Octave

  • 1. Processamento de Imagens Aula 03 Octave Professor Dr. Fábio Augusto M. Cappabianco
  • 2. Roteiro Terminal 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ções Para aproveitar bem esta aula, siga os slides executando no terminal do Linux e no terminal do Octave os exemplos dados. Octave 3/43
  • 4. Terminal Octave (1) Para abrir um terminal do octave basta abrir um terminal do Linux, acessar a pasta onde você deseja trabalhar e executar 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 'exit' octave:1> exit ou octave:1> quit O comando 'help <cmd>' imprime na tela a documentação do comando de nome <cmd>. Esta documentação explica como o comando deve ser utilizado. Exemplo: Digite no terminal a frase abaixo e veja a documentaçã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 dos comandos e funções padrão do Octave. O comando 'lookfor -all <str>' busca a string <str> em todo texto dos comandos e das funçõ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 Octave sã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> ls Comando para exibir qual é a pasta atual. octave:2> pwd Comando 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 (no Ubuntu) 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 este número será repetido no terminal: Exemplo: octave:1> 3 Digite uma operação aritmética no terminal do Octave 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é-definidas para 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 contantes esteja 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, basta atribuir para ela um determinado valor. Exemplos: > a1 = 4 > i = 15 / 2 As 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 quaisquer palavras compostas por letras maiúsculas e minúsculas, números e o caractere '_'. Sugiro que os nomes sejam iniciados com letras. Não utilize o nome de uma constante ou função pré-definida, a não ser que você queira alterar o 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 pelo primeiro valor atribuído a ela. No caso de atribuição numérica, como nos exemplos anteriores, 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 seja atribuído a uma variável, mas que não seja impresso no terminal, 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 o nome 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 valores entre 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 = A' A 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, onde A é matriz 2x2 e B é matriz 2x1. Exemplo: > A = rand( 2, 2 ) > b = rand( 2, 1 ) >x=Ab As 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 por digitar o nome da variável que contém a matriz e a posição do elementos entre parêntesis, separando as coordenadas de cada dimensão por ','. As coordenadas são definidas entre 1 e n, onde n é o tamanho da dimensão na coordenada. Se uma ou mais coordenadas 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 uma determinada coordenada de maneira semelhante: > a = rand( 3, 3 ) > a( 2, 2 ) = 5 Note que se a coordenada for maior que a dimensão da matriz, o Octave automaticamente aumenta o tamanho da matriz em todas as dimensões necessárias para comportar o novo elemento. Os outros elementos acrescentados 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 os elementos de uma linha, coluna ou sub-matriz. Veja alguns exemplos: > 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 colocado antes 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 que operam sobre escalares, operam também sobre matrizes e vetores. Veja alguns exemplos: > n = rand( 10, 1 ) > sin( n ) > m = rand( 3, 3 ) > exp( m ) Como veremos adiante, esta regra normalmente se aplica 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 de matrizes 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 de repetição e condicionais. Utilize o comando 'help' para ver a sintaxe de cada um deles. Eles podem ser utilizados para percorrer os elementos de vetores e matrizes 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 imprimir apenas os números menores que 0.5 e inverter os demais 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 Octave trabalha. 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 de cada pixel da imagem aberta, sendo 2D para imagens em tons de cinza e 3D para imagens coloridas. Os dados da matriz serão do tipo uint8, e não double, como na atribuição de valores escalares. Tente abrir alguma imagem em um dos formatos citados pelo comando 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 o comando imshow. Exemplo: > img = imread( “vegetables.jpg” ); > imshow( img ); Tente abrir uma imagem e visualizá-la pelo Octave. Octave 25/43
  • 26. Comandos sobre Imagens (3) Finalmente, é possível salvar uma imagem contida em uma matriz de nome img em um arquivo de nome resultado.jpg pelo comando imwrite. Exemplo: imwrite( img, “resultado.jpg” ); Tente abrir uma imagem pelo comando imread e salvá-la pelo comando imwrite. Octave 26/43
  • 27. Comandos sobre Imagens (4) Para realizar processamentos sobre os dados de uma imagem, basta percorrer seus elementos e alterar os seus valores. Note, porém, que algumas funções do Octave requerem que o dado utilizado seja do tipo double. Neste caso é necessário a conversão de dados entre 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 do tipo desejado. Conversão de imagem armazenada em matriz de nome img para números reais: > img = imread( “minha_imagem.jpg” ); > img = double( img ); Conversão de matriz real de nome result para inteira 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, cada elemento pode ser considerado pelo Octave como um vetor de uma unidade de números reais, ao invés de um simples escalar inteiro. Isto pode resultar em alguns erros, ao executar as funções imshow e imwrite. 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árias para 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 acessadas pelo nome da lista e entre chaves o elemento da lista. Exemplo: s{ 2 } Registros são estruturas de dados muito parecidas com resgistros em C. Arrays de células são semelhantes a arrays, mas podem possuir em cada 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ém instanciar nossas próprias funções. As funções em Octave possuem um nome podem ter vários parâmetros e valores de retorno. Veremos também como escrever funções em arquivos para que elas possam ser carregadas toda vez que inicializarmos o terminal do Octave. O ideal é que as suas funções sejam agrupadas em arquivos por alguma semântica, facilitando o seu uso e documentação. Octave 31/43
  • 32. Funções (2) Veja um exemplo de uma função simples, sem parâmetros e sem retorno: > function hello( ) > printf( "Hello, World!n" ); > endfunction A função printf funciona de maneira praticamente igual à função de mesmo nome em C. Octave 32/43
  • 33. Funções (3) Veja um exemplo de uma função com um parâmetro e sem retorno: > function hello2( who = "World" ) > printf( "Hello, %s!n", who ); > endfunction A função possui um parâmetro do tipo string chamado who, com valor padrão igual a “World”. Octave 33/43
  • 34. Funções (4) Veja um exemplo de uma função f com um parâmetro x e uma variável de retorno y: > function y = f( x ) > y = x ** 2; > endfunction Esta função recebe parâmetros de qualquer tipo numérico e retorna o seu quadrado. Caso x seja uma matriz quadrada, a função retornará a multiplicação de x por x. Caso seja uma matriz nã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 retorno retorno m e i. > if( v( j ) > m ) > m = v( j ); v é um vetor, m retorna o maior valor de v e i > i = j; retorna o índice do maior > endif valor. > endfor > endfunction Octave 35/43
  • 36. Funções (6) A utilização de funções escritas pelo usuário é feita da mesma forma que as funções primitivas do Octave. Veja exemplos de como chamar as funções instanciadas nos slides anteriores: > 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ão especificadas entre colchetes e separadas por vírgulas. Octave 36/43
  • 37. Funções (7) Como dito anteriormente, é melhor que as funções criadas 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 de script que podem ser executados diretamente do terminal do Linux. Um arquivo de script do Octave é um arquivo texto pode ter qualquer extensão. Um arquivo de script de Octave sempre começa com o comando: #! /usr/bin/octave -qf Depois, ele pode conter declaração de funções e a execução de uma sequência de comandos desejada. Exceto no caso da primeira linha, o símbolo '#' corresponde a um comentário. Octave 38/43
  • 39. Scripts (2) Alguns comandos só funcionam em scripts como é o caso dos 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 utiliza alguns 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 e que 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 e execute-os pelo terminal do Linux. Você precisa ter permissão para executar um arquivo pelo terminal do Linux. Assim, acesse a pasta onde você escreveu o arquivo de script e antes 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 de sintaxe, que ocorrem quando você escreve alguma palavra errada e os erros de execução, quando não é possível executar uma função ou operação, muito embora não haja erro de sintaxe. Um erro de sintaxe simples é dado por executar o comando: > a = b *** 3 Neste caso, o Octave indicará que houve erro de sintaxe e pode até mesmo apontar o local de onde o erro ocorreu. Octave 42/43
  • 43. Erros Comuns (2) Os erros de execução geralmente são mais difíceis de se encontra 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 ser igual ao de linhas, para que a multiplicação de matrizes fosse possível. O código abaixo gera um erro semelhante, mas é mais fácil de se identificar. > a = [ 2, 3 ] > b = a ** 2; Octave 43/43