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); }
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); }
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)); }