ScaleQuantumToMap(GetGreenPixelComponent(p));
grays[ScaleQuantumToMap(GetBluePixelComponent(p))].blue=
ScaleQuantumToMap(GetBluePixelComponent(p));
- if (image->matte != MagickFalse)
- grays[ScaleQuantumToMap(GetOpacityPixelComponent(p))].opacity=
- ScaleQuantumToMap(GetOpacityPixelComponent(p));
if (image->colorspace == CMYKColorspace)
grays[ScaleQuantumToMap(GetIndexPixelComponent(indexes+x))].index=
ScaleQuantumToMap(GetIndexPixelComponent(indexes+x));
+ if (image->matte != MagickFalse)
+ grays[ScaleQuantumToMap(GetOpacityPixelComponent(p))].opacity=
+ ScaleQuantumToMap(GetOpacityPixelComponent(p));
p++;
}
}
for (i=0; i <= (ssize_t) MaxMap; i++)
{
if (grays[i].red != ~0U)
- grays[gray.red++].red=grays[i].red;
+ grays[(ssize_t) gray.red++].red=grays[i].red;
if (grays[i].green != ~0U)
- grays[gray.green++].green=grays[i].green;
+ grays[(ssize_t) gray.green++].green=grays[i].green;
if (grays[i].blue != ~0U)
- grays[gray.blue++].blue=grays[i].blue;
- if (image->matte != MagickFalse)
- if (grays[i].opacity != ~0U)
- grays[gray.opacity++].opacity=grays[i].opacity;
+ grays[(ssize_t) gray.blue++].blue=grays[i].blue;
if (image->colorspace == CMYKColorspace)
if (grays[i].index != ~0U)
- grays[gray.index++].index=grays[i].index;
+ grays[(ssize_t) gray.index++].index=grays[i].index;
+ if (image->matte != MagickFalse)
+ if (grays[i].opacity != ~0U)
+ grays[(ssize_t) gray.opacity++].opacity=grays[i].opacity;
}
/*
Allocate spatial dependence matrix.
number_grays=gray.green;
if (gray.blue > number_grays)
number_grays=gray.blue;
- if (image->matte != MagickFalse)
- if (gray.opacity > number_grays)
- number_grays=gray.opacity;
if (image->colorspace == CMYKColorspace)
if (gray.index > number_grays)
number_grays=gray.index;
+ if (image->matte != MagickFalse)
+ if (gray.opacity > number_grays)
+ number_grays=gray.opacity;
cooccurrence=(ChannelStatistics **) AcquireQuantumMemory(number_grays,
sizeof(*cooccurrence));
density_x=(ChannelStatistics *) AcquireQuantumMemory(2*(number_grays+1),
*/
status=MagickTrue;
image_view=AcquireCacheView(image);
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp parallel for schedule(dynamic,4) shared(status)
-#endif
for (y=0; y < (ssize_t) image->rows; y++)
{
register const IndexPacket
x;
ssize_t
+ i,
offset,
u,
v;
if (status == MagickFalse)
continue;
p=GetCacheViewVirtualPixels(image_view,-(ssize_t) distance,y,image->columns+
- 2*distance,distance+2,exception);
+ 2*distance,distance+1,exception);
if (p == (const PixelPacket *) NULL)
{
status=MagickFalse;
v++;
cooccurrence[u][v].direction[i].blue++;
cooccurrence[v][u].direction[i].blue++;
- if (image->matte != MagickFalse)
+ if (image->colorspace == CMYKColorspace)
{
u=0;
v=0;
- while (grays[u].opacity != ScaleQuantumToMap(GetOpacityPixelComponent(p)))
+ while (grays[u].index != ScaleQuantumToMap(GetIndexPixelComponent(indexes+x)))
u++;
- while (grays[v].opacity != ScaleQuantumToMap((p+offset)->opacity))
+ while (grays[v].index != ScaleQuantumToMap(GetIndexPixelComponent(indexes+x+offset)))
v++;
- cooccurrence[u][v].direction[i].opacity++;
- cooccurrence[v][u].direction[i].opacity++;
+ cooccurrence[u][v].direction[i].index++;
+ cooccurrence[v][u].direction[i].index++;
}
- if (image->colorspace == CMYKColorspace)
+ if (image->matte != MagickFalse)
{
u=0;
v=0;
- while (grays[u].index != ScaleQuantumToMap(GetIndexPixelComponent(indexes+x)))
+ while (grays[u].opacity != ScaleQuantumToMap(GetOpacityPixelComponent(p)))
u++;
- while (grays[v].index != ScaleQuantumToMap(GetIndexPixelComponent(indexes+x+offset)))
+ while (grays[v].opacity != ScaleQuantumToMap((p+offset)->opacity))
v++;
- cooccurrence[u][v].direction[i].index++;
- cooccurrence[v][u].direction[i].index++;
+ cooccurrence[u][v].direction[i].opacity++;
+ cooccurrence[v][u].direction[i].opacity++;
}
}
p++;
/*
Normalize spatial dependence matrix.
*/
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp parallel for schedule(dynamic,4) shared(status)
-#endif
for (i=0; i < 4; i++)
{
double
normalize;
+ register ssize_t
+ y;
+
switch (i)
{
case 0:
break;
}
}
+ normalize=1.0/(fabs((double) normalize) <= MagickEpsilon ? 1.0 : normalize);
for (y=0; y < (ssize_t) number_grays; y++)
{
register ssize_t
for (x=0; x < (ssize_t) number_grays; x++)
{
- cooccurrence[x][y].direction[i].red/=normalize;
- cooccurrence[x][y].direction[i].green/=normalize;
- cooccurrence[x][y].direction[i].blue/=normalize;
- if (image->matte != MagickFalse)
- cooccurrence[x][y].direction[i].opacity/=normalize;
+ cooccurrence[x][y].direction[i].red*=normalize;
+ cooccurrence[x][y].direction[i].green*=normalize;
+ cooccurrence[x][y].direction[i].blue*=normalize;
if (image->colorspace == CMYKColorspace)
- cooccurrence[x][y].direction[i].index/=normalize;
+ cooccurrence[x][y].direction[i].index*=normalize;
+ if (image->matte != MagickFalse)
+ cooccurrence[x][y].direction[i].opacity*=normalize;
}
}
}
channel_features[BlueChannel].angular_second_moment[i]+=
cooccurrence[x][y].direction[i].blue*
cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].angular_second_moment[i]+=
- cooccurrence[x][y].direction[i].opacity*
- cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
channel_features[BlackChannel].angular_second_moment[i]+=
cooccurrence[x][y].direction[i].index*
cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].angular_second_moment[i]+=
+ cooccurrence[x][y].direction[i].opacity*
+ cooccurrence[x][y].direction[i].opacity;
/*
Correlation: measure of linear-dependencies in the image.
*/
sum[y].direction[i].red+=cooccurrence[x][y].direction[i].red;
sum[y].direction[i].green+=cooccurrence[x][y].direction[i].green;
sum[y].direction[i].blue+=cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- sum[y].direction[i].opacity+=cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
sum[y].direction[i].index+=cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ sum[y].direction[i].opacity+=cooccurrence[x][y].direction[i].opacity;
correlation.direction[i].red+=x*y*cooccurrence[x][y].direction[i].red;
correlation.direction[i].green+=x*y*
cooccurrence[x][y].direction[i].green;
correlation.direction[i].blue+=x*y*
cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- correlation.direction[i].opacity+=x*y*
- cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
correlation.direction[i].index+=x*y*
cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ correlation.direction[i].opacity+=x*y*
+ cooccurrence[x][y].direction[i].opacity;
/*
Inverse Difference Moment.
*/
cooccurrence[x][y].direction[i].green/((y-x)*(y-x)+1);
channel_features[BlueChannel].inverse_difference_moment[i]+=
cooccurrence[x][y].direction[i].blue/((y-x)*(y-x)+1);
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].inverse_difference_moment[i]+=
- cooccurrence[x][y].direction[i].opacity/((y-x)*(y-x)+1);
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].inverse_difference_moment[i]+=
cooccurrence[x][y].direction[i].index/((y-x)*(y-x)+1);
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].inverse_difference_moment[i]+=
+ cooccurrence[x][y].direction[i].opacity/((y-x)*(y-x)+1);
/*
Sum average.
*/
cooccurrence[x][y].direction[i].green;
density_xy[y+x+2].direction[i].blue+=
cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- density_xy[y+x+2].direction[i].opacity+=
- cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
density_xy[y+x+2].direction[i].index+=
cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ density_xy[y+x+2].direction[i].opacity+=
+ cooccurrence[x][y].direction[i].opacity;
/*
Entropy.
*/
channel_features[BlueChannel].entropy[i]-=
cooccurrence[x][y].direction[i].blue*
log10(cooccurrence[x][y].direction[i].blue+MagickEpsilon);
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].entropy[i]-=
- cooccurrence[x][y].direction[i].opacity*
- log10(cooccurrence[x][y].direction[i].opacity+MagickEpsilon);
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].entropy[i]-=
cooccurrence[x][y].direction[i].index*
log10(cooccurrence[x][y].direction[i].index+MagickEpsilon);
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].entropy[i]-=
+ cooccurrence[x][y].direction[i].opacity*
+ log10(cooccurrence[x][y].direction[i].opacity+MagickEpsilon);
/*
Information Measures of Correlation.
*/
density_x[x].direction[i].red+=cooccurrence[x][y].direction[i].red;
density_x[x].direction[i].green+=cooccurrence[x][y].direction[i].green;
density_x[x].direction[i].blue+=cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- density_x[x].direction[i].opacity+=
- cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
density_x[x].direction[i].index+=
cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ density_x[x].direction[i].opacity+=
+ cooccurrence[x][y].direction[i].opacity;
density_y[y].direction[i].red+=cooccurrence[x][y].direction[i].red;
density_y[y].direction[i].green+=cooccurrence[x][y].direction[i].green;
density_y[y].direction[i].blue+=cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- density_y[y].direction[i].opacity+=
- cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
density_y[y].direction[i].index+=
cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ density_y[y].direction[i].opacity+=
+ cooccurrence[x][y].direction[i].opacity;
}
mean.direction[i].red+=y*sum[y].direction[i].red;
sum_squares.direction[i].red+=y*y*sum[y].direction[i].red;
sum_squares.direction[i].green+=y*y*sum[y].direction[i].green;
mean.direction[i].blue+=y*sum[y].direction[i].blue;
sum_squares.direction[i].blue+=y*y*sum[y].direction[i].blue;
- if (image->matte != MagickFalse)
- {
- mean.direction[i].opacity+=y*sum[y].direction[i].opacity;
- sum_squares.direction[i].opacity+=y*y*sum[y].direction[i].opacity;
- }
if (image->colorspace == CMYKColorspace)
{
mean.direction[i].index+=y*sum[y].direction[i].index;
sum_squares.direction[i].index+=y*y*sum[y].direction[i].index;
}
+ if (image->matte != MagickFalse)
+ {
+ mean.direction[i].opacity+=y*sum[y].direction[i].opacity;
+ sum_squares.direction[i].opacity+=y*y*sum[y].direction[i].opacity;
+ }
}
/*
Correlation: measure of linear-dependencies in the image.
(mean.direction[i].blue*mean.direction[i].blue))*sqrt(
sum_squares.direction[i].blue-(mean.direction[i].blue*
mean.direction[i].blue)));
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].correlation[i]=
- (correlation.direction[i].opacity-mean.direction[i].opacity*
- mean.direction[i].opacity)/(sqrt(sum_squares.direction[i].opacity-
- (mean.direction[i].opacity*mean.direction[i].opacity))*sqrt(
- sum_squares.direction[i].opacity-(mean.direction[i].opacity*
- mean.direction[i].opacity)));
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].correlation[i]=
(correlation.direction[i].index-mean.direction[i].index*
(mean.direction[i].index*mean.direction[i].index))*sqrt(
sum_squares.direction[i].index-(mean.direction[i].index*
mean.direction[i].index)));
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].correlation[i]=
+ (correlation.direction[i].opacity-mean.direction[i].opacity*
+ mean.direction[i].opacity)/(sqrt(sum_squares.direction[i].opacity-
+ (mean.direction[i].opacity*mean.direction[i].opacity))*sqrt(
+ sum_squares.direction[i].opacity-(mean.direction[i].opacity*
+ mean.direction[i].opacity)));
}
/*
Compute more texture features.
x*density_xy[x].direction[i].green;
channel_features[BlueChannel].sum_average[i]+=
x*density_xy[x].direction[i].blue;
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].sum_average[i]+=
- x*density_xy[x].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].sum_average[i]+=
x*density_xy[x].direction[i].index;
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].sum_average[i]+=
+ x*density_xy[x].direction[i].opacity;
/*
Sum entropy.
*/
channel_features[BlueChannel].sum_entropy[i]-=
density_xy[x].direction[i].blue*
log10(density_xy[x].direction[i].blue+MagickEpsilon);
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].sum_entropy[i]-=
- density_xy[x].direction[i].opacity*
- log10(density_xy[x].direction[i].opacity+MagickEpsilon);
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].sum_entropy[i]-=
density_xy[x].direction[i].index*
log10(density_xy[x].direction[i].index+MagickEpsilon);
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].sum_entropy[i]-=
+ density_xy[x].direction[i].opacity*
+ log10(density_xy[x].direction[i].opacity+MagickEpsilon);
/*
Sum variance.
*/
(x-channel_features[BlueChannel].sum_entropy[i])*
(x-channel_features[BlueChannel].sum_entropy[i])*
density_xy[x].direction[i].blue;
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].sum_variance[i]+=
- (x-channel_features[OpacityChannel].sum_entropy[i])*
- (x-channel_features[OpacityChannel].sum_entropy[i])*
- density_xy[x].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].sum_variance[i]+=
(x-channel_features[IndexChannel].sum_entropy[i])*
(x-channel_features[IndexChannel].sum_entropy[i])*
density_xy[x].direction[i].index;
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].sum_variance[i]+=
+ (x-channel_features[OpacityChannel].sum_entropy[i])*
+ (x-channel_features[OpacityChannel].sum_entropy[i])*
+ density_xy[x].direction[i].opacity;
}
}
/*
(y-mean.direction[i].green+1)*cooccurrence[x][y].direction[i].green;
variance.direction[i].blue+=(y-mean.direction[i].blue+1)*
(y-mean.direction[i].blue+1)*cooccurrence[x][y].direction[i].blue;
+ if (image->colorspace == CMYKColorspace)
+ variance.direction[i].index+=(y-mean.direction[i].index+1)*
+ (y-mean.direction[i].index+1)*cooccurrence[x][y].direction[i].index;
if (image->matte != MagickFalse)
variance.direction[i].opacity+=(y-mean.direction[i].opacity+1)*
(y-mean.direction[i].opacity+1)*
cooccurrence[x][y].direction[i].opacity;
- if (image->colorspace == CMYKColorspace)
- variance.direction[i].index+=(y-mean.direction[i].index+1)*
- (y-mean.direction[i].index+1)*cooccurrence[x][y].direction[i].index;
/*
Sum average / Difference Variance.
*/
cooccurrence[x][y].direction[i].green;
density_xy[MagickAbsoluteValue(y-x)].direction[i].blue+=
cooccurrence[x][y].direction[i].blue;
- if (image->matte != MagickFalse)
- density_xy[MagickAbsoluteValue(y-x)].direction[i].opacity+=
- cooccurrence[x][y].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
density_xy[MagickAbsoluteValue(y-x)].direction[i].index+=
cooccurrence[x][y].direction[i].index;
+ if (image->matte != MagickFalse)
+ density_xy[MagickAbsoluteValue(y-x)].direction[i].opacity+=
+ cooccurrence[x][y].direction[i].opacity;
/*
Information Measures of Correlation.
*/
log10(cooccurrence[x][y].direction[i].green+MagickEpsilon);
entropy_xy.direction[i].blue-=cooccurrence[x][y].direction[i].blue*
log10(cooccurrence[x][y].direction[i].blue+MagickEpsilon);
+ if (image->colorspace == CMYKColorspace)
+ entropy_xy.direction[i].index-=cooccurrence[x][y].direction[i].index*
+ log10(cooccurrence[x][y].direction[i].index+MagickEpsilon);
if (image->matte != MagickFalse)
entropy_xy.direction[i].opacity-=
cooccurrence[x][y].direction[i].opacity*log10(
cooccurrence[x][y].direction[i].opacity+MagickEpsilon);
- if (image->colorspace == CMYKColorspace)
- entropy_xy.direction[i].index-=cooccurrence[x][y].direction[i].index*
- log10(cooccurrence[x][y].direction[i].index+MagickEpsilon);
entropy_xy1.direction[i].red-=(cooccurrence[x][y].direction[i].red*
log10(density_x[x].direction[i].red*density_y[y].direction[i].red+
MagickEpsilon));
entropy_xy1.direction[i].blue-=(cooccurrence[x][y].direction[i].blue*
log10(density_x[x].direction[i].blue*density_y[y].direction[i].blue+
MagickEpsilon));
- if (image->matte != MagickFalse)
- entropy_xy1.direction[i].opacity-=(
- cooccurrence[x][y].direction[i].opacity*log10(
- density_x[x].direction[i].opacity*density_y[y].direction[i].opacity+
- MagickEpsilon));
if (image->colorspace == CMYKColorspace)
entropy_xy1.direction[i].index-=(
cooccurrence[x][y].direction[i].index*log10(
density_x[x].direction[i].index*density_y[y].direction[i].index+
MagickEpsilon));
+ if (image->matte != MagickFalse)
+ entropy_xy1.direction[i].opacity-=(
+ cooccurrence[x][y].direction[i].opacity*log10(
+ density_x[x].direction[i].opacity*density_y[y].direction[i].opacity+
+ MagickEpsilon));
entropy_xy2.direction[i].red-=(density_x[x].direction[i].red*
density_y[y].direction[i].red*log10(density_x[x].direction[i].red*
density_y[y].direction[i].red+MagickEpsilon));
entropy_xy2.direction[i].blue-=(density_x[x].direction[i].blue*
density_y[y].direction[i].blue*log10(density_x[x].direction[i].blue*
density_y[y].direction[i].blue+MagickEpsilon));
- if (image->matte != MagickFalse)
- entropy_xy2.direction[i].opacity-=(density_x[x].direction[i].opacity*
- density_y[y].direction[i].opacity*log10(
- density_x[x].direction[i].opacity*density_y[y].direction[i].opacity+
- MagickEpsilon));
if (image->colorspace == CMYKColorspace)
entropy_xy2.direction[i].index-=(density_x[x].direction[i].index*
density_y[y].direction[i].index*log10(
density_x[x].direction[i].index*density_y[y].direction[i].index+
MagickEpsilon));
+ if (image->matte != MagickFalse)
+ entropy_xy2.direction[i].opacity-=(density_x[x].direction[i].opacity*
+ density_y[y].direction[i].opacity*log10(
+ density_x[x].direction[i].opacity*density_y[y].direction[i].opacity+
+ MagickEpsilon));
}
}
channel_features[RedChannel].variance_sum_of_squares[i]=
variance.direction[i].green;
channel_features[BlueChannel].variance_sum_of_squares[i]=
variance.direction[i].blue;
- if (image->matte != MagickFalse)
- channel_features[RedChannel].variance_sum_of_squares[i]=
- variance.direction[i].opacity;
if (image->colorspace == CMYKColorspace)
channel_features[RedChannel].variance_sum_of_squares[i]=
variance.direction[i].index;
+ if (image->matte != MagickFalse)
+ channel_features[RedChannel].variance_sum_of_squares[i]=
+ variance.direction[i].opacity;
}
/*
Compute more texture features.
variance.direction[i].red+=density_xy[x].direction[i].red;
variance.direction[i].green+=density_xy[x].direction[i].green;
variance.direction[i].blue+=density_xy[x].direction[i].blue;
- if (image->matte != MagickFalse)
- variance.direction[i].opacity+=density_xy[x].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
variance.direction[i].index+=density_xy[x].direction[i].index;
+ if (image->matte != MagickFalse)
+ variance.direction[i].opacity+=density_xy[x].direction[i].opacity;
sum_squares.direction[i].red+=density_xy[x].direction[i].red*
density_xy[x].direction[i].red;
sum_squares.direction[i].green+=density_xy[x].direction[i].green*
density_xy[x].direction[i].green;
sum_squares.direction[i].blue+=density_xy[x].direction[i].blue*
density_xy[x].direction[i].blue;
- if (image->matte != MagickFalse)
- sum_squares.direction[i].opacity+=density_xy[x].direction[i].opacity*
- density_xy[x].direction[i].opacity;
if (image->colorspace == CMYKColorspace)
sum_squares.direction[i].index+=density_xy[x].direction[i].index*
density_xy[x].direction[i].index;
+ if (image->matte != MagickFalse)
+ sum_squares.direction[i].opacity+=density_xy[x].direction[i].opacity*
+ density_xy[x].direction[i].opacity;
/*
Difference entropy.
*/
channel_features[BlueChannel].difference_entropy[i]-=
density_xy[x].direction[i].blue*
log10(density_xy[x].direction[i].blue+MagickEpsilon);
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].difference_entropy[i]-=
- density_xy[x].direction[i].opacity*
- log10(density_xy[x].direction[i].opacity+MagickEpsilon);
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].difference_entropy[i]-=
density_xy[x].direction[i].index*
log10(density_xy[x].direction[i].index+MagickEpsilon);
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].difference_entropy[i]-=
+ density_xy[x].direction[i].opacity*
+ log10(density_xy[x].direction[i].opacity+MagickEpsilon);
/*
Information Measures of Correlation.
*/
log10(density_x[x].direction[i].green+MagickEpsilon));
entropy_x.direction[i].blue-=(density_x[x].direction[i].blue*
log10(density_x[x].direction[i].blue+MagickEpsilon));
- if (image->matte != MagickFalse)
- entropy_x.direction[i].opacity-=(density_x[x].direction[i].opacity*
- log10(density_x[x].direction[i].opacity+MagickEpsilon));
if (image->colorspace == CMYKColorspace)
entropy_x.direction[i].index-=(density_x[x].direction[i].index*
log10(density_x[x].direction[i].index+MagickEpsilon));
- entropy_y.direction[i].red-=(density_y[y].direction[i].red*
- log10(density_y[y].direction[i].red+MagickEpsilon));
- entropy_y.direction[i].green-=(density_y[y].direction[i].green*
- log10(density_y[y].direction[i].green+MagickEpsilon));
- entropy_y.direction[i].blue-=(density_y[y].direction[i].blue*
- log10(density_y[y].direction[i].blue+MagickEpsilon));
if (image->matte != MagickFalse)
- entropy_y.direction[i].opacity-=(density_y[y].direction[i].opacity*
- log10(density_y[y].direction[i].opacity+MagickEpsilon));
+ entropy_x.direction[i].opacity-=(density_x[x].direction[i].opacity*
+ log10(density_x[x].direction[i].opacity+MagickEpsilon));
+ entropy_y.direction[i].red-=(density_y[x].direction[i].red*
+ log10(density_y[x].direction[i].red+MagickEpsilon));
+ entropy_y.direction[i].green-=(density_y[x].direction[i].green*
+ log10(density_y[x].direction[i].green+MagickEpsilon));
+ entropy_y.direction[i].blue-=(density_y[x].direction[i].blue*
+ log10(density_y[x].direction[i].blue+MagickEpsilon));
if (image->colorspace == CMYKColorspace)
- entropy_y.direction[i].index-=(density_y[y].direction[i].index*
- log10(density_y[y].direction[i].index+MagickEpsilon));
+ entropy_y.direction[i].index-=(density_y[x].direction[i].index*
+ log10(density_y[x].direction[i].index+MagickEpsilon));
+ if (image->matte != MagickFalse)
+ entropy_y.direction[i].opacity-=(density_y[x].direction[i].opacity*
+ log10(density_y[x].direction[i].opacity+MagickEpsilon));
}
/*
Difference variance.
(entropy_xy.direction[i].blue-entropy_xy1.direction[i].blue)/
(entropy_x.direction[i].blue > entropy_y.direction[i].blue ?
entropy_x.direction[i].blue : entropy_y.direction[i].blue);
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].measure_of_correlation_1[i]=
- (entropy_xy.direction[i].opacity-entropy_xy1.direction[i].opacity)/
- (entropy_x.direction[i].opacity > entropy_y.direction[i].opacity ?
- entropy_x.direction[i].opacity : entropy_y.direction[i].opacity);
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].measure_of_correlation_1[i]=
(entropy_xy.direction[i].index-entropy_xy1.direction[i].index)/
(entropy_x.direction[i].index > entropy_y.direction[i].index ?
entropy_x.direction[i].index : entropy_y.direction[i].index);
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].measure_of_correlation_1[i]=
+ (entropy_xy.direction[i].opacity-entropy_xy1.direction[i].opacity)/
+ (entropy_x.direction[i].opacity > entropy_y.direction[i].opacity ?
+ entropy_x.direction[i].opacity : entropy_y.direction[i].opacity);
channel_features[RedChannel].measure_of_correlation_2[i]=
(sqrt(fabs(1.0-exp(-2.0*(entropy_xy2.direction[i].red-
entropy_xy.direction[i].red)))));
channel_features[BlueChannel].measure_of_correlation_2[i]=
(sqrt(fabs(1.0-exp(-2.0*(entropy_xy2.direction[i].blue-
entropy_xy.direction[i].blue)))));
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].measure_of_correlation_2[i]=
- (sqrt(fabs(1.0-exp(-2.0*(entropy_xy2.direction[i].opacity-
- entropy_xy.direction[i].opacity)))));
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].measure_of_correlation_2[i]=
(sqrt(fabs(1.0-exp(-2.0*(entropy_xy2.direction[i].index-
entropy_xy.direction[i].index)))));
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].measure_of_correlation_2[i]=
+ (sqrt(fabs(1.0-exp(-2.0*(entropy_xy2.direction[i].opacity-
+ entropy_xy.direction[i].opacity)))));
}
/*
Compute more texture features.
pixel.direction[i].red+=cooccurrence[x][y].direction[i].red;
pixel.direction[i].green+=cooccurrence[x][y].direction[i].green;
pixel.direction[i].blue+=cooccurrence[x][y].direction[i].blue;
+ if (image->colorspace == CMYKColorspace)
+ pixel.direction[i].index+=cooccurrence[x][y].direction[i].index;
if (image->matte != MagickFalse)
pixel.direction[i].opacity+=
cooccurrence[x][y].direction[i].opacity;
- if (image->colorspace == CMYKColorspace)
- pixel.direction[i].index+=cooccurrence[x][y].direction[i].index;
}
/*
Maximum Correlation Coefficient.
Q[z][y].direction[i].blue+=cooccurrence[z][x].direction[i].blue*
cooccurrence[y][x].direction[i].blue/density_x[z].direction[i].blue/
density_y[x].direction[i].blue;
+ if (image->colorspace == CMYKColorspace)
+ Q[z][y].direction[i].index+=cooccurrence[z][x].direction[i].index*
+ cooccurrence[y][x].direction[i].index/
+ density_x[z].direction[i].index/density_y[x].direction[i].index;
if (image->matte != MagickFalse)
Q[z][y].direction[i].opacity+=
cooccurrence[z][x].direction[i].opacity*
cooccurrence[y][x].direction[i].opacity/
density_x[z].direction[i].opacity/
density_y[x].direction[i].opacity;
- if (image->colorspace == CMYKColorspace)
- Q[z][y].direction[i].index+=cooccurrence[z][x].direction[i].index*
- cooccurrence[y][x].direction[i].index/
- density_x[z].direction[i].index/density_y[x].direction[i].index;
}
}
channel_features[RedChannel].contrast[i]+=z*z*pixel.direction[i].red;
channel_features[GreenChannel].contrast[i]+=z*z*pixel.direction[i].green;
channel_features[BlueChannel].contrast[i]+=z*z*pixel.direction[i].blue;
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].contrast[i]+=z*z*
- pixel.direction[i].opacity;
if (image->colorspace == CMYKColorspace)
channel_features[BlackChannel].contrast[i]+=z*z*
pixel.direction[i].index;
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].contrast[i]+=z*z*
+ pixel.direction[i].opacity;
}
/*
Maximum Correlation Coefficient.
sqrt((double) -1.0);
channel_features[BlueChannel].maximum_correlation_coefficient[i]=
sqrt((double) -1.0);
- if (image->matte != MagickFalse)
- channel_features[OpacityChannel].maximum_correlation_coefficient[i]=
- sqrt((double) -1.0);
if (image->colorspace == CMYKColorspace)
channel_features[IndexChannel].maximum_correlation_coefficient[i]=
sqrt((double) -1.0);
+ if (image->matte != MagickFalse)
+ channel_features[OpacityChannel].maximum_correlation_coefficient[i]=
+ sqrt((double) -1.0);
}
/*
Relinquish resources.