Strabo.Core.TextDetection.TextString.Connect C# (CSharp) Method

Connect() private method

private Connect ( int min_dist, int char_width, int labels, int label_width, int label_height ) : void
min_dist int
char_width int
labels int
label_width int
label_height int
return void
        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++;
                            }
                        }
                    }
                }
        }