mirror of
https://github.com/qurator-spk/eynollah.git
synced 2025-12-01 08:44:13 +01:00
combine_hor_lines_and_delete_cross_points: simplify and rename
- `x_width_smaller_than_acolumn_width` → `avg_col_width` - `len_lines_bigger_than_x_width_smaller_than_acolumn_width` → `nseps_wider_than_than_avg_col_width` - `img_in_hor` → `img_p_in_hor` (analogous to vertical)
This commit is contained in:
parent
06cb9d1d31
commit
5c12b6a851
1 changed files with 36 additions and 16 deletions
|
|
@ -1176,7 +1176,23 @@ def order_of_regions(textline_mask, contours_main, contours_head, y_ref, x_ref):
|
||||||
return np.array(final_indexers_sorted), np.array(final_types), np.array(final_index_type)
|
return np.array(final_indexers_sorted), np.array(final_types), np.array(final_index_type)
|
||||||
|
|
||||||
def combine_hor_lines_and_delete_cross_points_and_get_lines_features_back_new(
|
def combine_hor_lines_and_delete_cross_points_and_get_lines_features_back_new(
|
||||||
img_p_in_ver, img_in_hor,num_col_classifier):
|
img_p_in_ver: np.ndarray,
|
||||||
|
img_p_in_hor: np.ndarray,
|
||||||
|
num_col_classifier: int,
|
||||||
|
) -> Tuple[np.ndarray, List[float]]:
|
||||||
|
"""
|
||||||
|
Given a horizontal and vertical separator mask, combine horizontal separators
|
||||||
|
(where possible) and make sure they do not cross each other.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
* img_p_in_ver: mask of vertical separators
|
||||||
|
* img_p_in_hor: mask of horizontal separators
|
||||||
|
* num_col_classifier: predicted (expected) number of columns
|
||||||
|
|
||||||
|
Returns: a tuple of
|
||||||
|
* the final horizontal separators
|
||||||
|
* the y coordinates with horizontal separators spanning the full width
|
||||||
|
"""
|
||||||
|
|
||||||
#img_p_in_ver = cv2.erode(img_p_in_ver, self.kernel, iterations=2)
|
#img_p_in_ver = cv2.erode(img_p_in_ver, self.kernel, iterations=2)
|
||||||
_, thresh = cv2.threshold(img_p_in_ver, 0, 255, 0)
|
_, thresh = cv2.threshold(img_p_in_ver, 0, 255, 0)
|
||||||
|
|
@ -1192,20 +1208,26 @@ def combine_hor_lines_and_delete_cross_points_and_get_lines_features_back_new(
|
||||||
int(y_max_main_ver[i]+1),
|
int(y_max_main_ver[i]+1),
|
||||||
int(cx_main_ver[i])-25:
|
int(cx_main_ver[i])-25:
|
||||||
int(cx_main_ver[i])+25] = 0
|
int(cx_main_ver[i])+25] = 0
|
||||||
|
height, width = img_p_in_ver.shape
|
||||||
|
|
||||||
_, thresh = cv2.threshold(img_in_hor, 0, 255, 0)
|
_, thresh = cv2.threshold(img_p_in_hor, 0, 255, 0)
|
||||||
contours_lines_hor, _ = cv2.findContours(thresh.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
contours_lines_hor, _ = cv2.findContours(thresh.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||||
|
|
||||||
slope_lines_hor, dist_x_hor, x_min_main_hor, x_max_main_hor, cy_main_hor, _, _, _, _ = \
|
(slope_lines_hor,
|
||||||
find_features_of_lines(contours_lines_hor)
|
dist_x_hor,
|
||||||
x_width_smaller_than_acolumn_width=img_in_hor.shape[1]/float(num_col_classifier+1.)
|
x_min_main_hor,
|
||||||
|
x_max_main_hor,
|
||||||
|
cy_main_hor, _,
|
||||||
|
y_min_main_hor,
|
||||||
|
y_max_main_hor,
|
||||||
|
_) = find_features_of_lines(contours_lines_hor)
|
||||||
|
|
||||||
len_lines_bigger_than_x_width_smaller_than_acolumn_width=len( dist_x_hor[dist_x_hor>=x_width_smaller_than_acolumn_width] )
|
avg_col_width = width / float(num_col_classifier + 1)
|
||||||
len_lines_bigger_than_x_width_smaller_than_acolumn_width_per_column=int(len_lines_bigger_than_x_width_smaller_than_acolumn_width /
|
nseps_wider_than_than_avg_col_width = np.count_nonzero(dist_x_hor>=avg_col_width)
|
||||||
float(num_col_classifier))
|
if nseps_wider_than_than_avg_col_width < 10 * num_col_classifier:
|
||||||
if len_lines_bigger_than_x_width_smaller_than_acolumn_width_per_column < 10:
|
|
||||||
args_hor=np.arange(len(slope_lines_hor))
|
args_hor=np.arange(len(slope_lines_hor))
|
||||||
sep_pairs=contours_in_same_horizon(cy_main_hor)
|
sep_pairs=contours_in_same_horizon(cy_main_hor)
|
||||||
|
img_p_in = np.copy(img_p_in_hor)
|
||||||
if len(sep_pairs):
|
if len(sep_pairs):
|
||||||
special_separators=[]
|
special_separators=[]
|
||||||
contours_new=[]
|
contours_new=[]
|
||||||
|
|
@ -1242,20 +1264,18 @@ def combine_hor_lines_and_delete_cross_points_and_get_lines_features_back_new(
|
||||||
# np.var( dist_x_hor[some_args] ),'jalibdiha')
|
# np.var( dist_x_hor[some_args] ),'jalibdiha')
|
||||||
special_separators.append(np.mean(cy_main_hor[some_args]))
|
special_separators.append(np.mean(cy_main_hor[some_args]))
|
||||||
else:
|
else:
|
||||||
img_p_in=img_in_hor
|
img_p_in = img_p_in_hor
|
||||||
special_separators = []
|
special_separators = []
|
||||||
|
|
||||||
img_p_in_ver[img_p_in_ver == 255] = 1
|
img_p_in_ver[img_p_in_ver == 255] = 1
|
||||||
sep_ver_hor = img_p_in + img_p_in_ver
|
sep_ver_hor_cross = 255 * ((img_p_in > 0) & (img_p_in_ver > 0))
|
||||||
sep_ver_hor_cross = (sep_ver_hor == 2) * 1
|
|
||||||
_, thresh = cv2.threshold(sep_ver_hor_cross.astype(np.uint8), 0, 255, 0)
|
|
||||||
contours_cross, _ = cv2.findContours(thresh.astype(np.uint8), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
contours_cross, _ = cv2.findContours(thresh.astype(np.uint8), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
||||||
center_cross = np.array(find_center_of_contours(contours_cross), dtype=int)
|
center_cross = np.array(find_center_of_contours(contours_cross), dtype=int)
|
||||||
for cx, cy in center_cross.T:
|
for cx, cy in center_cross.T:
|
||||||
img_p_in[cy - 30: cy + 30, cx + 5: cx + 40] = 0
|
img_p_in[cy - 30: cy + 30, cx + 5: cx + 40] = 0
|
||||||
img_p_in[cy - 30: cy + 30, cx - 40: cx - 4] = 0
|
img_p_in[cy - 30: cy + 30, cx - 40: cx - 4] = 0
|
||||||
else:
|
else:
|
||||||
img_p_in=np.copy(img_in_hor)
|
img_p_in = np.copy(img_p_in_hor)
|
||||||
special_separators = []
|
special_separators = []
|
||||||
return img_p_in, special_separators
|
return img_p_in, special_separators
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue