private void Convert2FinalStringList() { TextString ts = new TextString(); for (int i = 0; i < _char_list.Count; i++) { ts.AddChar(_char_list[i]); } _final_string_list.Add(ts); }
public void PrintSubStringsSmall(ushort[] char_labels, TextString ts, int margin) { bool[,] stringimg = new bool[ts.bbx.Height + margin, ts.bbx.Width + margin]; for (int i = 0; i < ts.char_list.Count; i++) { for (int xx = ts.bbx.X; xx < ts.bbx.X + ts.bbx.Width; xx++) for (int yy = ts.bbx.Y; yy < ts.bbx.Y + ts.bbx.Height; yy++) { if (char_labels[yy * width + xx] == ts.char_list[i].pixel_id) stringimg[yy - ts.bbx.Y + margin / 2, xx - ts.bbx.X + margin / 2] = true; } } if (ts.char_list.Count > 0) ts.srcimg = ImageUtils.ArrayBool2DToBitmap(stringimg); }
private void MergeOne(List <int> tmp_list4one) { if (_debug) { Console.WriteLine("*******Merge One******"); } for (int i = 0; i < tmp_list4one.Count; i++) { // for small cc only since small cc still has neighbors int idx1 = tmp_list4one[i]; MyConnectedComponentsAnalysisFast.MyBlob char1 = _char_list[idx1]; for (int ni = 0; ni < char1.neighbors.Count; ni++) { int idx = char1.neighbors[ni]; for (int j = 0; j < _final_string_list.Count; j++) { TextString ts = _final_string_list[j]; if (ts._char_list.Contains(_char_list[idx])) { _char_list[idx1].included = true; ts.AddChar(_char_list[idx1]); if (_debug) { Console.WriteLine(" Add TS: " + idx1 + " to TS: " + j); } } } } if (_debug) { Console.WriteLine(idx1 + " is not a small cc"); } if (!_char_list[idx1].included) { _char_list[idx1].included = true; List <int> tmp_list = new List <int>(); tmp_list.Add(idx1); AddSubstring(tmp_list); } } }
private void AddSubstring(List <int> substring_list) { if (_debug) { Console.Write("Final ST#: " + _final_string_list.Count + " Add TS: "); } TextString ts = new TextString(); for (int i = 0; i < substring_list.Count; i++) { ts.AddChar(_char_list[substring_list[i]]); _char_list[substring_list[i]].included = true; if (_debug) { Console.Write(substring_list[i] + " "); } } _final_string_list.Add(ts); if (_debug) { Console.WriteLine(); } }
public void AddTextString(TextString dstString) { Update(ref dstString); List<int> insert_idx_list = new List<int>();// insert = -1; int[] matched_idx_array = new int[dstString.char_list.Count]; for(int i=0;i<matched_idx_array.Length;i++) matched_idx_array[i] = -1; int[] matched_char_blob_count = new int [text_string_list.Count]; for (int i = 0; i < text_string_list.Count; i++) { TextString srcString = text_string_list[i]; for(int x=0;x<srcString.char_list.Count;x++) { for(int y=0;y<dstString.char_list.Count;y++) { if(Distance(srcString.char_list[x].mass_center,dstString.char_list[y].mass_center)<3) { matched_idx_array[y] = i; matched_char_blob_count[i]++; } } //if(insert!=-1) //break; } } int max_matched = 0; int max_matched_idx = -1; for (int i = 0; i < matched_char_blob_count.Length; i++) { if (matched_char_blob_count[i] > max_matched) { max_matched = matched_char_blob_count[i]; max_matched_idx = i; } } int insert = max_matched_idx; if (insert == -1) text_string_list.Add(dstString); else { List<int> remove_string_list = new List<int>(); for (int i = 0; i < matched_idx_array.Length ; i++) { if (matched_idx_array[i] != -1 && matched_idx_array[i] != insert) remove_string_list.Add(i); } Point p1 = new Point(text_string_list[insert].bbx.X,text_string_list[insert].bbx.Y); Point p2 = new Point(dstString.bbx.X, dstString.bbx.Y); for (int c = 0; c < dstString.char_list.Count; c++) text_string_list[insert].AddChar(dstString.char_list[c]); Bitmap newimg1 = new Bitmap(text_string_list[insert].bbx.Width, text_string_list[insert].bbx.Height); Bitmap newimg2 = new Bitmap(text_string_list[insert].bbx.Width, text_string_list[insert].bbx.Height); Graphics g1 = Graphics.FromImage(newimg1); g1.Clear(Color.White); g1.DrawImage(text_string_list[insert].srcimg, p1.X - text_string_list[insert].bbx.X, p1.Y - text_string_list[insert].bbx.Y); Graphics g2 = Graphics.FromImage(newimg2); g2.Clear(Color.White); g2.DrawImage(dstString.srcimg, p2.X - text_string_list[insert].bbx.X, p2.Y - text_string_list[insert].bbx.Y); g1.Dispose(); g2.Dispose(); //ASHISH newimg1 = ImageUtils.GetIntersection(newimg1, newimg2); text_string_list[insert].srcimg = newimg1; //for (int i = 0; i < remove_string_list.Count; i++) //{ //} } }
public void Update(ref TextString srcString) { MyConnectedComponentsAnalysisFast.MyBlob char_blob0 = srcString.char_list[0]; char_blob0.mass_center.X += srcString.x_offset; char_blob0.mass_center.Y += srcString.y_offset; char_blob0.bbx.X += srcString.x_offset; char_blob0.bbx.Y += srcString.y_offset; Rectangle bbx = char_blob0.bbx; for (int i = 1; i < srcString.char_list.Count; i++) { MyConnectedComponentsAnalysisFast.MyBlob char_blob = srcString.char_list[i]; char_blob.mass_center.X += srcString.x_offset; char_blob.mass_center.Y += srcString.y_offset; char_blob.bbx.X += srcString.x_offset; char_blob.bbx.Y += srcString.y_offset; int x = bbx.X, y = bbx.Y, xx = bbx.X + bbx.Width - 1, yy = bbx.Y + bbx.Height - 1; int x1 = char_blob.bbx.X, y1 = char_blob.bbx.Y, xx1 = char_blob.bbx.X + char_blob.bbx.Width - 1, yy1 = char_blob.bbx.Y + char_blob.bbx.Height - 1; int x2, y2, xx2, yy2; if (x < x1) x2 = x; else x2 = x1; if (y < y1) y2 = y; else y2 = y1; if (xx < xx1) xx2 = xx1; else xx2 = xx; if (yy < yy1) yy2 = yy1; else yy2 = yy; bbx.X = x2; bbx.Y = y2; bbx.Width = xx2 - x2 + 1; bbx.Height = yy2 - y2 + 1; } srcString.bbx = bbx; }
public Bitmap PrintSubStringsSmall(TextString ts, int margin) { bool[,] stringimg = new bool[ts.bbx.Height + margin, ts.bbx.Width + margin]; for (int i = 0; i < ts.char_list.Count; i++) { for (int xx = ts.bbx.X; xx < ts.bbx.X + ts.bbx.Width; xx++) for (int yy = ts.bbx.Y; yy < ts.bbx.Y + ts.bbx.Height; yy++) { if (char_labels[yy * mw + xx] == ts.char_list[i].pixel_id) stringimg[yy - ts.bbx.Y + margin / 2, xx - ts.bbx.X + margin / 2] = true; //else // stringimg[yy - ts.bbx.Y, xx - ts.bbx.X] = false; } } ts.srcimg = ImageUtils.ArrayBool2DToBitmap(stringimg); ; return ts.srcimg; }
private void Convert2FinalStringList() { TextString ts = new TextString(); for (int i = 0; i < _char_list.Count; i++) ts.AddChar(_char_list[i]); _final_string_list.Add(ts); }
private void AddSubstring(List<int> substring_list) { if (_debug) Console.Write("Final ST#: " + _final_string_list.Count + " Add TS: "); TextString ts = new TextString(); for (int i = 0; i < substring_list.Count; i++) { ts.AddChar(_char_list[substring_list[i]]); _char_list[substring_list[i]].included = true; if (_debug) Console.Write(substring_list[i] + " "); } _final_string_list.Add(ts); if (_debug) Console.WriteLine(); }
private void MergeTwo(List <List <int> > tmp_list4two) { if (_debug) { Console.WriteLine("identify non-connected two CC, add them to TS"); } for (int i = 0; i < tmp_list4two.Count; i++) { int idx1 = tmp_list4two[i][0]; int idx2 = tmp_list4two[i][1]; if (!_char_list[idx1].included && !_char_list[idx2].included) { _char_list[idx1].included = true; _char_list[idx2].included = true; AddSubstring(tmp_list4two[i]); } } if (_debug) { Console.WriteLine("assign other two cc substring to each connected substring"); } for (int i = 0; i < tmp_list4two.Count; i++) { int idx1 = tmp_list4two[i][0]; int idx2 = tmp_list4two[i][1]; if (!_char_list[idx1].included || !_char_list[idx2].included) { int idx = 0; int idx3 = 0; bool addtwo = false; if (_char_list[idx1].included && _char_list[idx3].sizefilter_included == false) { idx = idx1; idx3 = idx2; } else if (_char_list[idx3].included && _char_list[idx1].sizefilter_included == false) { idx = idx2; idx3 = idx1; } else { addtwo = true; } if (addtwo) { _char_list[idx1].included = true; _char_list[idx2].included = true; AddSubstring(tmp_list4two[i]); } else { for (int j = 0; j < _final_string_list.Count; j++) { TextString ts = _final_string_list[j]; if (ts._char_list.Contains(_char_list[idx])) { ts.AddChar(_char_list[idx3]); _char_list[idx3].included = true; if (_debug) { Console.WriteLine("Add: " + idx3 + " to " + idx + "\'ts"); } } } } } else { if (_debug) { Console.WriteLine(idx1 + " " + idx2 + " added already!"); } } } }