{
TO_ROW_IT row_it;
BLOBNBOX_IT blob_it;
STATS xht_stats (0, 128);
row_it.set_to_list (block->
get_rows ());
total_rows = 0;
for (row_it.mark_cycle_pt (); !row_it.cycled_list (); row_it.forward ()) {
row = row_it.data ();
total_rows++;
start_of_row = blob_it.data ()->bounding_box ().left ();
end_of_row = blob_it.data_relative (-1)->bounding_box ().right ();
if (min_left > start_of_row)
min_left = start_of_row;
if (max_right < end_of_row)
max_right = end_of_row;
}
}
if ((total_rows < 3) || (min_left >= max_right)) {
total_rows = 0;
min_left = max_right = 0;
return;
}
bucket_size = (
inT16) floor (xht_stats.median () + 0.5) / 2;
map_max = (max_right - min_left) / bucket_size;
for (i = 0; i <= map_max; i++)
map[i] = 0;
for (row_it.mark_cycle_pt (); !row_it.cycled_list (); row_it.forward ()) {
row = row_it.data ();
blob_it.mark_cycle_pt ();
prev_blob_box = blob_box;
gap_width = blob_box.
left () - min_left;
&& gap_width > 2) {
max_quantum = (blob_box.
left () - min_left) / bucket_size;
for (i = 0; i <= max_quantum; i++)
map[i]++;
}
}
while (!blob_it.cycled_list ()) {
gap_width = blob_box.
left () - prev_blob_box.
right ();
&& gap_width > 2) {
min_quantum =
(prev_blob_box.
right () - min_left) / bucket_size;
max_quantum = (blob_box.
left () - min_left) / bucket_size;
for (i = min_quantum; i <= max_quantum; i++)
map[i]++;
}
prev_blob_box = blob_box;
}
gap_width = max_right - prev_blob_box.
right ();
&& gap_width > 2) {
min_quantum =
(prev_blob_box.
right () - min_left) / bucket_size;
for (i = min_quantum; i <= map_max; i++)
map[i]++;
}
}
}
}
for (i = 0; i <= map_max; i++) {
if (map[i] > total_rows / 2) {
(((i == 0) &&
(map[i + 1] <= total_rows / 2)) ||
((i == map_max) &&
(map[i - 1] <= total_rows / 2)) ||
((i > 0) &&
(i < map_max) &&
(map[i - 1] <= total_rows / 2) &&
(map[i + 1] <= total_rows / 2)))) {
map[i] = 0;
}
else
}
}
}