P.D.I. em PYthon


Processamento digital de imagens
A Imagem Digital


Ambiente COLAB - Primeiros passos

Preparação:

  1. - Crie uma conta no Google (se ainda não tem)
  2. - Entre na sua conta de Google.
  3. - Entre no ambiente Colab

Nesta aula vamos aprender criar scripts no ambiente Google Colab, seguindo os seguintes passos:

  1. Parte 1: Primeiros passos Importar bibliotecas em Python e executar comandos básicos.
  2. Parte 2: Processar vetores .
  3. Parte 3: Processar matrizes .
  4. Parte 4: Processar locais da matriz (vizinhança) .
  5. Sugestões de atividades práticas para os alunos.

Parte 1 - Primeiros passos

Bem-vindo PYTHON é uma linguagem de programação, como C++, que tem várias bibliotecas que devem ser incluídas para determinadas finalidades. Fazendo uma analogia, é equivalente a incluir bibliotecas em C++ com o comando "include"

A seguir tem um trecho de programa que inclui algumas bibliotecas básicas que usaremos no curso. Isto é feito usando o comando import. ex:

import numpy
import numpy as np
Inclui a biblioteca básica de processamento de dados científicos. Esta biblioteca tem funções matemáticas muito úteis, como trigonométricas, logaritmos, ou operação de matrizes. Vale a pena dar uma olhada na descrição. Consulte "https://numpy.org/doc/stable/user/whatisnumpy.html" Você também pode usar a opção: import numpy as np Neste caso, você importa a biblioteca numpy mas, em lugar de chamar os comando usando o nome numpy você pode usar um nome mais curto, como np. Isto faz sentido se o nome da biblioteca for muito extenso.

import matplotlib.pylab
import matplotlib.pylab as plt
inclui uma biblioteca que permite plotar figuras e imagens na tela. É muito útil para nossa disciplina.

Copie estas duas linhas no Colab e execute o programa (script). Para rodar este trecho de programa use a tecla play (triângulo). Após uns segundos aparece um sinal verde mostrando que deu certo. Se ocorreu um erro, um texto em vermelho aparece a seguir.
import numpy as np
import matplotlib.pylab as plt

Quando necessário, pode inserir textos de comentários em seu Notebook, usando + Texto. Também pode deslocar as janelas de Código ou Texto usando as setas à direita.


Número da sorte:

Para praticar operações matemáticas no Colab, vamos definir duas variáveis e processar a soma delas, atribuindo o resultado a uma terceira variável. Finalmente, podemos imprimir o resultado.

Problema:
Dados seu dia e mês de nascimento, calcule seu "número da sorte" como sendo a suma destes dois valores.
Número da sorte = dia + mês (de nascimento)

Crie um novo espaço para código (+Código) e nele:

  1. a) Defina duas variáveis “dia” de nascimento e “mes” de nascimento com sua data de nascimento.
  2. b) Assumindo que seu número da sorte é a soma destes dois valores, atribua a soma de dia+mes a uma nova variável “c” e mostre na tela usando print( c)

Note que é criada uma nova área onde são apresentados os resultados.

Finalmente, vamos plotar este ponto (x=dia e y=mes) usando a biblioteca matplotlib (ou plt). Juntando... import numpy as np
import matplotlib.pylab as plt
mes=10
dia=23
c=dia+mes
print(c)
plt.plot(dia,mes, '*')

Com base nesse gráfico, calcule:
* a tangente do ãngulo entre a reta que passa pela origem e o ponto e o eixo horizontal (x=dia).

a função tangente encontra-se disponível na biblioteca numpy. Procure informação na internet.

Parte 2: Vetores

Vetores são conjuntos de valores com tamanho definido. Por exemplo, a temperatura média mensal pode ser armazenada como um vetor de 12 elementos. Em Python, pode-se definir um vetor com os valores ou criar um vetor vazio e depois atribuir os valores. import numpy as np
import matplotlib.pylab as plt
temp=[ 26, 27, 25, 23, 21, 12, 10, 13, 14, 15, 16,19]
plt.plot(temp)

Podemos ter acesso a cada um destes elementos
print( temp[2]) # informa a temperatura em março
Também é possível ler todos os valores um por um, varrendo o vetor de inínio (0) ao fim (11), Em Python, para repetir alguma série de comandos podemos usar um LOOP, com o comando for, cuja sintaxe é:
for i in range(tam):
      Comando
      Comando

isto cria um loop variando a variável "i" de 0 até tam-1. Em nosso caso 0-11. É necessário usar dois pontos no final da linha onde está iniciando o loop. Tudo o que for repetido neste loop deve ser deslocado para direita (TAB) para mostrar o escopo do loop. tam=12
for i in range(tam):
     print("mes=",i, "temperatura=",temp[i])

Agora vamos gerar duas séries de 100 elementos X[i] e Y[i], com i variando de 0-99, com as seguintes funções:

  1. X[i]=i*i (quadrado) e
  2. Y[i]=1/(i+1)

Para isto, devemos criar dois vetores de 100 elementos vazios com a função zeros de numpy, Esta função cria um arrays de tamanho especificado, com elementos todos nulos.

a seguir, atribuimos a cada elemento, desde o elemento 0 ao elemento 99, o valor da função especificado.

Podemos pedir para ver alguma variável usando print. Por exemplo, a variável que descreve o tamanho do array (tam) ou um dos arrays.

Finalmente, plotamos estes pontos. Para isto usamos a biblioteca matplotlib, que importamos como plt. Esta biblioteca oferece o comando plot(). EM PYTHON devemos construir primeiro o gráfico e depois pedir para mostrar. import numpy as np
import matplotlib.pylab as plt

tam=100 # definimos o tamanho do vetor
X=np.zeros(tam,dtype = float) # Cria vetor com zeros, de tamanho tam
Y=np.zeros(tam,dtype = float)
print(tam)
print(X)
for i in range(tam): # varremos todos os elementos dos vetores, de 0 a 99 (tam-1)
     X[i]=i*i# atribuir valor a cada elemento
     Y[i]=1/(i+1)

plt.plot(X,Y ) # apresentar o resultado
plt.show()

Parte 3: Matrizes (imagens)

Podemos entender uma matriz como um "vetor" de vetores. Um arranjo bidimensional de valores. Em Python, podemos definir os valores da matriz manualmente, como no exemplo abaixo: import numpy as np
import matplotlib.pylab as plt
M=[ [ 9, 3, 1], [4, 16 ,2], [10 ,5 ,25] ] # define os valores da matriz 3x3
print(M)

Também podemos criar uma matriz de tamanho especificado com valores todos nulos usando a função zeros de numpy, e alterar um de seus elementos diretamente. M=np.zeros([10,10],dtype = float)
M[4,6]=10 # mudamos o valor do elemento na posição 4,6 para 10
Print(M)

Desafio
Crie uma matriz 9 por 9 cheia de zeros e alterar o valor de sua diagonal principal para 10, usando um Loop cim o comando for... in range.


PARTE 3: Região em torno de uma célula...

Neste exercício deseja-se calcular a média local em uma determinada região da matriz. a Média local é definida como a média do valor da célula e as oito vizinhas em torno dela. Por exemplo, na figura abaixo, calculariamos a média da célula na linha 4 e coluna 2 considerando os valores em torno dela também.

Para isto, criamos primeiro uma matriz 10x10 com números inteiros aleatórios. import numpy as np
import matplotlib.pylab as plt

Y= np.array( [[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[2, 3, 4, 5, 6, 7, 8, 9, 0, 1],
[11, 2, 3, 41, 5, 6, 7, 81, 9, 0],
[11, 32, 4, 25, 16, 7, 8, 91, 20, 1],
[11, 22, 3, 4, 25, 6, 7, 8, 29, 20],
[11, 32, 41, 25, 16, 7, 8, 91, 20, 1],
[21, 22, 31, 4, 25, 6, 7, 88, 29, 20],
[31, 32, 42, 25, 16, 7, 81, 91, 20, 1],
[41, 22, 3, 4, 25, 6, 7, 8, 29, 20],
[2, 3, 4, 5, 6, 7, 8, 29, 20,21] ], dtype=float )
print(Y)
Outra forma (mais simples) de criar uma matriz com números aleatórios é utilizar a função random.randint da biblioteca numpy Um exemplo:
Y = np.random.randint(100, size=(10, 10))
Aqui, 100 limita o valor máximo a ser gerado, ou seja, produziremos valores entre 0 e 99. import numpy as np
import matplotlib.pylab as plt

Y = np.random.randint(100, size=(10, 10))
print(Y)
Agora definimos o ponto central (linha 5, coluna 5) e copiamos sua vizinhança em uma nova matriz 3x3.

A notação Y[linha-1:linha+2, coluna-1:coluna+2] seleciona uma submatriz 3x3 centrada em (linha, coluna). linha=5
coluna=4
A=Y[linha-1:linha+2 , coluna-1:coluna+2]
print(A)

Finalmente, calculamos a media desta região soma = 0
for fila in A:
     for elemento in fila:
         soma += elemento
media = soma / 9 # 9 elementos na vizinhança 3x3
print(' A média é:' , media)
desafio calcule a média de cada posição possível na matriz. para isto deve varrer linhas e colunas. Armazene a saída em uma nova matriz.

Exercícios


Agora, tente você mesmo escrever seus programas. A seguir algumas sugestões:

  1. - Faça outros gráficos plotando pontos com outros dados. Por exemplo, um gráfico da temperatura prevista pars os seguintes 30 dias (pode obter dados em https://www.meteoprog.com/pt/weather/Curitiba/month/), de acordo com a Parte 2;
  2. - Uma pessoa observa as quatro esquinas de um terreno. Considerando a origem na posição do observador, o primeiro ponto se encontra a 10m (ao leste) e 5m ao norte (x=10m, y=5m). O segundo ponto se localiza em (x=10m, y=-15m), o terceiro em (x=-5m, y=-14m) e o último em (x=-5m, y=6m). represente estas coordenadas em dois vetores (x e y) e plote um gráfico dos limites do terreno.
  3. - Crie uma matriz 9x9 com valores nulos e altere todos os valores entre linha=2 a linha=5, e coluna=4 e coluna=7, para 100.
  4. - Defina uma variável "N" que será o tamaho de uma matriz quadrada. Crie uma matriz NxN com valores nulos e atribua a cada célula o valor correspondente à soma da respectiva linha e coluna.