diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index ddacaf5..7207caf 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -1436,7 +1436,7 @@
 #define KuwaharaImageTag  "Kuwahara/Image"
 
   CacheView
-    *image_view[4],
+    *image_view,
     *kuwahara_view;
 
   Image
@@ -1449,9 +1449,6 @@
   MagickOffsetType
     progress;
 
-  register ssize_t
-    i;
-
   size_t
     width;
 
@@ -1489,8 +1486,7 @@
   */
   status=MagickTrue;
   progress=0;
-  for (i=0; i < 4; i++)
-    image_view[i]=AcquireVirtualCacheView(gaussian_image,exception);
+  image_view=AcquireVirtualCacheView(gaussian_image,exception);
   kuwahara_view=AcquireAuthenticCacheView(kuwahara_image,exception);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(static,4) shared(progress,status) \
@@ -1516,58 +1512,22 @@
     for (x=0; x < (ssize_t) image->columns; x++)
     {
       const Quantum
-        *restrict p[4];
+        *restrict p;
 
       double
         min_variance;
 
-      ssize_t
-        j,
-        l;
-
       RectangleInfo
-        quadrant[4];
+        quadrant,
+        target;
 
-      for (i=0; i < 4; i++)
-      {
-        quadrant[i].width=width;
-        quadrant[i].height=width;
-        quadrant[i].x=x;
-        quadrant[i].y=y;
-        switch (i)
-        {
-          case 0:
-          {
-            quadrant[i].x=x-(ssize_t) (width-1);
-            quadrant[i].y=y-(ssize_t) (width-1);
-            break;
-          }
-          case 1:
-          {
-            quadrant[i].y=y-(ssize_t) (width-1);
-            break;
-          }
-          case 2:
-          {
-            quadrant[i].x=x-(ssize_t) (width-1);
-            break;
-          }
-          case 3:
-          default:
-            break;
-        }
-        p[i]=GetCacheViewVirtualPixels(image_view[i],quadrant[i].x,
-          quadrant[i].y,quadrant[i].width,quadrant[i].height,exception);
-        if (p[i] == (const Quantum *) NULL)
-          break;
-      }
-      if (i < 4)
-        {
-          status=MagickFalse;
-          break;
-        }
+      register size_t
+        i;
+
       min_variance=MagickMaximumValue;
-      l=0;
+      SetGeometry(gaussian_image,&target);
+      quadrant.width=width;
+      quadrant.height=width;
       for (i=0; i < 4; i++)
       {
         const Quantum
@@ -1577,28 +1537,59 @@
           mean[MaxPixelChannels],
           variance;
 
-        ssize_t
+        register ssize_t
           n;
 
-        for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+        ssize_t
+          j;
+
+        quadrant.x=x;
+        quadrant.y=y;
+        switch (i)
+        {
+          case 0:
+          {
+            quadrant.x=x-(ssize_t) (width-1);
+            quadrant.y=y-(ssize_t) (width-1);
+            break;
+          }
+          case 1:
+          {
+            quadrant.y=y-(ssize_t) (width-1);
+            break;
+          }
+          case 2:
+          {
+            quadrant.x=x-(ssize_t) (width-1);
+            break;
+          }
+          case 3:
+          default:
+            break;
+        }
+        p=GetCacheViewVirtualPixels(image_view,quadrant.x,quadrant.y,
+          quadrant.width,quadrant.height,exception);
+        if (p == (const Quantum *) NULL)
+          break;
+        for (j=0; j < (ssize_t) GetPixelChannels(gaussian_image); j++)
           mean[j]=0.0;
-        k=p[i];
+        k=p;
         for (n=0; n < (ssize_t) (width*width); n++)
         {
-          for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+          for (j=0; j < (ssize_t) GetPixelChannels(gaussian_image); j++)
             mean[j]+=(double) k[j];
           k+=GetPixelChannels(image);
         }
-        for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+        for (j=0; j < (ssize_t) GetPixelChannels(gaussian_image); j++)
           mean[j]/=(double) (width*width);
-        k=p[i];
+        k=p;
         variance=0.0;
         for (n=0; n < (ssize_t) (width*width); n++)
         {
           double
             luma;
 
-          luma=GetPixelLuma(image,k);
+          luma=GetPixelLuma(gaussian_image,k);
           variance+=(luma-GetMeanLuma(gaussian_image,mean))*
             (luma-GetMeanLuma(gaussian_image,mean));
           k+=GetPixelChannels(image);
@@ -1606,13 +1597,17 @@
         if (variance < min_variance)
           {
             min_variance=variance;
-            l=i;
+            target=quadrant;
           }
       }
-      status=InterpolatePixelChannels(gaussian_image,image_view[0],
-        kuwahara_image,UndefinedInterpolatePixel,(double) quadrant[l].x+
-        quadrant[l].width/2.0,(double) quadrant[l].y+quadrant[l].height/2.0,q,
-        exception);
+      if (i < 4)
+        {
+          status=MagickFalse;
+          break;
+        }
+      status=InterpolatePixelChannels(gaussian_image,image_view,kuwahara_image,
+        UndefinedInterpolatePixel,(double) target.x+target.width/2.0,(double)
+        target.y+target.height/2.0,q,exception);
       q+=GetPixelChannels(kuwahara_image);
     }
     if (SyncCacheViewAuthenticPixels(kuwahara_view,exception) == MagickFalse)
@@ -1631,8 +1626,7 @@
       }
   }
   kuwahara_view=DestroyCacheView(kuwahara_view);
-  for (i=0; i < 4; i++)
-    image_view[i]=DestroyCacheView(image_view[i]);
+  image_view=DestroyCacheView(image_view);
   gaussian_image=DestroyImage(gaussian_image);
   if (status == MagickFalse)
     kuwahara_image=DestroyImage(kuwahara_image);