mirror of https://github.com/GNOME/gimp.git
small optimization by Tobias Lenz.
2005-10-04 Sven Neumann <sven@gimp.org> * app/base/siox.c: small optimization by Tobias Lenz.
This commit is contained in:
parent
73d324225c
commit
ebe1c9f0f3
|
@ -1,3 +1,7 @@
|
||||||
|
2005-10-04 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* app/base/siox.c: small optimization by Tobias Lenz.
|
||||||
|
|
||||||
2005-10-03 Michael Natterer <mitch@gimp.org>
|
2005-10-03 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* app/tools/gimppainttool.c (gimp_paint_tool_color_picked):
|
* app/tools/gimppainttool.c (gimp_paint_tool_color_picked):
|
||||||
|
|
|
@ -143,7 +143,7 @@ stageone (lab *points,
|
||||||
gint left,
|
gint left,
|
||||||
gint right,
|
gint right,
|
||||||
gint depth,
|
gint depth,
|
||||||
GSList **clusters,
|
gint *clusters,
|
||||||
const gfloat *limits)
|
const gfloat *limits)
|
||||||
{
|
{
|
||||||
gint curdim = depth % SIOX_DIMS;
|
gint curdim = depth % SIOX_DIMS;
|
||||||
|
@ -197,9 +197,23 @@ stageone (lab *points,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* create leave */
|
/* create leave */
|
||||||
*clusters =
|
gfloat l = 0;
|
||||||
g_slist_prepend (g_slist_prepend (*clusters, GINT_TO_POINTER (right)),
|
gfloat a = 0;
|
||||||
GINT_TO_POINTER (left));
|
gfloat b = 0;
|
||||||
|
|
||||||
|
points[*clusters].cardinality = right - left;
|
||||||
|
|
||||||
|
for (; left < right; ++left)
|
||||||
|
{
|
||||||
|
l += points[left].l;
|
||||||
|
a += points[left].a;
|
||||||
|
b += points[left].b;
|
||||||
|
}
|
||||||
|
|
||||||
|
points[*clusters].l = l / points[*clusters].cardinality;
|
||||||
|
points[*clusters].a = a / points[*clusters].cardinality;
|
||||||
|
points[*clusters].b = b / points[*clusters].cardinality;
|
||||||
|
++(*clusters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,9 +337,8 @@ create_signature (lab *input,
|
||||||
const gfloat *limits)
|
const gfloat *limits)
|
||||||
{
|
{
|
||||||
GSList *clusters = NULL;
|
GSList *clusters = NULL;
|
||||||
lab *centroids;
|
|
||||||
lab *rval;
|
lab *rval;
|
||||||
gint size;
|
gint size = 0;
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
if (length < 1)
|
if (length < 1)
|
||||||
|
@ -334,39 +347,7 @@ create_signature (lab *input,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
stageone (input, 0, length, 0, &clusters, limits);
|
stageone (input, 0, length, 0, &size, limits);
|
||||||
size = g_slist_length(clusters) / 2;
|
|
||||||
centroids = g_new (lab, size);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (clusters != NULL)
|
|
||||||
{
|
|
||||||
gfloat l = 0;
|
|
||||||
gfloat a = 0;
|
|
||||||
gfloat b = 0;
|
|
||||||
gint k;
|
|
||||||
gint left, right;
|
|
||||||
|
|
||||||
left = GPOINTER_TO_INT (clusters->data);
|
|
||||||
clusters = g_slist_delete_link (clusters, clusters);
|
|
||||||
right = GPOINTER_TO_INT (clusters->data);
|
|
||||||
clusters = g_slist_delete_link (clusters, clusters);
|
|
||||||
|
|
||||||
for (k = left; k < right; k++)
|
|
||||||
{
|
|
||||||
l += input[k].l;
|
|
||||||
a += input[k].a;
|
|
||||||
b += input[k].b;
|
|
||||||
}
|
|
||||||
|
|
||||||
centroids[i].l = l / (right - left);
|
|
||||||
centroids[i].a = a / (right - left);
|
|
||||||
centroids[i].b = b / (right - left);
|
|
||||||
|
|
||||||
centroids[i].cardinality = right - left;
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SIOX_DEBUG
|
#ifdef SIOX_DEBUG
|
||||||
g_printerr ("siox.c: step #1 -> %d clusters\n", size);
|
g_printerr ("siox.c: step #1 -> %d clusters\n", size);
|
||||||
|
@ -374,7 +355,7 @@ create_signature (lab *input,
|
||||||
|
|
||||||
clusters = NULL;
|
clusters = NULL;
|
||||||
|
|
||||||
stagetwo (centroids, 0, size, 0, &clusters, limits, length * 0.001f);
|
stagetwo (input, 0, size, 0, &clusters, limits, length * 0.001f);
|
||||||
|
|
||||||
size = g_slist_length(clusters);
|
size = g_slist_length(clusters);
|
||||||
rval = g_new (lab, size);
|
rval = g_new (lab, size);
|
||||||
|
|
Loading…
Reference in New Issue