/// <summary>
 /// Set the border of a matrix to a specific value.
 /// </summary>
 public static void SetBorder <T>(this Matrix <T> matrix, Border2l border, T value)
 {
     matrix.ApplyCenterBordersAndCorners(border,
                                         m => { },
                                         m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value),
                                         m => m.Set(value), m => m.Set(value), m => m.Set(value), m => m.Set(value));
 }
 /// <summary>
 /// Replicate the border pixels of the center region outward.
 /// </summary>
 public static void ReplicateBorder <T>(this Matrix <T> matrix, Border2l border)
 {
     matrix.ApplyCenterBordersAndCorners(new Border2l(border.Min, border.Max),
                                         m => { },
                                         m => m.SetByCoord(y => m[m.EX, y], (y, x, vy) => vy),
                                         m => m.SetByCoord(y => m[m.FX - 1, y], (y, x, vy) => vy),
                                         m =>
     {
         var tm = m.SubMatrixWindow(m.F, m.S.YX, m.D.YX, m.F.YX);
         tm.SetByCoord(y => tm[tm.EX, y], (y, x, vy) => vy);
     },
                                         m =>
     {
         var tm = m.SubMatrixWindow(m.F, m.S.YX, m.D.YX, m.F.YX);
         tm.SetByCoord(y => tm[tm.FX - 1, y], (y, x, vy) => vy);
     },
                                         m => { var v = m[m.EX, m.EY]; m.SetByCoord((x, y) => v); },
                                         m => { var v = m[m.FX - 1, m.EY]; m.SetByCoord((x, y) => v); },
                                         m => { var v = m[m.EX, m.FY - 1]; m.SetByCoord((x, y) => v); },
                                         m => { var v = m[m.FX - 1, m.FY - 1]; m.SetByCoord((x, y) => v); });
 }