コード例 #1
0
            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);
            }