public float Compute(ImageDataPoint <float> point) { if (point.ImageID != _currentID) { _currentID = point.ImageID; if (point.Image.IsIntegral || DecisionTree <ImageDataPoint <float>, float[]> .IsBuilding) { _integralImage = new FloatArrayHandler(point.Image.RawArray, true); } else { _integralImage = IntegralImage.ComputeFloat <FloatArrayHandler>(point.Image); } } int row = point.Row; int column = point.Column; IMultichannelImage <float> image = point.Image; float sum = 0; for (int i = 0; i < _count; i++) { if (i % 2 == 0) { sum += _integralImage.ComputeRectangleSum(row, column, _channels[i], _rectangles[i]); } else { sum -= _integralImage.ComputeRectangleSum(row, column, _channels[i], _rectangles[i]); } } Debug.Assert(!float.IsNaN(sum), "Rectangle sum is NaN!"); return(sum); }