public Image<Gray, byte>[] Split(Image<Gray, byte> src) { var result = new List<Image<Gray, Byte>>(); var cl = src.connectLevel(1, 8, 0); var position_image = new List<Tuple<int, Image<Gray, Byte>>>(); foreach (var domain in cl.Domains) { int most_left = int.MaxValue, most_right = 0; foreach (var point in domain.Points) { if (point.X < most_left) most_left = point.X; if (point.X > most_right) most_right = point.X; } int padding = 5; var split = new Image<Gray, Byte>(padding * 2 + (most_right - most_left), src.Height); foreach (var point in domain.Points) { int x = point.X, y = point.Y; split[y, padding + x - most_left] = src[point]; } position_image.Add(new Tuple<int, Image<Gray, byte>> { First = most_left, Second = split }); } foreach (var tp in position_image.OrderBy(t => t.First)) { result.Add(tp.Second); } return result.ToArray(); }
public Image<Gray, byte> Process(Image<Gray, byte> src) { var dst = src.Clone(); Connectivity.Connect8 = this.Connect8; var cl = src.connectLevel(1, 8, 0); foreach (var dm in cl.Domains) { if (dm.Area < Threshold) { foreach (var p in dm.Points) { dst[p] = new Gray(0); } } } return dst; }