75
Informática para Ciências e Engenharias 2013/14 Teórica 5

Informática para Ciências e Engenharias 2013/14

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Informática para Ciências e Engenharias

2013/14

Teórica 5

2

Na aula de hoje...

Representação de imagens• pixels, sistema RGB

Gráficos em MATLAB• Gráficos simples

• Imagens 2D• Exemplo: difusão

• Gráficos 3D• Exemplo: simulação estocástica de um incêndio

(Revisões)

3

Ecrã, imagens e pixels

4

O ecrã

O ecrã é uma matriz de picture elements (pixels)• a resolução é normalmente indicada por

linhas x colunas:• 1024 x 768, 800 x 600, ... (4:3),

• 1280 x 720, 1366 x 178, 1920×1080, … (16:9)

• cada imagem é também uma matriz de pixels

5

A imagem

6

Pixels representam caracteres

7

Cores

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

• dois dígitos = 16*16 = 256 combinações

• de 00 a FF

8

Cores

9

Cores

• “Cubo das cores”

• (0,0,0) preto

• (255,255,255) branco

• (255, 0, 0) vermelho

• (0, 255, 0) verde

• (0, 0, 255) azul

http://en.wikipedia.org/wiki/RGB_color_model

10

Manipulação do ecrã

CPU dá instruções de escritana RAM de vídeo, normalmente na placa gráfica.3 bytes por pixel em true color

11

Manipulação do ecrã

O controlador do ecrã na placa gráfica actualiza os pixels no ecrã, tipicamente 50 vezes por segundo (ou mais)

12

Gráficos em 2D: plot

13

Gráficos em MATLAB

Função plot(x, y, opts)• opts é uma string especificando símbolos e

cores

14

Gráficos em MATLAB

octave:1> x=-pi:0.1:pi;octave:2> y=sin(x);octave:3> plot(x,y,'*-r')octave:4>

15

Gráficos em MATLAB

octave:1> x=-pi:0.1:pi;octave:2> y=sin(x);octave:3> plot(x,y,'*-r')octave:4> plot(x,-y,'+b')octave:5>

16

Gráficos em MATLAB

octave:1> x=-pi:0.1:pi;octave:2> y=sin(x);octave:3> plot(x,y,'*-r')octave:4> plot(x,-y,'+b')octave:5>

Nota:Em MATLAB (MATrix LABoratory) muitas operações comuns são estendidas a matrizes e vectores.

No entanto, isto não é verdade na generalidade das linguagens de programação.

17

Gráficos em MATLAB

octave:1> x=-pi:0.1:pi;octave:2> y=sin(x);octave:3> plot(x,y,'*-r')octave:4> plot(x,-y,'+b')octave:5> hold onoctave:6> plot(x,y,'*-r')octave:7>

18

Gráficos em MATLAB

Função fill(vx, vy, vCor)• vx vector com coordenadas x de 4 pontos

• vy vector com coordenadas y de 4 pontos

• vCor vector com 3 valores RGB, entre 0 e 1

19

Gráficos em MATLAB

20

Gráficos em MATLAB

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 mapa de cores.

21

Gráficos em MATLAB

mapaCores=([1,0,0;0,1,0;0,0,1])imagem=floor(rand(50)*3)+1;colormap(mapaCores)image(imagem)

22

Simulação: difusão

23

Simulação: difusão

Vamos simular a difusão de X numa solução (em 2D)• Uma matriz com concentrações

• A cada passo da simulação• calcular quanto difunde para os 8 vizinhos:

24

Simulação: difusão

Dividir em duas funções• é bom ter os cálculos numa parte:

• função para calcular um passo de difusão

function novaConc=passodifusao(matConc,coefDif)

• e os gráficos noutra:

• chama a anterior a cada passo e desenha o gráfico

function difusao(matConcs,coefDif,iteracoes)

25

Simulação: difusão

26

Simulação: difusão

Para todas as células internas da matriz

27

Percorrer a matriz

28

Percorrer a matriz

29

Simulação: difusão

Para todos os vizinhos da célula em (l, c)(excepto o próprio)

30

Percorrer a vizinhança

Matriz de 3x3 centrada em (l,c)

31

Simulação: 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 na mesma função.

32

Simulação: difusão

A indentação é muito importante nestes casos. Sem indentação correcta o código fica ilegível e muito mais propenso a erros (por exemplo, faltar o end).

33

Simulação: difusão

Calcular quanto se difunde e actualizar na matriz da nova concentração.Actualizamos na nova para não alterar os valores a usar para as outras células.

34

Simulação: difusão

testar passodifusao

octave:83> testMat=[0,0,0;0,1,0;0,0,0]testMat = 0 0 0 0 1 0 0 0 0

octave:84> tesMat=passodifusao(testMat,0.1)tesMat = 0.050000 0.100000 0.050000 0.100000 0.400000 0.100000 0.050000 0.100000 0.050000

35

Simulação: difusão

36

Simulação: difusão

Gradiente de 100 tons de branco até azul

37

Simulação: difusão

Para cada iteração calcular um passo de difusão e desenhar a imagem. O comando axis square evita a distorção da imagem e o refresh obriga a desenhar o gráfico durante a simulação.

38

Simulação: difusão

Gota

concs=zeros(30);concs(14:16,14:16)=500;difusao(concs,0.1,50);

39

Simulação: difusão

Salpicos

concs=zeros(30);

concs(2:end-1,2:end-1)=... (rand(28)>0.9)*500;

difusao(concs,0.05,60);

40

Gráficos em MATLAB: 3D

41

Gráficos em MATLAB

Para fazer um gráfico em 3D precisamos de• Matrizes X, Y, Z

• para associar um valor z a cada par (x,y)

x =

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

y =

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5

z =

5 4 1 8 10 7 10 7 10 6 9 6 6 7 5 4 3 7 7 2 7 1 5 3 9

42

Gráficos em MATLAB

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

x =

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

y =

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5

z =

5 4 1 8 10 7 10 7 10 6 9 6 6 7 5 4 3 7 7 2 7 1 5 3 9

43

Gráficos em MATLAB

Para fazer um gráfico em 3D precisamos de• Matrizes X, Y, Z

• as matrizes x e y podem ser criadas com a função meshgrid

e.g. [xx,yy]=meshgrid(1:5,1:5)

• chamar a funçãomesh(x,y,z) traça uma rede 3D

surf(x,y,z) traça uma superfície 3D

44

Gráficos em MATLAB

45

Gráficos em MATLAB

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

• os valores intermédios são interpolados

46

Gráficos em MATLAB

c=ones(5)c(2,2)=2;c(3,3)=3;colormap([1,0,0;0,1,0;0,0,1]);surf(x,y,z,c)

47

Gráficos em MATLAB

Para mudar a orientação:view(azimute, elevação)

octave:118> view(45,20)octave:119> view(85,60)

48

Simular um incêndio

por Monte Carlo

49

Monte Carlo

Nome cunhado pelo matemático Nicholas Constantine Metropolis• (1915-1999)

Conjunto de métodos baseados em números (pseudo) aleatórios.

50

Simular um incêndio

Objectivo• Temos uma matriz com a elevação do terreno

http://visibleearth.nasa.gov/view.php?id=73934

51

Simular um incêndio

Objectivo• Queremos simular como um incêndio se

propaga no terreno• pode haver vento ou outros factores

52

Simular um incêndio

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 declive,

vento, etc

53

Simular um incêndio

Simulação• a probabilidade de propagar o fogo a cada

vizinho pode ser dada por uma matriz de 3x3• assim podemos simular vento ou outros factores

dando valores diferentes para direcções diferentes

• modificada pelo declive

54

Simular um incêndio

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

0.10000 0.14000 0.100000.14000 0.00000 0.140000.10000 0.14000 0.10000

55

Simular um incêndio

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

• 3 funções

56

Simular um incêndio

Simulação• Assinaturas das funções:

function novoEstado=propaga(estado, ... mapa,probPropagar,efeitoDeclive)

function estado=extingue(estado,probApagar)

function incendio(mapa,focoInicial, ... probPropagar,probApagar, ... efeitoDeclive,iteracoes)

57

Simular um incêndio

Propagar os focos de incêndio

58

Simular um incêndio

Para todas as células internas da matriz que estejam a arder.(Não queremos propagar as da fronteira para evitar sair dos limites da matriz).

59

Simular um incêndio

Para todos os vizinhos por arder dessa célula.Nota: não precisamos excluir a própria célula porque essa está a arder.

60

Simular um incêndio

Calculamos a probabilidade de propagação modificando o valor da matriz pelo declive (mais provável propagar-se para cima).

61

Simular um incêndio

Se propaga, marcamos no novoEstado (e não no estado para evitar propagar imediatamente esse novo foco).Nota: rand devolve um valor pseudo-aleatório entre 0 e 1.

62

Simular um incêndio

Extinguir as zonas a arder

63

Simular um incêndio

Para simular• preparar o gráfico

• ciclo das iterações• propagar

• extinguir

• desenhar

64

Simular um incêndio

65

Simular um incêndio

Cria a matriz com o estado inicial da vegetação e o mesmo tamanho da matriz com a elevação do terreno. Podia ser: ones(size(mapa,1),size(mapa,2))Depois inicia o incêndio.

66

Simular um incêndio

Prepara as matrizes para o gráfico 3D. Nota: x é colunas, y linhas.Cria o mapa de cores (verde para normal, preto para queimado, laranja para fogo).

67

Simular um incêndio

A cada iteração propaga e extingue os fogos activos com as probabilidades respectivas.

68

Simular um incêndio

Depois desenha o gráfico, orienta-o adequadamente e força a sua actualização.(Sem o refresh só veríamos o gráfico no final da simulação)

69

Simular um incêndio

Sem vento nem declive

probPropagar =

0.10000 0.14000 0.10000 0.14000 0.00000 0.14000 0.10000 0.14000 0.10000

efeitoDeclive = 0

70

Simular um incêndio

Só declive

probPropagar =

0.10000 0.14000 0.10000 0.14000 0.00000 0.14000 0.10000 0.14000 0.10000

efeitoDeclive = 0.1

71

Simular um incêndio

probPropagar =

0.04000 0.02000 0.04000 0.14000 0.00000 0.14000 0.20000 0.40000 0.20000

efeitoDeclive = 0.1

Declive e vento

72

Resumindo

Gráficos 2D (pontos, linha)• plot(vectorX, vectorY, opções)

• hold on hold off

• clf

73

Resumindo

Imagens 2D• fill(coordsX, coordsY ,corRGB)

• colormap(matrizCoresRGB) image(matrizIndicesCores)

Gráficos 3D• meshgrid(x,y),

• mesh ou surf (x,y,z), ou (x,y,z,c)

• view(azimute, declinação)

74

Para estudar esta aula

Manual Octave• Capítulo 15, plotting

MATLAB plotting functions• http://www.mathworks.com/help/matlab/creati

ng_plots/using-high-level-plotting-functions.html

Por curiosidade• Método Monte Carlo:

• http://en.wikipedia.org/wiki/Monte_Carlo_method

75

Dúvidas