MCPcopy Create free account
hub / github.com/creatale/node-dv / CrackLine

Method CrackLine

deps/tesseract/cube/cube_line_segmenter.cpp:125–215  ·  view source on GitHub ↗

do a desperate attempt at cracking lines

Source from the content-addressed store, hash-verified

123
124// do a desperate attempt at cracking lines
125Pixa *CubeLineSegmenter::CrackLine(Pix *cracked_line_pix,
126 Box *cracked_line_box, int line_cnt) {
127 // create lines pixa array
128 Pixa **lines_pixa = new Pixa*[line_cnt];
129
130 memset(lines_pixa, 0, line_cnt * sizeof(*lines_pixa));
131
132 // compute line conn comps
133 Pixa *line_con_comps_pix;
134 Boxa *line_con_comps = ComputeLineConComps(cracked_line_pix,
135 cracked_line_box, &line_con_comps_pix);
136
137 if (line_con_comps == NULL) {
138 delete []lines_pixa;
139 return NULL;
140 }
141
142 // assign each conn comp to the a line based on its centroid
143 for (int con = 0; con < line_con_comps->n; con++) {
144 Box *con_box = line_con_comps->box[con];
145 Pix *con_pix = line_con_comps_pix->pix[con];
146 int mid_y = (con_box->y - cracked_line_box->y) + (con_box->h / 2),
147 line_idx = MIN(line_cnt - 1,
148 (mid_y * line_cnt / cracked_line_box->h));
149
150 // create the line if it has not been created?
151 if (lines_pixa[line_idx] == NULL) {
152 lines_pixa[line_idx] = pixaCreate(line_con_comps->n);
153 if (lines_pixa[line_idx] == NULL) {
154 CleanupCrackLine(line_cnt, lines_pixa, &line_con_comps,
155 &line_con_comps_pix);
156 return NULL;
157 }
158 }
159
160 // add the concomp to the line
161 if (pixaAddPix(lines_pixa[line_idx], con_pix, L_CLONE) != 0 ||
162 pixaAddBox(lines_pixa[line_idx], con_box, L_CLONE)) {
163 CleanupCrackLine(line_cnt, lines_pixa, &line_con_comps,
164 &line_con_comps_pix);
165 return NULL;
166 }
167 }
168
169 // create the lines pixa
170 Pixa *lines = pixaCreate(line_cnt);
171 bool success = true;
172
173 // create and check the validity of the lines
174 for (int line = 0; line < line_cnt; line++) {
175 Pixa *line_pixa = lines_pixa[line];
176
177 // skip invalid lines
178 if (line_pixa == NULL) {
179 continue;
180 }
181
182 // merge the pix, check the validity of the line

Callers

nothing calls this directly

Calls 7

pixaCreateFunction · 0.85
CleanupCrackLineFunction · 0.85
pixaAddPixFunction · 0.85
pixaAddBoxFunction · 0.85
pixDestroyFunction · 0.85
boxDestroyFunction · 0.85
pixaDestroyFunction · 0.85

Tested by

no test coverage detected