diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index fb3a065..f1d3563 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -1501,11 +1501,14 @@
         *restrict p[4];
 
       double
-        optimal_variance[MaxPixelChannels],
-        value[MaxPixelChannels];
+        min_variance[MaxPixelChannels],
+        pixel[MaxPixelChannels];
+
+      ssize_t
+        j;
 
       for (i=0; i < 4; i++)
-      { 
+      {
         ssize_t
           x_offset,
           y_offset;
@@ -1513,27 +1516,27 @@
         x_offset=x;
         y_offset=y;
         switch (i)
-        { 
+        {
           case 0:
-          { 
+          {
             x_offset=x-(ssize_t) width/2L;
             y_offset=y-(ssize_t) width/2L;
             break;
           }
           case 1:
-          { 
+          {
             x_offset=x;
             y_offset=y-(ssize_t) width/2L;
             break;
           }
           case 2:
-          { 
+          {
             x_offset=x-(ssize_t) width/2L;
             y_offset=y;
             break;
           }
           case 3:
-          { 
+          {
             x_offset=x;
             y_offset=y;
             break;
@@ -1549,6 +1552,11 @@
           status=MagickFalse;
           break;
         }
+      for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+      {
+        min_variance[j]=0.0;
+        pixel[j]=0.0;
+      }
       for (i=0; i < 4; i++)
       {
         double
@@ -1558,10 +1566,9 @@
           variance[MaxPixelChannels];
 
         ssize_t
-          j,
           z;
 
-        for (j=0; j < MaxPixelChannels; j++)
+        for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
         {
           max[j]=(-MagickMaximumValue);
           min[j]=MagickMaximumValue;
@@ -1569,8 +1576,29 @@
         }
         for (z=0; z < (ssize_t) (width*width); z++)
         {
+          for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+          {
+            if ((double) p[i][j] > max[j])
+              max[j]=(double) p[i][j];
+            if ((double) p[i][j] < min[j])
+              min[j]=(double) p[i][j];
+            mean[j]+=(double) p[i][j];
+          }
+          p[i]+=GetPixelChannels(image);
+        }
+        for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+        {
+          mean[j]/=(double) (width*width);
+          variance[j]=max[j]-min[j];
+          if (variance[j] < min_variance[j])
+            {
+              min_variance[j]=variance[j];
+              pixel[j]=mean[j];
+            }
         }
       }
+      for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+        q[j]=ClampToQuantum(pixel[j]);
       q+=GetPixelChannels(kuwahara_image);
     }
     if (SyncCacheViewAuthenticPixels(kuwahara_view,exception) == MagickFalse)