diff --git a/sbb_newspapers_org_image/eynollah.py b/sbb_newspapers_org_image/eynollah.py index e1767ca..c1c0f1e 100644 --- a/sbb_newspapers_org_image/eynollah.py +++ b/sbb_newspapers_org_image/eynollah.py @@ -40,8 +40,12 @@ from .utils import ( filter_contours_area_of_image_tables, filter_contours_area_of_image_interiors, rotatedRectWithMaxArea, + rotate_image, rotate_max_area_new, rotation_image_new, + crop_image_inside_box, + otsu_copy, + otsu_copy_binary, ) @@ -101,87 +105,6 @@ class eynollah: ###self.model_region_dir_p = dir_models +'/model_layout_newspapers.h5'#'/model_ensemble_s.h5'#'/model_layout_newspapers.h5'#'/model_ensemble_s.h5'#'/model_main_home_5_soft_new.h5'#'/model_home_soft_5_all_data.h5' #'/model_main_office_long_soft.h5'#'/model_20_cat_main.h5' self.model_textline_dir = dir_models + "/model_textline_newspapers.h5" #'/model_hor_ver_home_trextline_very_good.h5'# '/model_hor_ver_1_great.h5'#'/model_curved_office_works_great.h5' - def get_one_hot(self, seg, input_height, input_width, n_classes): - seg = seg[:, :, 0] - seg_f = np.zeros((input_height, input_width, n_classes)) - for j in range(n_classes): - seg_f[:, :, j] = (seg == j).astype(int) - return seg_f - - def color_images(self, seg, n_classes): - ann_u = range(n_classes) - if len(np.shape(seg)) == 3: - seg = seg[:, :, 0] - - seg_img = np.zeros((np.shape(seg)[0], np.shape(seg)[1], 3)).astype(np.uint8) - colors = sns.color_palette("hls", n_classes) - - for c in ann_u: - c = int(c) - segl = seg == c - seg_img[:, :, 0] = segl * c - seg_img[:, :, 1] = segl * c - seg_img[:, :, 2] = segl * c - return seg_img - - def rotate_image(self, img_patch, slope): - (h, w) = img_patch.shape[:2] - center = (w // 2, h // 2) - M = cv2.getRotationMatrix2D(center, slope, 1.0) - return cv2.warpAffine(img_patch, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) - - def rotyate_image_different(self, img, slope): - # img = cv2.imread('images/input.jpg') - num_rows, num_cols = img.shape[:2] - - rotation_matrix = cv2.getRotationMatrix2D((num_cols / 2, num_rows / 2), slope, 1) - img_rotation = cv2.warpAffine(img, rotation_matrix, (num_cols, num_rows)) - return img_rotation - - def cleaning_probs(self, probs: np.ndarray, sigma: float) -> np.ndarray: - # Smooth - if sigma > 0.0: - return cv2.GaussianBlur(probs, (int(3 * sigma) * 2 + 1, int(3 * sigma) * 2 + 1), sigma) - elif sigma == 0.0: - return cv2.fastNlMeansDenoising((probs * 255).astype(np.uint8), h=20) / 255 - else: # Negative sigma, do not do anything - return probs - - def crop_image_inside_box(self, box, img_org_copy): - image_box = img_org_copy[box[1] : box[1] + box[3], box[0] : box[0] + box[2]] - return image_box, [box[1], box[1] + box[3], box[0], box[0] + box[2]] - - def otsu_copy(self, img): - img_r = np.zeros(img.shape) - img1 = img[:, :, 0] - img2 = img[:, :, 1] - img3 = img[:, :, 2] - # print(img.min()) - # print(img[:,:,0].min()) - # blur = cv2.GaussianBlur(img,(5,5)) - # ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) - retval1, threshold1 = cv2.threshold(img1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) - retval2, threshold2 = cv2.threshold(img2, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) - retval3, threshold3 = cv2.threshold(img3, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) - - img_r[:, :, 0] = threshold1 - img_r[:, :, 1] = threshold1 - img_r[:, :, 2] = threshold1 - return img_r - - def otsu_copy_binary(self, img): - img_r = np.zeros((img.shape[0], img.shape[1], 3)) - img1 = img[:, :, 0] - - retval1, threshold1 = cv2.threshold(img1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) - - img_r[:, :, 0] = threshold1 - img_r[:, :, 1] = threshold1 - img_r[:, :, 2] = threshold1 - - img_r = img_r / float(np.max(img_r)) * 255 - return img_r - def predict_enhancement(self, img): model_enhancement, session_enhancemnet = self.start_new_session_and_model(self.model_dir_of_enhancemnet) @@ -1036,7 +959,7 @@ class eynollah: img = img.astype(np.uint8) patches = False model_page, session_page = self.start_new_session_and_model(self.model_page_dir) - ###img = self.otsu_copy(self.image) + ###img = otsu_copy(self.image) for ii in range(1): img = cv2.GaussianBlur(img, (5, 5), 0) @@ -1056,7 +979,7 @@ class eynollah: box = [x, y, w, h] - croped_page, page_coord = self.crop_image_inside_box(box, img) + croped_page, page_coord = crop_image_inside_box(box, img) session_page.close() del model_page @@ -1080,7 +1003,7 @@ class eynollah: def extract_page(self): patches = False model_page, session_page = self.start_new_session_and_model(self.model_page_dir) - ###img = self.otsu_copy(self.image) + ###img = otsu_copy(self.image) for ii in range(1): img = cv2.GaussianBlur(self.image, (5, 5), 0) @@ -1112,7 +1035,7 @@ class eynollah: box = [x, y, w, h] - croped_page, page_coord = self.crop_image_inside_box(box, self.image) + croped_page, page_coord = crop_image_inside_box(box, self.image) self.cont_page = [] self.cont_page.append(np.array([[page_coord[2], page_coord[0]], [page_coord[3], page_coord[0]], [page_coord[3], page_coord[1]], [page_coord[2], page_coord[1]]])) @@ -1134,7 +1057,7 @@ class eynollah: img_width_h = img.shape[1] patches = False - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) model_region, session_region = self.start_new_session_and_model(self.model_region_dir_fully_np) @@ -1143,17 +1066,17 @@ class eynollah: img_2 = img[int(img.shape[0] / 3.0) : int(2 * img.shape[0] / 3.0), :, :] img_3 = img[int(2 * img.shape[0] / 3.0) :, :, :] - # img_1 = self.otsu_copy_binary(img_1)#self.otsu_copy(img) + # img_1 = otsu_copy_binary(img_1)#otsu_copy(img) # img_1 = img_1.astype(np.uint16) plt.imshow(img_1) plt.show() - # img_2 = self.otsu_copy_binary(img_2)#self.otsu_copy(img) + # img_2 = otsu_copy_binary(img_2)#otsu_copy(img) # img_2 = img_2.astype(np.uint16) plt.imshow(img_2) plt.show() - # img_3 = self.otsu_copy_binary(img_3)#self.otsu_copy(img) + # img_3 = otsu_copy_binary(img_3)#otsu_copy(img) # img_3 = img_3.astype(np.uint16) plt.imshow(img_3) @@ -1208,12 +1131,12 @@ class eynollah: ###if patches and cols>=2: - ###img = self.otsu_copy_binary(img)#self.otsu_copy(img) + ###img = otsu_copy_binary(img)#otsu_copy(img) ###img = img.astype(np.uint8) ###if patches and cols==1: - ###img = self.otsu_copy_binary(img)#self.otsu_copy(img) + ###img = otsu_copy_binary(img)#otsu_copy(img) ###img = img.astype(np.uint8) ###img= resize_image(img, int(img_height_h*1), int(img_width_h*1) ) @@ -1223,7 +1146,7 @@ class eynollah: model_region, session_region = self.start_new_session_and_model(self.model_region_dir_fully_np) if patches and cols == 1: - img2 = self.otsu_copy_binary(img) # self.otsu_copy(img) + img2 = otsu_copy_binary(img) # otsu_copy(img) img2 = img2.astype(np.uint8) img2 = resize_image(img2, int(img_height_h * 0.7), int(img_width_h * 0.7)) @@ -1232,7 +1155,7 @@ class eynollah: prediction_regions2 = resize_image(prediction_regions2, img_height_h, img_width_h) if patches and cols == 2: - img2 = self.otsu_copy_binary(img) # self.otsu_copy(img) + img2 = otsu_copy_binary(img) # otsu_copy(img) img2 = img2.astype(np.uint8) img2 = resize_image(img2, int(img_height_h * 0.4), int(img_width_h * 0.4)) @@ -1240,7 +1163,7 @@ class eynollah: prediction_regions2 = self.do_prediction(patches, img2, model_region, marginal_of_patch_percent) prediction_regions2 = resize_image(prediction_regions2, img_height_h, img_width_h) elif patches and cols > 2: - img2 = self.otsu_copy_binary(img) # self.otsu_copy(img) + img2 = otsu_copy_binary(img) # otsu_copy(img) img2 = img2.astype(np.uint8) img2 = resize_image(img2, int(img_height_h * 0.3), int(img_width_h * 0.3)) @@ -1249,7 +1172,7 @@ class eynollah: prediction_regions2 = resize_image(prediction_regions2, img_height_h, img_width_h) if patches and cols == 2: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) @@ -1260,7 +1183,7 @@ class eynollah: img = img.astype(np.uint8) if patches and cols == 1: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) img = resize_image(img, int(img_height_h * 0.5), int(img_width_h * 0.5)) @@ -1268,24 +1191,24 @@ class eynollah: if patches and cols == 3: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) # img= resize_image(img, int(img_height_h*0.9), int(img_width_h*0.9) ) if patches and cols == 4: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) # img= resize_image(img, int(img_height_h*0.9), int(img_width_h*0.9) ) if patches and cols >= 5: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) # img= resize_image(img, int(img_height_h*0.9), int(img_width_h*0.9) ) if not patches: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) prediction_regions2 = None @@ -1303,7 +1226,7 @@ class eynollah: def extract_only_text_regions(self, img, patches): model_region, session_region = self.start_new_session_and_model(self.model_only_text) - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint8) img_org = np.copy(img) @@ -1540,7 +1463,7 @@ class eynollah: index_by_text_region_contours.append(indexes_r_con_per_pro[mv]) - crop_img, crop_coor = self.crop_image_inside_box(boxes_text[mv], image_page_rotated) + crop_img, crop_coor = crop_image_inside_box(boxes_text[mv], image_page_rotated) if abs(slope_for_all) < 45: # all_box_coord.append(crop_coor) @@ -1632,7 +1555,7 @@ class eynollah: for mv in range(len(boxes_text)): - crop_img, crop_coor = self.crop_image_inside_box(boxes_text[mv], image_page_rotated) + crop_img, crop_coor = crop_image_inside_box(boxes_text[mv], image_page_rotated) # all_box_coord.append(crop_coor) @@ -1768,7 +1691,7 @@ class eynollah: def get_all_image_patches_coordination(self, image_page): self.all_box_coord = [] for jk in range(len(self.boxes)): - _, crop_coor = self.crop_image_inside_box(self.boxes[jk], image_page) + _, crop_coor = crop_image_inside_box(self.boxes[jk], image_page) self.all_box_coord.append(crop_coor) def textline_contours(self, img, patches, scaler_h, scaler_w): @@ -1778,7 +1701,7 @@ class eynollah: if not patches: model_textline, session_textline = self.start_new_session_and_model(self.model_textline_dir_np) - ##img = self.otsu_copy(img) + ##img = otsu_copy(img) img = img.astype(np.uint8) img_org = np.copy(img) @@ -1824,7 +1747,7 @@ class eynollah: self.area_of_cropped = [] self.all_text_region_raw = [] for jk in range(len(boxes)): - crop_img, crop_coor = self.crop_image_inside_box(boxes[jk], np.repeat(textline_mask_tot[:, :, np.newaxis], 3, axis=2)) + crop_img, crop_coor = crop_image_inside_box(boxes[jk], np.repeat(textline_mask_tot[:, :, np.newaxis], 3, axis=2)) crop_img = crop_img.astype(np.uint8) self.all_text_region_raw.append(crop_img[:, :, 0]) self.area_of_cropped.append(crop_img.shape[0] * crop_img.shape[1]) @@ -2337,7 +2260,7 @@ class eynollah: slope_xline = 0 slopes_tile_wise.append(slope_xline) # print(slope_xline,'xlineeee') - img_line_rotated = self.rotate_image(img_xline, slope_xline) + img_line_rotated = rotate_image(img_xline, slope_xline) img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1 """ @@ -2359,7 +2282,7 @@ class eynollah: slope_xline=0 slopes_tile_wise.append(slope_xline) print(slope_xline,'xlineeee') - img_line_rotated=self.rotate_image(img_xline,slope_xline) + img_line_rotated=rotate_image(img_xline,slope_xline) ##plt.imshow(img_line_rotated) ##plt.show() @@ -2394,14 +2317,14 @@ class eynollah: img_resized[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] = img_int[:, :] ##plt.imshow(img_xline) ##plt.show() - img_line_rotated = self.rotate_image(img_resized, slopes_tile_wise[i]) + img_line_rotated = rotate_image(img_resized, slopes_tile_wise[i]) img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1 img_patch_seperated = self.seperate_lines_new_inside_teils(img_line_rotated, 0) ##plt.imshow(img_patch_seperated) ##plt.show() - img_patch_seperated_returned = self.rotate_image(img_patch_seperated, -slopes_tile_wise[i]) + img_patch_seperated_returned = rotate_image(img_patch_seperated, -slopes_tile_wise[i]) img_patch_seperated_returned[:, :][img_patch_seperated_returned[:, :] != 0] = 1 img_patch_seperated_returned_true_size = img_patch_seperated_returned[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] @@ -2422,14 +2345,14 @@ class eynollah: img_resized[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ]=img_int[:,:] ##plt.imshow(img_xline) ##plt.show() - img_line_rotated=self.rotate_image(img_resized,slopes_tile_wise[ui]) + img_line_rotated=rotate_image(img_resized,slopes_tile_wise[ui]) #img_patch_seperated=self.seperate_lines_new_inside_teils(img_line_rotated,0) img_patch_seperated=self.seperate_lines_new_inside_teils(img_line_rotated,0) - img_patch_seperated_returned=self.rotate_image(img_patch_seperated,-slopes_tile_wise[ui]) + img_patch_seperated_returned=rotate_image(img_patch_seperated,-slopes_tile_wise[ui]) ##plt.imshow(img_patch_seperated) ##plt.show() print(img_patch_seperated_returned.shape) @@ -2507,7 +2430,7 @@ class eynollah: # slope_xline=[slope_region][0] slopes_tile_wise.append(slope_xline) # print(slope_xline,'xlineeee') - img_line_rotated = self.rotate_image(img_xline, slope_xline) + img_line_rotated = rotate_image(img_xline, slope_xline) img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1 # print(slopes_tile_wise,'slopes_tile_wise') @@ -2537,12 +2460,12 @@ class eynollah: img_resized[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] = img_int[:, :] # plt.imshow(img_xline) # plt.show() - img_line_rotated = self.rotate_image(img_resized, slopes_tile_wise[i]) + img_line_rotated = rotate_image(img_resized, slopes_tile_wise[i]) img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1 img_patch_seperated = self.seperate_lines_new_inside_teils2(img_line_rotated, 0) - img_patch_seperated_returned = self.rotate_image(img_patch_seperated, -slopes_tile_wise[i]) + img_patch_seperated_returned = rotate_image(img_patch_seperated, -slopes_tile_wise[i]) img_patch_seperated_returned[:, :][img_patch_seperated_returned[:, :] != 0] = 1 img_patch_seperated_returned_true_size = img_patch_seperated_returned[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] @@ -3017,7 +2940,7 @@ class eynollah: return peaks, textline_boxes_rot def return_rotated_contours(self, slope, img_patch): - dst = self.rotate_image(img_patch, slope) + dst = rotate_image(img_patch, slope) dst = dst.astype(np.uint8) dst = dst[:, :, 0] dst[dst != 0] = 1 @@ -3501,7 +3424,7 @@ class eynollah: textline_mask_help = np.zeros((textline_mask.shape[0] + int(2 * y_help), textline_mask.shape[1] + int(2 * x_help), 3)) textline_mask_help[y_help : y_help + textline_mask.shape[0], x_help : x_help + textline_mask.shape[1], :] = np.copy(textline_mask[:, :, :]) - dst = self.rotate_image(textline_mask_help, slope) + dst = rotate_image(textline_mask_help, slope) dst = dst[:, :, 0] dst[dst != 0] = 1 @@ -3525,7 +3448,7 @@ class eynollah: img_contour_help[y_help : y_help + img_contour.shape[0], x_help : x_help + img_contour.shape[1], :] = np.copy(img_contour[:, :, :]) - img_contour_rot = self.rotate_image(img_contour_help, slope) + img_contour_rot = rotate_image(img_contour_help, slope) # plt.imshow(img_contour_rot_help) # plt.show() @@ -3867,7 +3790,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) # plt.imshow(img_rot) # plt.show() img_rot[img_rot != 0] = 1 @@ -3914,7 +3837,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) ##plt.imshow(img_rot) ##plt.show() img_rot[img_rot != 0] = 1 @@ -3962,7 +3885,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) # plt.imshow(img_rot) # plt.show() img_rot[img_rot != 0] = 1 @@ -4024,7 +3947,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) ##plt.imshow(img_rot) ##plt.show() img_rot[img_rot != 0] = 1 @@ -4070,7 +3993,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) ##plt.imshow(img_rot) ##plt.show() img_rot[img_rot != 0] = 1 @@ -4115,7 +4038,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) # plt.imshow(img_rot) # plt.show() img_rot[img_rot != 0] = 1 @@ -4167,7 +4090,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) ##plt.imshow(img_rot) ##plt.show() img_rot[img_rot != 0] = 1 @@ -4213,7 +4136,7 @@ class eynollah: indexer = 0 for rot in angels: - img_rot = self.rotate_image(img_resized, rot) + img_rot = rotate_image(img_resized, rot) ##plt.imshow(img_rot) ##plt.show() img_rot[img_rot != 0] = 1 @@ -4278,7 +4201,7 @@ class eynollah: indexer = 0 for rot in angles: # print(rot,'rot') - img_rotated = self.rotate_image(img_patch_padded, rot) + img_rotated = rotate_image(img_patch_padded, rot) img_rotated[img_rotated != 0] = 1 # plt.imshow(img_rotated) @@ -4326,7 +4249,7 @@ class eynollah: indexer = 0 for rot in angles: # print(rot,'rot') - img_rotated = self.rotate_image(img_patch_padded, rot) + img_rotated = rotate_image(img_patch_padded, rot) img_rotated[img_rotated != 0] = 1 # plt.imshow(img_rotated) @@ -4371,7 +4294,7 @@ class eynollah: poly_sub = [] for mv in range(len(boxes_per_process)): - crop_img, _ = self.crop_image_inside_box(boxes_per_process[mv], np.repeat(textline_mask_tot[:, :, np.newaxis], 3, axis=2)) + crop_img, _ = crop_image_inside_box(boxes_per_process[mv], np.repeat(textline_mask_tot[:, :, np.newaxis], 3, axis=2)) crop_img = crop_img[:, :, 0] crop_img = cv2.erode(crop_img, self.kernel, iterations=2) @@ -5636,7 +5559,7 @@ class eynollah: for ind in np.unique(regions_prediction[:, :]): interest_reg = (regions_prediction[:, :] == ind) * 1 interest_reg = interest_reg.astype(np.uint8) - deskewed_new = self.rotate_image(interest_reg, slope) + deskewed_new = rotate_image(interest_reg, slope) deskewed_new = deskewed_new[:, :] deskewed_new[deskewed_new != 0] = ind @@ -5734,14 +5657,14 @@ class eynollah: # if abs(slope)>=1: # slope=0 - # dst=self.rotate_image(textline_mask,slope_true) + # dst=rotate_image(textline_mask,slope_true) # dst=dst[:,:,0] # dst[dst!=0]=1 image_regions_deskewd = np.zeros(textline_mask_org[:, :].shape) for ind in np.unique(textline_mask_org[:, :]): interest_reg = (textline_mask_org[:, :] == ind) * 1 interest_reg = interest_reg.astype(np.uint8) - deskewed_new = self.rotate_image(interest_reg, slope_true) + deskewed_new = rotate_image(interest_reg, slope_true) deskewed_new = deskewed_new[:, :] deskewed_new[deskewed_new != 0] = ind @@ -8596,7 +8519,7 @@ class eynollah: regions_without_seperators = self.return_regions_without_seperators(region_pre_p) ##print(args_big_parts,'args_big_parts') - # image_page_otsu=self.otsu_copy(image_page_deskewd) + # image_page_otsu=otsu_copy(image_page_deskewd) # print(np.unique(image_page_otsu[:,:,0])) # image_page_background_zero=self.image_change_background_pixels_to_zero(image_page_otsu) @@ -8698,7 +8621,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8726,7 +8649,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8775,7 +8698,7 @@ class eynollah: img = img[0:one_third_upper_ny, :, :] if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8792,7 +8715,7 @@ class eynollah: img = img[one_third_upper_ny : int(2 * one_third_upper_ny), :, :] if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8809,7 +8732,7 @@ class eynollah: img = img[int(2 * one_third_upper_ny) :, :, :] if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8849,7 +8772,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8871,7 +8794,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -8984,7 +8907,7 @@ class eynollah: median_blur = False if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9012,7 +8935,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9032,7 +8955,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9146,7 +9069,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9172,7 +9095,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9220,7 +9143,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9250,7 +9173,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9287,7 +9210,7 @@ class eynollah: img = resize_image(img_org, int(img_org.shape[0] * ratio_y), int(img_org.shape[1] * ratio_x)) if binary: - img = self.otsu_copy_binary(img) # self.otsu_copy(img) + img = otsu_copy_binary(img) # otsu_copy(img) img = img.astype(np.uint16) if median_blur: @@ -9352,7 +9275,7 @@ class eynollah: # img= resize_image(img_org, int(img_org.shape[0]*ratio_y), int(img_org.shape[1]*ratio_x)) # if binary: - # img = self.otsu_copy_binary(img)#self.otsu_copy(img) + # img = otsu_copy_binary(img)#otsu_copy(img) # img = img.astype(np.uint16) # if median_blur: @@ -9486,7 +9409,7 @@ class eynollah: x, y, w, h = cv2.boundingRect(cont_ind) box = [x, y, w, h] - croped_page, page_coord = self.crop_image_inside_box(box, image_page) + croped_page, page_coord = crop_image_inside_box(box, image_page) croped_page = resize_image(croped_page, int(croped_page.shape[0] / self.scale_y), int(croped_page.shape[1] / self.scale_x)) @@ -9613,7 +9536,7 @@ class eynollah: mask_marginals[:, :] = 1 # print(mask_marginals.shape,point_left,point_right,'nadosh') - mask_marginals_rotated = self.rotate_image(mask_marginals, -slope_deskew) + mask_marginals_rotated = rotate_image(mask_marginals, -slope_deskew) # print(mask_marginals_rotated.shape,'nadosh') mask_marginals_rotated_sum = mask_marginals_rotated.sum(axis=0) @@ -9715,7 +9638,7 @@ class eynollah: polygons_per_par_process_per_process = [] textline_cnt_seperated = np.zeros(textline_mask_tot.shape) for iiii in range(len(polygons_per_process)): - # crop_img,crop_coor=self.crop_image_inside_box(boxes_text[mv],image_page_rotated) + # crop_img,crop_coor=crop_image_inside_box(boxes_text[mv],image_page_rotated) # arg_max=np.argmax(areas_cnt_only_text) textregions_cnt_tot_per_process.append(polygons_per_process[iiii] / scale_par) textline_region_in_image = np.zeros(textline_mask_tot.shape) @@ -11051,7 +10974,7 @@ class eynollah: regions_without_seperators = (text_regions_p[:, :] == 1) * 1 regions_without_seperators = regions_without_seperators.astype(np.uint8) - text_regions_p = self.get_marginals(self.rotate_image(regions_without_seperators, slope_deskew), text_regions_p, num_col_classifier, slope_deskew) + text_regions_p = self.get_marginals(rotate_image(regions_without_seperators, slope_deskew), text_regions_p, num_col_classifier, slope_deskew) except: pass diff --git a/sbb_newspapers_org_image/unused.py b/sbb_newspapers_org_image/unused.py index a1d270d..8c8c314 100644 --- a/sbb_newspapers_org_image/unused.py +++ b/sbb_newspapers_org_image/unused.py @@ -49,3 +49,35 @@ def resize_ann(seg_in, input_height, input_width): """ return cv2.resize(seg_in, (input_width, input_height), interpolation=cv2.INTER_NEAREST) +def get_one_hot(seg, input_height, input_width, n_classes): + seg = seg[:, :, 0] + seg_f = np.zeros((input_height, input_width, n_classes)) + for j in range(n_classes): + seg_f[:, :, j] = (seg == j).astype(int) + return seg_f + +def color_images(seg, n_classes): + ann_u = range(n_classes) + if len(np.shape(seg)) == 3: + seg = seg[:, :, 0] + + seg_img = np.zeros((np.shape(seg)[0], np.shape(seg)[1], 3)).astype(np.uint8) + colors = sns.color_palette("hls", n_classes) + + for c in ann_u: + c = int(c) + segl = seg == c + seg_img[:, :, 0] = segl * c + seg_img[:, :, 1] = segl * c + seg_img[:, :, 2] = segl * c + return seg_img + +def cleaning_probs(self, probs: np.ndarray, sigma: float) -> np.ndarray: + # Smooth + if sigma > 0.0: + return cv2.GaussianBlur(probs, (int(3 * sigma) * 2 + 1, int(3 * sigma) * 2 + 1), sigma) + elif sigma == 0.0: + return cv2.fastNlMeansDenoising((probs * 255).astype(np.uint8), h=20) / 255 + else: # Negative sigma, do not do anything + return probs + diff --git a/sbb_newspapers_org_image/utils.py b/sbb_newspapers_org_image/utils.py index dacd1c0..b9864f1 100644 --- a/sbb_newspapers_org_image/utils.py +++ b/sbb_newspapers_org_image/utils.py @@ -1,6 +1,7 @@ import numpy as np from shapely import geometry import cv2 +import imutils def filter_contours_area_of_image(image, contours, hirarchy, max_area, min_area): found_polygons_early = list() @@ -92,3 +93,52 @@ def rotation_image_new(img, thetha): rotated = imutils.rotate(img, thetha) return rotate_max_area_new(img, rotated, thetha) +def rotate_image(img_patch, slope): + (h, w) = img_patch.shape[:2] + center = (w // 2, h // 2) + M = cv2.getRotationMatrix2D(center, slope, 1.0) + return cv2.warpAffine(img_patch, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) + +def rotyate_image_different( img, slope): + # img = cv2.imread('images/input.jpg') + num_rows, num_cols = img.shape[:2] + + rotation_matrix = cv2.getRotationMatrix2D((num_cols / 2, num_rows / 2), slope, 1) + img_rotation = cv2.warpAffine(img, rotation_matrix, (num_cols, num_rows)) + return img_rotation + +def crop_image_inside_box(box, img_org_copy): + image_box = img_org_copy[box[1] : box[1] + box[3], box[0] : box[0] + box[2]] + return image_box, [box[1], box[1] + box[3], box[0], box[0] + box[2]] + +def otsu_copy(img): + img_r = np.zeros(img.shape) + img1 = img[:, :, 0] + img2 = img[:, :, 1] + img3 = img[:, :, 2] + # print(img.min()) + # print(img[:,:,0].min()) + # blur = cv2.GaussianBlur(img,(5,5)) + # ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) + retval1, threshold1 = cv2.threshold(img1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) + retval2, threshold2 = cv2.threshold(img2, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) + retval3, threshold3 = cv2.threshold(img3, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) + + img_r[:, :, 0] = threshold1 + img_r[:, :, 1] = threshold1 + img_r[:, :, 2] = threshold1 + return img_r + +def otsu_copy_binary(img): + img_r = np.zeros((img.shape[0], img.shape[1], 3)) + img1 = img[:, :, 0] + + retval1, threshold1 = cv2.threshold(img1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) + + img_r[:, :, 0] = threshold1 + img_r[:, :, 1] = threshold1 + img_r[:, :, 2] = threshold1 + + img_r = img_r / float(np.max(img_r)) * 255 + return img_r +