Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** Retorna a matriz resultado da busca
- */
- matriz busca(matriz *original, matriz *recorte) {
- matriz * localizada;
- copiarMatriz(original, localizada);
- matriz * recorteMaisProximo;
- matriz * recorteDaOriginal;
- unsigned int mseMenor, mseTemporario;
- unsigned int xDoMenor, yDoMenor;
- for (i = 0; i < original->altura - recorte->altura + 1; i++) {
- for(j = 0; j < original->largura - recorte->largura + 1; j++) {
- // OU
- // dando o tamanho
- recorte(original, recorteDaOriginal, i, j, tamanho do recorte, tamanho do recorte);
- // OU
- // dando coordenadas iniciais e finais
- recorte(original, recorteDaOriginal, i, j, i + tamanho do recorte, j + tamanho do recorte);
- mseTemporario = comparaMatrizes(recorteDaOriginal, recorte);
- if (mseTemporario < mseMenor) {
- mseMenor = mseTemporario;
- recorteMaisProximo = recorteDaOriginal;
- xDoMenor = i;
- yDoMenor = j;
- }
- }
- }
- marcarMatriz(localizada, recorteMaisProximo, xDoMenor, yDoMenor);
- return &localizada;
- }
- /** Copia a 'original', 'na cópia'
- */
- void copiarMatriz(matriz * original, matriz * copia) {
- copia->altura = original->altura;
- copia->largura = original->largura;
- copia->dadosM = vocês tem uma função que faz isso!;
- int i;
- int tamanho = original->altura * original->largura;
- for (i = 0; i < tamanho; i++){
- *(copia.dadosM + i) = *(original->dadosM + i);
- }
- }
- /** Compara a diferença das matrizes retornando
- * a diferença através do MSE
- *
- * * Obs: Imagem 1 e imagem 2 devem ter o mesmo tamanho;
- */
- static int comparaMatrizes(matriz * imagem1, matriz * imagem2) {
- int soma = 0;
- int pixel1, pixel2;
- int i, tamanho = imagem1->altura * imagem1->largura;
- for (i = 0; i < tamanho; i++) {
- pixel1 = *(imagem1->dadosM + i);
- pixel2 = *(imagem2->dadosM + i);
- subtracao = pixel1 - pixel2;
- soma += subtracao * subtracao;
- }
- return soma / tamanho;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement