private static square[,] CalculateDiff(square[,] integralImage, int whalf) { var result = new square[integralImage.Height(), integralImage.Width()]; for (int i = 0; i < result.Height(); i++) { for (int j = 0; j < result.Width(); j++) { var xmin = Math.Max(0, i - whalf); var ymin = Math.Max(0, j - whalf); var xmax = Math.Min(result.Height() - 1, i + whalf); var ymax = Math.Min(result.Width() - 1, j + whalf); if (xmin == 0 && ymin == 0) { result[i, j] = integralImage[xmax, ymax]; } else if (xmin == 0) { result[i, j] = integralImage[xmax, ymax] - integralImage[xmax, ymin - 1]; } else if (ymin == 0) { result[i, j] = integralImage[xmax, ymax] - integralImage[xmin - 1, ymax]; } else { result[i, j] = integralImage[xmax, ymax] - integralImage[xmin - 1, ymax] - integralImage[xmax, ymin - 1] + integralImage[xmin - 1, ymin - 1]; } } } return(result); }