specify neighborhood as width/height rather than radius/sigma
diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 45e0c6b..3eaad26 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -821,8 +821,8 @@
 %
 %  The format of the BilateralBlurImage method is:
 %
-%      Image *BilateralBlurImage(const Image *image,const double width,
-%        const double height,const double intensity_sigma,
+%      Image *BilateralBlurImage(const Image *image,const size_t width,
+%        const size_t height,const double intensity_sigma,
 %        const double spatial_sigma,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
@@ -899,8 +899,8 @@
   return(weights);
 }
 
-MagickExport Image *BilateralBlurImage(const Image *image,const double width,
-  const double height,const double intensity_sigma,const double spatial_sigma,
+MagickExport Image *BilateralBlurImage(const Image *image,const size_t width,
+  const size_t height,const double intensity_sigma,const double spatial_sigma,
   ExceptionInfo *exception)
 {
 #define BilateralBlurImageTag  "Convolve/Image"
@@ -1001,7 +1001,7 @@
       p=GetCacheViewVirtualPixels(image_view,x-mid,y-mid,width,width,exception);
       if (p == (const Quantum *) NULL)
         break;
-      p+=(ssize_t) GetPixelChannels(image)*(ssize_t) width*mid+
+      p+=(ssize_t) GetPixelChannels(image)*width*mid+
         GetPixelChannels(image)*mid;
       n=0;
       for (v=0; v < (ssize_t) height; v++)
@@ -1049,7 +1049,7 @@
             {
               for (u=0; u < (ssize_t) width; u++)
               {
-                r=p+(ssize_t) GetPixelChannels(image)*(ssize_t) width*(mid-v)+
+                r=p+(ssize_t) GetPixelChannels(image)*width*(mid-v)+
                   GetPixelChannels(image)*(mid-u);
                 pixel+=weights[id][n]*r[i];
                 gamma+=weights[id][n];
@@ -1071,7 +1071,7 @@
               alpha,
               beta;
 
-            r=p+(ssize_t) GetPixelChannels(image)*(ssize_t) width*(mid-v)+
+            r=p+(ssize_t) GetPixelChannels(image)*width*(mid-v)+
               GetPixelChannels(image)*(mid-u);
             alpha=(double) (QuantumScale*GetPixelAlpha(image,p));
             beta=(double) (QuantumScale*GetPixelAlpha(image,r));
diff --git a/MagickCore/effect.h b/MagickCore/effect.h
index fe74163..0b15bb3 100644
--- a/MagickCore/effect.h
+++ b/MagickCore/effect.h
@@ -62,7 +62,7 @@
   *AdaptiveBlurImage(const Image *,const double,const double,ExceptionInfo *),
   *AdaptiveSharpenImage(const Image *,const double,const double,
      ExceptionInfo *),
-  *BilateralBlurImage(const Image *,const double,const double,
+  *BilateralBlurImage(const Image *,const size_t,const size_t,
     const double,const double,ExceptionInfo *),
   *BlurImage(const Image *,const double,const double,ExceptionInfo *),
   *ConvolveImage(const Image *,const KernelInfo *,ExceptionInfo *),
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 18932d5..1d81e6b 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -961,8 +961,9 @@
             if ((flags & PsiValue) == 0)
               geometry_info.psi=0.5*sqrt(geometry_info.rho*geometry_info.rho+
                 geometry_info.sigma*geometry_info.sigma);
-            mogrify_image=BilateralBlurImage(*image,geometry_info.rho,
-              geometry_info.sigma,geometry_info.xi,geometry_info.psi,exception);
+            mogrify_image=BilateralBlurImage(*image,(size_t) geometry_info.rho,
+              (size_t) geometry_info.sigma,geometry_info.xi,geometry_info.psi,
+              exception);
             break;
           }
         if (LocaleCompare("black-threshold",option+1) == 0)
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 1c44db7..6258894 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -1853,8 +1853,9 @@
           if ((flags & PsiValue) == 0)
             geometry_info.psi=0.5*sqrt(geometry_info.rho*geometry_info.rho+
               geometry_info.sigma*geometry_info.sigma);
-          new_image=BilateralBlurImage(_image,geometry_info.rho,
-            geometry_info.sigma,geometry_info.xi,geometry_info.psi,_exception);
+          new_image=BilateralBlurImage(_image,(size_t) geometry_info.rho,
+            (size_t) geometry_info.sigma,geometry_info.xi,geometry_info.psi,
+           _exception);
           break;
         }
       if (LocaleCompare("black-threshold",option+1) == 0)
diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs
index 9683276..8a66b55 100644
--- a/PerlMagick/Magick.xs
+++ b/PerlMagick/Magick.xs
@@ -581,7 +581,7 @@
       {"stop-color", StringReference}, {"channel", MagickChannelOptions} } },
     { "WhiteBalance", { { (const char *) NULL, NullReference } } },
     { "BilateralBlur", { {"geometry", StringReference},
-      {"width", RealReference}, {"height", RealReference},
+      {"width", IntegerReference}, {"height", IntegerReference},
       {"intensity-sigma", RealReference}, {"spatial-sigma", RealReference},
       {"channel", MagickChannelOptions} } },
   };
@@ -11592,9 +11592,9 @@
                   geometry_info.sigma*geometry_info.sigma);
             }
           if (attribute_flag[1] != 0)
-            geometry_info.rho=argument_list[1].real_reference;
+            geometry_info.rho=(double) argument_list[1].integer_reference;
           if (attribute_flag[2] != 0)
-            geometry_info.sigma=argument_list[2].real_reference;
+            geometry_info.sigma=(double) argument_list[2].integer_reference;
           if (attribute_flag[3] != 0)
             geometry_info.xi=argument_list[3].real_reference;
           if (attribute_flag[4] != 0)
@@ -11602,8 +11602,8 @@
           if (attribute_flag[5] != 0)
             channel=(ChannelType) argument_list[5].integer_reference;
           channel_mask=SetImageChannelMask(image,channel);
-          image=BilateralBlurImage(image,geometry_info.rho,geometry_info.sigma,
-            geometry_info.xi,geometry_info.psi,exception);
+          image=BilateralBlurImage(image,(size_t) geometry_info.rho,(size_t)
+            geometry_info.sigma,geometry_info.xi,geometry_info.psi,exception);
           if (image != (Image *) NULL)
             (void) SetImageChannelMask(image,channel_mask);
           break;
diff --git a/PerlMagick/quantum/quantum.xs.in b/PerlMagick/quantum/quantum.xs.in
index 2277e51..29ac323 100644
--- a/PerlMagick/quantum/quantum.xs.in
+++ b/PerlMagick/quantum/quantum.xs.in
@@ -581,7 +581,7 @@
       {"stop-color", StringReference}, {"channel", MagickChannelOptions} } },
     { "WhiteBalance", { { (const char *) NULL, NullReference } } },
     { "BilateralBlur", { {"geometry", StringReference},
-      {"width", RealReference}, {"height", RealReference},
+      {"width", IntegerReference}, {"height", IntegerReference},
       {"intensity-sigma", RealReference}, {"spatial-sigma", RealReference},
       {"channel", MagickChannelOptions} } },
   };
@@ -11598,9 +11598,9 @@
                   geometry_info.sigma*geometry_info.sigma);
             }
           if (attribute_flag[1] != 0)
-            geometry_info.rho=argument_list[1].real_reference;
+            geometry_info.rho=(double) argument_list[1].integer_reference;
           if (attribute_flag[2] != 0)
-            geometry_info.sigma=argument_list[2].real_reference;
+            geometry_info.sigma=(double) argument_list[2].integer_reference;
           if (attribute_flag[3] != 0)
             geometry_info.xi=argument_list[3].real_reference;
           if (attribute_flag[4] != 0)
@@ -11608,8 +11608,8 @@
           if (attribute_flag[5] != 0)
             channel=(ChannelType) argument_list[5].integer_reference;
           channel_mask=SetImageChannelMask(image,channel);
-          image=BilateralBlurImage(image,geometry_info.rho,geometry_info.sigma,
-            geometry_info.xi,geometry_info.psi,exception);
+          image=BilateralBlurImage(image,(size_t) geometry_info.rho,(size_t)
+            geometry_info.sigma,geometry_info.xi,geometry_info.psi,exception);
           if (image != (Image *) NULL)
             (void) SetImageChannelMask(image,channel_mask);
           break;