{
imageColumns = (unsigned int) image->columns;
imageRows = (unsigned int) image->rows;
- iRadius = (image->rows > image->columns ? image->rows : image->columns) * 0.002f * radius; // Normalized radius, 100% gives blur radius of 20% of the largest dimension
+ iRadius = (cl_int) radius;
passes = ((1.0f * imageColumns) * imageColumns * iRadius) / 4000000000.0f;
passes = (passes < 1) ? 1: passes;
clStatus=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(cl_mem),(void *)&imageBuffer);
clStatus|=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(cl_mem),(void *)&filteredImageBuffer);
clStatus|=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(cl_mem),(void *)&tempImageBuffer);
- clStatus|=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(int),(void *)&iRadius);
+ clStatus|=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(cl_int),(void *)&iRadius);
clStatus|=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(unsigned int),(void *)&imageColumns);
clStatus|=clEnv->library->clSetKernelArg(blurRowKernel,i++,sizeof(unsigned int),(void *)&imageRows);
return NULL;
}
+MagickExport Image *AccelerateLocalContrastImage(
+ const Image *magick_unused(image),const double magick_unused(radius),
+ const double magick_unused(strength),ExceptionInfo *magick_unused(exception))
+{
+ magick_unreferenced(image);
+ magick_unreferenced(radius);
+ magick_unreferenced(strength);
+ magick_unreferenced(exception);
+
+ return NULL;
+}
+
MagickExport Image *AccelerateRotationalBlurImage(
const Image *magick_unused(image),const ChannelType magick_unused(channel),
const double magick_unused(angle),ExceptionInfo *magick_unused(exception))
%
% o channel: the channel type.
%
-% o radius: the radius of the Gaussian blur, in percentage with 100%
-% resulting in a blur radius of 20% of largest dimension.
+% o radius: the radius of the Gaussian, in pixels, not counting
+% the center pixel.
%
% o strength: the strength of the blur mask in percentage.
%
*interImage_info;
ssize_t
- rad,
scanLineSize,
thread_count;
}
#endif
scanLineSize=(ssize_t) MagickMax(image->columns,image->rows);
- rad=(ssize_t) scanLineSize*0.002f*radius;
- scanLineSize+=(2*rad);
+ scanLineSize+=(2*radius);
scanLinePixels_info=AcquireVirtualMemory(thread_count*scanLineSize,
sizeof(*scanLinePixels));
if (scanLinePixels_info == (MemoryInfo *) NULL)
}
scanLinePixels=(float *) GetVirtualMemoryBlob(scanLinePixels_info);
/* Create intermediate buffer */
- interImage_info=AcquireVirtualMemory((image->rows+(2*rad))*image->columns,
+ interImage_info=AcquireVirtualMemory((image->rows+(2*radius))*image->columns,
sizeof(*interImage));
if (interImage_info == (MemoryInfo *) NULL)
{
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
}
interImage=(float *) GetVirtualMemoryBlob(interImage_info);
- totalWeight=(rad+1)*(rad+1);
+ totalWeight=(radius+1)*(radius+1);
/* Vertical Pass */
{
pixels+=scanLineSize*omp_get_thread_num();
#endif
pix=pixels;
- p=GetCacheViewVirtualPixels(image_view,x,-rad,1,image->rows+(2*rad),
- exception);
+ p=GetCacheViewVirtualPixels(image_view,x,-radius,1,image->rows+
+ (2*radius),exception);
- for (y=0; y < (ssize_t) image->rows+(2*rad); y++)
+ for (y=0; y < (ssize_t) image->rows+(2*radius); y++)
{
*pix++=(float)GetPixelLuma(image,p);
p+=image->number_channels;
}
- out=interImage+x+rad;
+ out=interImage+x+(size_t) radius;
for (y = 0; y < (ssize_t) image->rows; y++)
{
weight=1.0f;
sum=0;
pix=pixels+y;
- for (i=0; i < rad; i++)
+ for (i=0; i < radius; i++)
{
sum+=weight*(*pix++);
weight+=1.0f;
}
- for (i=rad+1; i < (2*rad); i++)
+ for (i=radius+1; i < (2*radius); i++)
{
sum+=weight*(*pix++);
weight-=1.0f;
/* write to output */
*out=sum/totalWeight;
/* mirror into padding */
- if (x <= rad && x != 0)
+ if (x <= radius && x != 0)
*(out-(x*2))=*out;
- if ((x > image->columns-rad-2) && (x != (ssize_t) image->columns-1))
+ if ((x > image->columns-radius-2) && (x != (ssize_t) image->columns-1))
*(out+((image->columns-x-1)*2))=*out;
- out+=image->columns+(rad*2);
+ out+=image->columns+((size_t) radius*2);
}
}
}
q=GetCacheViewAuthenticPixels(contrast_view,0,y,image->columns,1,
exception);
- memcpy(pixels,interImage+(y*(image->columns+(2*rad))),(image->columns+
- +(2*rad))*sizeof(float));
+ memcpy(pixels,interImage+(y*(image->columns+(2*(size_t) radius))),
+ (image->columns+(2*radius))*sizeof(float));
for (x=0; x < (ssize_t) image->columns; x++)
{
weight=1.0f;
sum=0;
pix=pixels+x;
- for (i=0; i < rad; i++)
+ for (i=0; i < radius; i++)
{
sum+=weight*(*pix++);
weight+=1.0f;
}
- for (i=rad+1; i < (2*rad); i++)
+ for (i=radius+1; i < (2*radius); i++)
{
sum+=weight*(*pix++);
weight-=1.0f;
{ "-liquid-rescale", 1L, SimpleOperatorFlag, MagickFalse },
{ "+list", 0L, DeprecateOptionFlag, MagickTrue },
{ "-list", 1L, NoImageOperatorFlag, MagickFalse },
+ { "+local-contrast", 0L, DeprecateOptionFlag, MagickTrue },
{ "-local-contrast", 1L, SimpleOperatorFlag, MagickFalse },
{ "+log", 0L, DeprecateOptionFlag, MagickFalse },
{ "-log", 1L, GlobalOptionFlag, MagickFalse },