View difference between Paste ID: y9z6FaMF and vFQSfkVg
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
}