SHOW:
|
|
- or go back to the newest paste.
1 | ||
2 | /** Retorna a matriz resultado da busca | |
3 | */ | |
4 | matriz busca(matriz *original, matriz *recorte) { | |
5 | - | matriz * localizada = cópia da matriz original; |
5 | + | matriz * localizada; |
6 | copiarMatriz(original, localizada); | |
7 | - | matriz * recorteMaisProximo = nada por enquanto; |
7 | + | |
8 | - | matriz * recorteDaOriginal = nada por enquanto; |
8 | + | matriz * recorteMaisProximo; |
9 | matriz * recorteDaOriginal; | |
10 | - | unsigned int mseMenor, mseTemporario; |
10 | + | |
11 | - | unsigned int xDoMenor, yDoMenor; |
11 | + | unsigned int mseMenor, mseTemporario; |
12 | unsigned int xDoMenor, yDoMenor; | |
13 | - | for (j) { |
13 | + | |
14 | - | for(i) { |
14 | + | for (i = 0; i < original->altura - recorte->altura + 1; i++) { |
15 | - | recorteDaOriginal = recortar a original; |
15 | + | for(j = 0; j < original->largura - recorte->largura + 1; j++) { |
16 | // OU | |
17 | - | mseTemporario = comparaMatrizes(recorteDaOriginal, ); |
17 | + | // dando o tamanho |
18 | recorte(original, recorteDaOriginal, i, j, tamanho do recorte, tamanho do recorte); | |
19 | - | if (mseTemporario < mseMenor) { |
19 | + | // OU |
20 | - | xDoMenor = i; |
20 | + | // dando coordenadas iniciais e finais |
21 | - | yDoMenor = j; |
21 | + | recorte(original, recorteDaOriginal, i, j, i + tamanho do recorte, j + tamanho do recorte); |
22 | - | mseMenor = mseTemporario; |
22 | + | |
23 | - | recorteMaisProximo = recorteDaOriginal; |
23 | + | mseTemporario = comparaMatrizes(recorteDaOriginal, recorte); |
24 | - | } |
24 | + | |
25 | - | } |
25 | + | if (mseTemporario < mseMenor) { |
26 | - | } |
26 | + | mseMenor = mseTemporario; |
27 | recorteMaisProximo = recorteDaOriginal; | |
28 | - | return marcarMatriz(localizada, recorteMaisProximo, xDoMenor, yDoMenor); |
28 | + | |
29 | xDoMenor = i; | |
30 | yDoMenor = j; | |
31 | } | |
32 | } | |
33 | } | |
34 | - | * |
34 | + | |
35 | - | * Obs: Imagem 1 e imagem 2 devem ter o mesmo tamanho; |
35 | + | marcarMatriz(localizada, recorteMaisProximo, xDoMenor, yDoMenor); |
36 | return &localizada; | |
37 | } | |
38 | - | int soma = 0; |
38 | + | |
39 | /** Copia a 'original', 'na cópia' | |
40 | - | int pixel1, pixel2; |
40 | + | |
41 | - | int i, tamanho = imagem1->altura * imagem1->largura; |
41 | + | void copiarMatriz(matriz * original, matriz * copia) { |
42 | - | for (i = 0; i < tamanho; i++) { |
42 | + | copia->altura = original->altura; |
43 | - | pixel1 = *(imagem1->dadosM + i); |
43 | + | copia->largura = original->largura; |
44 | - | pixel2 = *(imagem2->dadosM + i); |
44 | + | copia->dadosM = vocês tem uma função que faz isso!; |
45 | ||
46 | - | subtracao = pixel1 - pixel2; |
46 | + | int i; |
47 | - | soma += subtracao * subtracao; |
47 | + | int tamanho = original->altura * original->largura; |
48 | - | } |
48 | + | for (i = 0; i < tamanho; i++){ |
49 | *(copia.dadosM + i) = *(original->dadosM + i); | |
50 | - | return soma / tamanho; |
50 | + | } |
51 | } | |
52 | ||
53 | /** Compara a diferença das matrizes retornando | |
54 | * a diferença através do MSE | |
55 | * | |
56 | * * Obs: Imagem 1 e imagem 2 devem ter o mesmo tamanho; | |
57 | */ | |
58 | static int comparaMatrizes(matriz * imagem1, matriz * imagem2) { | |
59 | int soma = 0; | |
60 | ||
61 | int pixel1, pixel2; | |
62 | int i, tamanho = imagem1->altura * imagem1->largura; | |
63 | for (i = 0; i < tamanho; i++) { | |
64 | pixel1 = *(imagem1->dadosM + i); | |
65 | pixel2 = *(imagem2->dadosM + i); | |
66 | ||
67 | subtracao = pixel1 - pixel2; | |
68 | soma += subtracao * subtracao; | |
69 | } | |
70 | ||
71 | return soma / tamanho; | |
72 | } |