コード例 #1
0
ファイル: Blend.cs プロジェクト: jthornca/accord-framework
        /// <summary>
        ///   Computes the new image size.
        /// </summary>
        ///
        protected override Size CalculateNewImageSize(UnmanagedImage sourceData)
        {
            // Calculate source size
            float w = sourceData.Width;
            float h = sourceData.Height;

            // Get the four corners and the center of the image
            PointF[] corners =
            {
                new PointF(0,      0),
                new PointF(w,      0),
                new PointF(0,      h),
                new PointF(w,      h),
                new PointF(w / 2f, h / 2f)
            };

            // Project those points
            corners = homography.Inverse().TransformPoints(corners);

            // Recalculate image size
            float[] px = { corners[0].X, corners[1].X, corners[2].X, corners[3].X };
            float[] py = { corners[0].Y, corners[1].Y, corners[2].Y, corners[3].Y };

            float maxX     = Matrix.Max(px);
            float minX     = Matrix.Min(px);
            float newWidth = Math.Max(maxX, overlayImage.Width) - Math.Min(0, minX);

            float maxY      = Accord.Math.Matrix.Max(py);
            float minY      = Accord.Math.Matrix.Min(py);
            float newHeight = Math.Max(maxY, overlayImage.Height) - Math.Min(0, minY);


            // Store overlay image size
            this.imageSize = new Size((int)Math.Round(maxX - minX), (int)Math.Round(maxY - minY));

            // Store image center
            this.center = Point.Round(corners[4]);

            // Calculate and store image offset
            int offsetX = 0, offsetY = 0;

            if (minX < 0)
            {
                offsetX = (int)Math.Round(minX);
            }
            if (minY < 0)
            {
                offsetY = (int)Math.Round(minY);
            }

            this.offset = new Point(offsetX, offsetY);

            if (Double.IsNaN(newWidth) || newWidth == 0)
            {
                newWidth = 1;
            }

            if (Double.IsNaN(newHeight) || newHeight == 0)
            {
                newHeight = 1;
            }

            // Return the final image size
            return(new Size((int)Math.Ceiling(newWidth), (int)Math.Ceiling(newHeight)));
        }
コード例 #2
0
ファイル: Tools.cs プロジェクト: zhenyao2008/ai4unity
 /// <summary>
 ///   Converts the value x (which is measured in the scale
 ///   'from') to another value measured in the scale 'to'.
 /// </summary>
 ///
 public static double[][] Scale(double toMin, double toMax, double[][] x)
 {
     return(Scale(Matrix.Min(x, 0), Matrix.Max(x, 0), toMin, toMax, x));
 }
コード例 #3
0
 /// <summary>
 ///   Returns the maximum column sum of the given matrix.
 /// </summary>
 ///
 public static double Norm1(this double[,] a)
 {
     double[] columnSums = Matrix.Sum(a, 1);
     return(Matrix.Max(columnSums));
 }