Example #1
0
        public static (NDArray, (int, int, int, int)) RandomExpand(NDArray src, float max_ratio = 4, float fill = 0, bool keep_ratio = true)
        {
            ndarray dst;
            float   ratio_y;

            if (max_ratio <= 1)
            {
                return(src, (0, 0, src.Shape[1], src.Shape[0]));
            }
            var(h, w, c) = src.Shape;
            var ratio_x = FloatRnd.Uniform(1, max_ratio);

            if (keep_ratio)
            {
                ratio_y = ratio_x;
            }
            else
            {
                ratio_y = FloatRnd.Uniform(1, max_ratio);
            }
            var oh    = Convert.ToInt32(h * ratio_y);
            var ow    = Convert.ToInt32(w * ratio_x);
            var off_y = IntRnd.Uniform(0, oh - h);
            var off_x = IntRnd.Uniform(0, ow - w);

            // make canvas
            dst = nd.Full(fill, shape: new Shape(oh, ow, c), dtype: src.DataType).AsNumpy();

            dst[$"{off_y}:{(off_y + h)}", $"{off_x}:{(off_x + w)}", ":"] = src;
            return(dst, (off_x, off_y, ow, oh));
        }
        public override NDArray Call(NDArray src)
        {
            var alpha = 1f + FloatRnd.Uniform(-Saturation, Saturation);
            var gray  = src * coef;

            gray  = nd.Sum(gray, 2, true);
            gray *= 1 - alpha;
            src  *= gray;
            src  += gray;
            return(src);
        }
Example #3
0
        public override NDArray Call(NDArray src)
        {
            float alpha = FloatRnd.Uniform(-Hue, Hue);
            var   u     = (float)Math.Cos(alpha * Math.PI);
            var   w     = (float)Math.Sin(alpha * Math.PI);
            var   bt    = new NDArray(new[] { 1, 0, 0, 0, u, -w, 0, w, u }).Reshape(3, 3);
            var   t     = nd.Dot(nd.Dot(ITyiq, bt), Tyiq).Transpose();

            src = nd.Dot(src, t);
            return(src);
        }
Example #4
0
        public static (NDArray, (bool, bool)) RandomFlip(NDArray src, float px = 0, float py = 0, bool copy = true)
        {
            var flip_y = FloatRnd.Uniform(0, 1 - py);
            var flip_x = FloatRnd.Uniform(0, 1 - px);

            if (flip_y > 0.5f)
            {
                src = nd.Flip(src, axis: 0);
            }

            if (flip_x > 0.5f)
            {
                src = nd.Flip(src, axis: 1);
            }

            if (copy)
            {
                src = src.Copy();
            }

            return(src, (flip_x > 0.5f, flip_y > 0.5f));
        }