g_free(sd);
}
-#if 0
-static void image_sim_channel_expand(guint8 *pix, gint len)
-{
- guint8 l, h;
- gint i;
- gdouble scale;
-
- /* set the start values */
- l = h = pix[0];
-
- /* find min/max */
- for (i = 0; i < len; i++)
- {
- if (pix[i] < l) l = pix[i];
- if (pix[i] > h) h = pix[i];
- }
-
- /* calc scale from range */
- if (l != h)
- {
- scale = 255.0 / (gdouble)(h - l);
- }
- else
- {
- scale = 1.0;
- }
-
- for (i = 0; i < len; i++)
- {
- pix[i] = (guint8)((gdouble)pix[i] - l * scale);
- }
-}
-#endif
-
static int image_sim_channel_eq_sort_cb(const void *a, const void *b)
{
gint *pa = (void *)a;
gint n;
n = buf[p];
- p+= 2;
+ p += 2;
pix[n] = (guint8)(255 * i / len);
}
static void image_sim_channel_norm(guint8 *pix, gint len)
{
- guint8 l, h;
+ guint8 l, h, delta;
gint i;
gdouble scale;
if (pix[i] > h) h = pix[i];
}
- scale = (h-l !=0) ? 255.0 / (gdouble)(h - l) : 1.0;
+ delta = h - l;
+ scale = (delta != 0) ? 255.0 / (gdouble)(delta) : 1.0;
for (i = 0; i < len; i++)
{
guchar *p;
gint i;
gint j;
- gint x_inc, y_inc;
+ gint x_inc, y_inc, xy_inc;
gint xs, ys;
gint x_small = FALSE; /* if less than 32 w or h, set TRUE */
y_small = TRUE;
}
+ xy_inc = x_inc * y_inc;
+
j = 0;
for (ys = 0; ys < 32; ys++)
gint x, y;
gint r, g, b;
gint t;
+ guchar *xpos;
if (x_small) i = (gdouble)w / 32 * xs;
r = g = b = 0;
+ xpos = pix + (i * p_step);
for (y = j; y < j + y_inc; y++)
{
- p = pix + (y * rs) + (i * p_step);
+ p = xpos + (y * rs);
for (x = i; x < i + x_inc; x++)
{
r += *p; p++;
}
}
- t = x_inc * y_inc;
- r /= t;
- g /= t;
- b /= t;
+ r /= xy_inc;
+ g /= xy_inc;
+ b /= xy_inc;
t = ys * 32 + xs;
sd->avg_r[t] = r;
if (!a || !b || !a->filled || !b->filled) return 0.0;
-
min = 1.0 - min;
sim = 0.0;
ld = 0;
- for (j = 0; j < 1024; j+= 32)
+ for (j = 0; j < 1024; j += 32)
{
for (i = j; i < j + 32; i++)
{
min = 1.0 - min;
sim = 0.0;
- for (j = 0; j < 1024; j+= 32)
+ for (j = 0; j < 1024; j += 32)
{
for (i = j; i < j + 32; i++)
{