public override LearningImage BackProject(LearningImage image) { int step = FrameIn.Height; int height = image.Height * step; int width = image.Width * step; LearningImage backed = new LearningImage(height, width, image.Plane); for (int h = 0; h < height; h++) { for (int w = 0; w < width; w++) { var p = image.GetPlane((double)h / (double)step, (double)w / (double)step); backed.SetPlane(h, w, p); } } return backed; }
public override LearningImage BackProject(LearningImage i) { int Scale = this.Scale; ListImage li = new ListImage(i.Height * Scale + Height, i.Width * Scale + Width); for (int h = 0; h < i.Height; h++) { for (int w = 0; w < i.Width; w++) { LearningImage trimed = i.Trim(new Rectangle(w, h, 1, 1)); LearningImage pasting = base.BackProject(trimed); for (int hh = 0; hh < pasting.Height; hh++) for (int ww = 0; ww < pasting.Width; ww++) li.Add(h * Scale + hh, w * Scale + ww, pasting.GetPlane(hh, ww)); } } LearningImage o = new LearningImage(i.Height * Scale, i.Width * Scale, this.FrameIn.Plane); for (int h = 0; h < o.Height; h++) for (int w = 0; w < o.Width; w++) o.SetPlane(h, w, li.Median(h + Height / 2, w + Width / 2)); return o; }
public override LearningImage Project(LearningImage image) { int step = FrameIn.Height; int height = image.Height / step; int width = image.Width / step; LearningImage projected = new LearningImage(height, width, image.Plane); for (int h = 0; h < image.Height; h += step) { for(int w = 0; w < image.Width; w += step) { var list = image.GetPlanes(new Rectangle(w, h, step, step)); var best = list.OrderByDescending(x => x.SpecialEuclidean()).First(); projected.SetPlane(h / step, w / step, best); } } return projected; }