private double[] GetBackgroundHistogram(ObjectLayer layer, GrayscaleProcessor p) { Map map = new Map(p.Width, p.Height); for (int dy = 0; dy < p.Height; dy++) { for (int dx = 0; dx < p.Width; dx++) { if (layer.Map[dx, dy] == 0) { map[dx, dy] = 1; } } } double[,] distanceMap = new DistanceTransformation().Execute(map); double[] histogram = new double[256]; for (int dy = 0; dy < p.Height; dy++) { for (int dx = 0; dx < p.Width; dx++) { if (map[dx, dy] == 0) { continue; } if (distanceMap[dx, dy] < 3) { continue; } histogram[p[dx, dy]]++; } } return(histogram); }
private double[] GetBackgroundHistogram(ObjectLayer layer, GrayscaleProcessor p) { Map map = new Map(p.Width, p.Height); for (int dy = 0; dy < p.Height; dy++) for (int dx = 0; dx < p.Width; dx++) { if (layer.Map[dx, dy] == 0) map[dx, dy] = 1; } double[,] distanceMap = new DistanceTransformation().Execute(map); double[] histogram = new double[256]; for (int dy = 0; dy < p.Height; dy++) for (int dx = 0; dx < p.Width; dx++) { if (map[dx, dy] == 0) continue; if (distanceMap[dx, dy] < 3) continue; histogram[p[dx, dy]]++; } return histogram; }
private void Connect(int min_dist, int char_width, int[] labels, int label_width, int label_height) { int char_count = _char_list.Count; int mw = _bbx.Width + 2; int mh = _bbx.Height + 2;// 1 pixel border List <int[, ]> charimg_list = new List <int[, ]>(); List <int[, ]> dist_charimg_list = new List <int[, ]>(); DistanceTransformation dist = new DistanceTransformation(); for (int i = 0; i < char_count; i++) { int[,] charimg = new int[mh, mw]; for (int xx = 1; xx < mw - 1; xx++) { for (int yy = 1; yy < mh - 1; yy++) { if (labels[(yy - 1 + _bbx.Y) * label_width + (xx - 1 + _bbx.X)] == _char_list[i].pixel_id) { charimg[yy, xx] = 1; // 1 is fg } else { charimg[yy, xx] = 0; } } } charimg_list.Add(charimg); dist_charimg_list.Add(dist.ApplyFGisZero(charimg)); } for (int i = 0; i < char_count; i++) { for (int j = i + 1; j < char_count; j++) { int min = mw * mh; for (int yy = 1; yy < mh - 1; yy++) { int[,] charimg = charimg_list[i]; for (int xx = 1; xx < mw - 1; xx++) { int[,] dist_charimg = dist_charimg_list[j]; if (charimg[yy, xx] == 1 && min > dist_charimg[yy, xx]) { min = dist_charimg[yy, xx]; } } } if (min <= min_dist) { if ((!_char_list[j].sizefilter_included && !_char_list[i].sizefilter_included) || //S S (_char_list[j].sizefilter_included && _char_list[i].sizefilter_included)) { _char_list[i].neighbors.Add(j); _char_list[i].neighbor_count++; _char_list[j].neighbors.Add(i); _char_list[j].neighbor_count++; } else { if (!_char_list[i].sizefilter_included) // S B { _char_list[i].neighbors.Add(j); _char_list[i].neighbor_count++; } else { _char_list[j].neighbors.Add(i); _char_list[j].neighbor_count++; } } } } } }