Просмотр исходного кода

* measure.c: started writing error/measure functions. First one is RMSD.

git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@2635 92316355-f0b4-4df1-b90c-862c8a59935f
remotes/tiles
sam 16 лет назад
Родитель
Сommit
9a536afd4f
3 измененных файлов: 65 добавлений и 0 удалений
  1. +1
    -0
      pipi/Makefile.am
  2. +62
    -0
      pipi/measure.c
  3. +2
    -0
      pipi/pipi.h

+ 1
- 0
pipi/Makefile.am Просмотреть файл

@@ -25,6 +25,7 @@ libpipi_la_SOURCES = \
codec.c \
resize.c \
dither.c \
measure.c \
test.c \
$(codec_sources) \
filter/blur.c \


+ 62
- 0
pipi/measure.c Просмотреть файл

@@ -0,0 +1,62 @@
/*
* libpipi Proper image processing implementation library
* Copyright (c) 2004-2008 Sam Hocevar <sam@zoy.org>
* All Rights Reserved
*
* $Id$
*
* This library is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details.
*/

/*
* measure.c: distance functions
*/

#include "config.h"
#include "common.h"

#include <math.h>

#include "pipi.h"
#include "pipi_internals.h"

double pipi_measure_rmsd(pipi_image_t *i1, pipi_image_t *i2)
{
pipi_format_t f1, f2;
double ret = 0.0;
float *p1, *p2;
int x, y, w, h;

w = i1->w < i2->w ? i1->w : i2->w;
h = i1->h < i2->h ? i1->h : i2->h;

f1 = i1->last_modified;
f2 = i2->last_modified;

pipi_getpixels(i1, PIPI_PIXELS_Y_F);
pipi_getpixels(i2, PIPI_PIXELS_Y_F);

p1 = (float *)i1->p[PIPI_PIXELS_Y_F].pixels;
p2 = (float *)i2->p[PIPI_PIXELS_Y_F].pixels;

for(y = 0; y < h; y++)
for(x = 0; x < w; x++)
{
float a = p1[y * i1->w + x];
float b = p2[y * i2->w + x];
ret += (a - b) * (a - b);
}

/* TODO: free pixels if they were allocated */

/* Restore original image formats */
i1->last_modified = f1;
i2->last_modified = f2;

return sqrt(ret / (w * h));
}


+ 2
- 0
pipi/pipi.h Просмотреть файл

@@ -59,6 +59,8 @@ extern void pipi_save(pipi_image_t *, const char *);

extern pipi_pixels_t *pipi_getpixels(pipi_image_t *, pipi_format_t);

extern double pipi_measure_rmsd(pipi_image_t *, pipi_image_t *);

extern pipi_image_t *pipi_resize(pipi_image_t *, int, int);

extern pipi_image_t *pipi_gaussian_blur(pipi_image_t *, float);


Загрузка…
Отмена
Сохранить