Informática para Ciências e
Engenharias (B)
2015/16
Na aula de hoje
l Representação de imagens•
pixels, sistema RGB l Gráficos em MATLAB
•
Gráficos simples
•
Imagens 2D • Exemplo: difusão
•
Gráficos 3D
• Exemplo: simulação estocástica de um incêndio
Ecrã, Imagens e Pixels
Ecrã, Imagens e Pixels
l Representação de imagens
•
pixels, sistema RGB
l O ecrã é uma matriz de picture elements (pixels)
•
a resolução é normalmente indicada pelo seu número de linhas x colunas:
• 1024 x 768, 800 x 600, ... (4:3),
• 1280 x 720, 1366 x 178, 1920×1080, … (16:9)
Imagens e Pixels
Cores
l No formato True Color, cada pixel tem 3 bytes (24 bits) para
representar a cor
•
RGB
• 1 byte (8 bits) para vermelho (Red)
• 1 byte (8 bits) para verde (Green)
• 1 byte (8 bits) para azul (Blue)
•
Hexadecimal
• números representados com 0, 1, …, 9, A, …, F
Cores
l “Cubo das cores”
Manipulação do Ecrã
l CPU dá instruções de escrita l na RAM de vídeo
•
normalmente na placa gráfica.
Manipulação do Ecrã
l O controlador do ecrã na placa gráfica
actualiza os pixels no ecrã
Gráficos 2D
Gráficos 2D
l Gráficos simples podem ser feitos em MATLAB através da
função pre-definida plot.
l function plot(x, y, opts)
•
x é um vector com as abcissas
•
y é um vector com as coordenadas
•
opts é uma string especificando símbolos e cores
l Nota: Existem várias variantes desta função pré-definida/
Gráficos 2D
Exemplo:
l Juntar gráficos
Gráficos 2D
l Hold on
•
Mantém o gráfico anterior
l Adicionar legendas
octave:1> x=-pi:0.1:pi; octave:2> y=sin(x);
octave:3> plot(x,y,'*-r’)
octave:4> plot(x,-y,'+b; -seno(x);') octave:5> hold on
Gráficos 2D
l Em resumo:
•
Gráficos simples podem ser feitos em MATLAB através da função pre-definida
• plot(x, y, opts)
l Para melhorar o aspecto gráfico, podem ainda ser usados os
comandos
•
Title(titulo da imagem);
•
Xlabel(legenda do eixo dos xx);
Gráficos 2D
l Nota:
•
Em MATLAB (MATrix LABoratory) muitas operações comuns são estendidas a matrizes e vectores.
Gráficos 2D
l “Manchas gráficas” podem ser especificadas em MATLAB
através da função pre-definida fill.
l função fill(vx, vy, vCor)
•
vx vector com coordenadas x de 4 pontos
•
vy vector com coordenadas y de 4 pontos
Gráficos 2D
l colormap e image
•
com colormap definimos um mapa de cores.
• Matriz de 3 colunas, com uma cor RGB por linha
•
a função image representa uma matriz com as cores definidas
• Cada célula da matriz indica o índice (linha) da cor no
Gráficos 2D
mapaCores=([1,0,0;0,1,0;0,0,1]) imagem=floor(rand(50)*3)+1;
Simulação de Difusão
Exemplo 1:
Simulação de Difusão
l Vamos simular a difusão de X numa solução (em 2D)
•
Representação:
• Uma matriz (de pixels) com concentrações
•
Simulação:
• Discreta: Simular a difusão por passos
• Em cada passo de simulação:
• calcular quanto difunde para os 8 vizinhos
Simulação de Difusão
l Vamos simular a difusão de X numa solução (em 2D)
•
Representação:
• Uma matriz (de pixels) com concentrações
•
Simulação:
• Discreta: Simular a difusão por passos
• Condição fronteira (não há 8 vizinhos)
• As células nos extremos são constantes
Simulação de Difusão
l Vamos usar 2 funções :
•
é bom ter os cálculos numa parte:
function novaConc = passodifusao(matConc, coefDif)
• função para calcular um passo de difusão
•
e os gráficos noutra:
function difusao(matConcs, coefDif, iteracoes)
Simulação de Difusão
Normalmente evita-se aninhar muitos ciclos remetendo parte para outra função.
Mas este caso exigiria copiar toda a matriz
matConc, pelo que é mais eficiente deixar
Simulação de Difusão
A indentação é muito importante nestes casos.
Sem indentação correcta o código fica
Simulação de Difusão
Simulação de Difusão
Simulação de Difusão
Para todos os vizinhos da célula em (l, c)
Simulação de Difusão
Calcular quanto se difunde e actualizar na matriz da nova concentração.
Simulação de Difusão
Simulação de Difusão
Para cada iteração
• calcular um passo de difusão • desenhar a imagem.
• comando axis square evita a distorção da imagem
Simulação de Difusão
l Gota
concs=zeros(30);
Simulação de Difusão
l Gravar o resultado numa série de imagens
• Nota: print não faz parte da matéria
print(nome) (sprintf veremos mais tarde)
Gráficos 3D
Gráficos 3D
l Para fazer um gráfico em 3D precisamos de
•
Matrizes X, Y
• Formam a “grelha de base” (mesh grid)
•
Matriz Z
• associa um valor z a cada par (x,y)
Gráficos 3D
l Nota:
•
matrizes são indexadas por (linha, coluna)
•
mas x varia na horizontal e y na vertical
•
logo, x é a coluna e y a linha
• é preciso atenção a esta convenção
Gráficos 3D
l Para fazer um gráfico em 3D precisamos de
•
Matrizes X, Y, Z
• X e Y podem ser criadas com a função meshgrid
e.g. [xx,yy] = meshgrid(1:5, 1:5)
•
Chamar uma das funções
• mesh(x,y,z) traça uma rede 3D
Gráficos 3D
l Para fazer um gráfico em 3D ...
• mesh(x,y,z) • traça uma rede 3D
• surf(x,y,z)
• traça uma superfície
Gráficos 3D
l Especificar cores:
•
Podemos acrescentar uma matriz para indicar quais as cores a usar
• tem de ter a mesma dimensão das outras
• as cores são as do colormap corrente, interpoladas.
• o menor valor da matriz C corresponde à primeira cor do mapa de cores
• o maior valor da matriz C corresponde à última cor do mapa de cores
Gráficos 3D
c=ones(5) c(1,1)=2; c(4,4)=3; colormap([1,0,0;0,1,0;0,0,1]); surf(x,y,z,c) Célula (1,1)(cor 2 do color map) Green -[0,1,0])
Célula (4,4)
Gráficos 3D
l Para mudar a orientação:
•
view(azimute, elevação)
• azimute e elevação em graus
• por omissão:
• Azimute = -37.5º
Gráficos 3D
l Para rodar o ponto de vista:
•
Com os ponteiros do relógio: aumentar azimute >> view(-20,+30)
• Contra os ponteiros do relógio: diminuir azimute
Gráficos 3D
l Para variar a elevação:
•
Ver mais “de baixo”: diminuir o ângulo de elevação >> view(-37.5,+15)
Simulação de um Incêndio
Exemplo 2:
Simulação de um Incêndio
l Objectivo
Simulação de um Incêndio
l Objectivo
•
Modelando a elevação do terreno com uma matriz 3D
•
Queremos simular como um incêndio se propaga no terreno
• Considerando alguns factores
• Pode haver vento
Simulação de um Incêndio
l Simulação
•
numa matriz, cada célula indica que a vegetação está
• 1- normal
• 2- queimada
• 3- a arder
•
a que está a arder pode propagar o fogo aos 8 vizinhos
• com uma probabilidade que depende do
• do declive,
• do vento,
Simulação de um Incêndio
l Simulação
•
numa matriz, cada célula indica que a vegetação está
• 1- normal
• 2- queimada
• 3- a arder
•
a probabilidade de propagar o fogo a cada vizinho pode ser dada por
• uma matriz de 3x3 (pontos cardiais e colaterais)
• assim podemos simular vento ou outros factores dando valores diferentes para direcções diferentes
Simulação de um Incêndio
l Simulação
•
probabilidade de propagar o fogo:
•
modificada pelo declive
• somar um factor dependente da diferença de elevação
• mais provável propagar-se a subir
Simulação de um Incêndio
l Simulação
•
a cada iteração da simulação temos de
• propagar o fogo de todas as áreas a arder
• testar as áreas a arder para determinar quais se
apagam
•
para a simulação temos de
• calcular cada iteração
• representar graficamente o progresso do incêndio
Simulação de um Incêndio
l Simulação
•
Assinaturas das funções:
• function novoEstado = propaga(estado, ...
mapa, probPropagar, efeitoDeclive)
• function estado = extingue(estado, probApagar)
• function incendio(mapa, focoInicial, ...
Simulação de um Incêndio
Para todos os vizinhos por arder dessa célula.
Calculamos a probabilidade de propagação modificando o valor da matriz pelo declive
Se propaga, marcamos no novoEstado (e não no estado para evitar propagar imediatamente esse novo foco).
Simulação de um Incêndio
Simulação de um Incêndio
l Para simular
•
preparar o gráfico
•
ciclo das iterações
• propagar
• extinguir
Simulação de um Incêndio
Simulação de um Incêndio
Cria a matriz com o estado inicial da vegetação do
Simulação de um Incêndio
Prepara as matrizes para o gráfico 3D. Nota: x é colunas, y linhas.
Simulação de um Incêndio
A cada iteração propaga e
Simulação de um Incêndio
Depois desenha o gráfico, orienta-o adequadamente
Simulação de um Incêndio
probPropagar = 0.10000 0.14000 0.10000 0.14000 0.00000 0.14000 0.10000 0.14000 0.10000 efeitoDeclive = 0Simulação de um Incêndio
probPropagar = 0.10000 0.14000 0.10000 0.14000 0.00000 0.14000 0.10000 0.14000 0.10000 efeitoDeclive = 0.1Simulação de um Incêndio
l Com vento e declive
probPropagar =
0.04000 0.02000 0.04000
Resumo
l Gráficos 2D (pontos, linha)
•
plot(vectorX, vectorY, opções)
•
hold on, hold off
•
Clf
l Imagens 2D (pontos, linha)
•
fill(coordsX, coordsY ,corRGB)
•
colormap(matrizCoresRGB)
Resumo
l Gráficos 3D
•
meshgrid(x,y),
•
mesh ou surf (x,y,z), ou (x,y,z,c)
Para estudar esta aula
l Manual Octave
•
Capítulo 15, plotting
l MATLAB plotting functions
•
http://www.mathworks.com/help/matlab/creating_plots/using-high-level-plotting-functions.html
l Por curiosidade (para a próxima aula)