def remove_tiny_areas_and_recalc_score(): RESULT_ROOT_DIR = "tmp/detect_building_damage/master-v2/fixed_histogram" RESULT_GROUND_TRUTH = "img/resource/ground_truth" C_RED = [0, 0, 255] C_ORANGE = [0, 127, 255] target_dirs = [ dir_path for (dir_path, dir_names, file_names) in walk(RESULT_ROOT_DIR) if dir_path.endswith("meanshift_and_color_thresholding") ] for target_dir in target_dirs: eprint(f"Target: {target_dir}") gt_type, experiment_num = re.match(r".*/GT_(.*)/aerial_roi([0-9]).*", target_dir).groups() eprint( dedent(f""" Experiment Num: {experiment_num} GT_TYPE: GT_{gt_type} """)) result = imread_with_error( path.join(target_dir, "building_damage.tiff"), cv2.IMREAD_UNCHANGED) # Fixing Image result_fixed = BuildingDamageExtractor._remove_tiny_area( (result * 255.0).astype(np.uint8)) imwrite_with_error(path.join(target_dir, "building_damage_fixed.tiff"), result_fixed.astype(np.float32)) # Re-calc Score ground_truth = imread_with_error( path.join(RESULT_GROUND_TRUTH, f"aerial_roi{experiment_num}.png")) if gt_type == "BOTH": ground_truth = np.all( (ground_truth == C_RED) | (ground_truth == C_ORANGE), axis=2) elif gt_type == "RED": ground_truth = np.all(ground_truth == C_RED, axis=2) elif gt_type == "ORANGE": ground_truth = np.all(ground_truth == C_ORANGE, axis=2) cm, scores = evaluation_by_confusion_matrix(result_fixed, ground_truth) j = {"Confusion Matrix": cm, "Score": scores} json.dump(j, open(path.join(target_dir, "scores_fixed_result.json"), "w"), ensure_ascii=False, sort_keys=True, indent="\t")
def gen_source_overlay(): ROOT_DIR = "/Users/popunbom/Google Drive/情報学部/研究/修士/最終発表/Thesis/img/resource" SRC_DIR = join(ROOT_DIR, "aerial_image") GT_DIR = join(ROOT_DIR, "ground_truth") ROAD_MASK_DIR = join(ROOT_DIR, "road_mask") for exp_num in [1, 2, 3, 5, 9]: eprint("Experiment Num:", exp_num) bg, fg, road_mask = [ imread_with_error( join(root_dir, f"aerial_roi{exp_num}.png") ) for root_dir in [ SRC_DIR, GT_DIR, ROAD_MASK_DIR ] ] road_mask[:, :, [0, 2]] = [0, 0] gt_overlay = hsv_blending(bg, fg) imwrite_with_error( join( GT_DIR, f"aerial_roi{exp_num}_overlay.png" ), gt_overlay ) road_mask_overlay = hsv_blending(bg, road_mask) imwrite_with_error( join( ROAD_MASK_DIR, f"aerial_roi{exp_num}_overlay.png" ), road_mask_overlay )
def gen_result_road_damage(): ROOT_DIR_RESULT = "/Users/popunbom/.tmp/EQDmgAnalyzr/detect_road_damage_v2" dirs = [ join(ROOT_DIR_RESULT, d) for d in listdir(ROOT_DIR_RESULT) if isdir(join(ROOT_DIR_RESULT, d)) ] for d in dirs: print(d) exp_num, = re.match( r".*aerial_roi([0-9]).*", d ).groups() src = imread_with_error( join( ROOT_DIR_SRC, f"aerial_roi{exp_num}.png" ) ) src_gs = cv2.cvtColor( cv2.cvtColor( src, cv2.COLOR_BGR2GRAY ), cv2.COLOR_GRAY2BGR ) road_mask = imread_with_error( join( ROOT_DIR_ROAD_MASK, f"aerial_roi{exp_num}.png" ), cv2.IMREAD_GRAYSCALE ).astype(bool) src[road_mask == False] = [0, 0, 0] result_paths = [d] if exists(join(d, "removed_vegetation")): result_paths.append( join(d, "removed_vegetation") ) for result_path in result_paths: result = imread_with_error( join( result_path, "result_extracted.tiff" ), cv2.IMREAD_UNCHANGED ) result = (cm.get_cmap("jet")( result / result.max() ) * 255).astype(np.uint8)[:, :, [2, 1, 0]] dst = hsv_blending(src, result) dst[road_mask == False] = src_gs[road_mask == False] imwrite_with_error( join( result_path, f"study_overlay.png" ), dst )
def eval_by_utilize_methods(): ROOT_DIR_RESULT = "/Users/popunbom/Google Drive/情報学部/研究/修士/最終発表/Thesis/img/result" SPLIT_PATTERNS = { "MEAN_SHIFT" : (0,), "ANGLE_VARIANCE" : (1,), "PIXEL_CLASSIFY" : (2,), "MEAN_SHIFT_AND_ANGLE_VARIANCE" : (0, 1), "MEAN_SHIFT_AND_PIXEL_CLASSIFY" : (0, 2), "ANGLE_VARIANCE_AND_PIXEL_CLASSIFY" : (1, 2), "MEAN_SHIFT_AND_ANGLE_VARIANCE_AND_PIXEL_CLASSIFY": (0, 1, 2) } result_paths = sorted([ join(dir_path, "result.png") for (dir_path, dir_names, file_names) in walk(ROOT_DIR_RESULT) if "result.png" in file_names ]) for result_path in result_paths: exp_num, = re.match( r".*aerial_roi([0-9]).*", result_path ).groups() result_src = imread_with_error( result_path ) gt_src = imread_with_error( join( ROOT_DIR_GT, f"aerial_roi{exp_num}.png" ) ) result_dir = join( dirname(result_path), "evaluation" ) if not exists(result_dir): makedirs(result_dir) NDARRAY_ASSERT(result_src, ndim=3) print("File:", result_path) print( np.unique( result_src.reshape(result_src.shape[0] * result_src.shape[1], result_src.shape[2]), axis=0 ) ) # Use Vegetation Mask OPTIONS = ["NORMAL"] path_vegetation_mask = join( ROOT_DIR_VEG_MASK, f"aerial_roi{exp_num}.png" ) vegetation_mask = None if exists(path_vegetation_mask): vegetation_mask = imread_with_error( path_vegetation_mask, cv2.IMREAD_GRAYSCALE ).astype(bool) OPTIONS.append("REMOVED_VEGETATION") scores = dict() for option in OPTIONS: for name, channels in SPLIT_PATTERNS.items(): eprint("Evaluation:", name) result = np.zeros(result_src.shape[:2], dtype=np.int16) for channel in channels: result += (result_src[:, :, channel] != 0) result = result.astype(bool) if option == "NORMAL": save_dir = result_dir elif option == "REMOVED_VEGETATION": result = result & ~vegetation_mask save_dir = join( result_dir, "removed_vegetation" ) if not exists(save_dir): makedirs(save_dir) imwrite_with_error( join(save_dir, name.replace(" & ", "_and_") + ".png"), (result * 255).astype(np.uint8) ) scores[name] = dict() for gt_type in ["GT_BOTH", "GT_ORANGE", "GT_RED"]: ground_truth = None if gt_type == "GT_BOTH": ground_truth = np.all( (gt_src == C_RED) | (gt_src == C_ORANGE), axis=2 ) elif gt_type == "GT_RED": ground_truth = np.all( gt_src == C_RED, axis=2 ) elif gt_type == "GT_ORANGE": ground_truth = np.all( gt_src == C_ORANGE, axis=2 ) cm, metrics = evaluation_by_confusion_matrix( result, ground_truth ) scores[name][gt_type] = { "Confusion Matrix": cm, "Score" : metrics } json.dump( scores, open(join(save_dir, "scores.json"), "w"), ensure_ascii=False, sort_keys=True, indent="\t" )
def apply_vegetation_mask(): ROOT_DIR_RESULT = "/Users/popunbom/Google Drive/情報学部/研究/修士/最終発表/Thesis/img" ROOT_DIR_VEG = "img/resource/vegetation_mask" ROOT_DIR_SRC = join(ROOT_DIR_RESULT, "resource/aerial_image") for exp_num in [1, 2, 3, 5, 9]: file_name = f"aerial_roi{exp_num}.png" result_dir = join(ROOT_DIR_RESULT, f"result/aerial_roi{exp_num}") save_dir = join(result_dir, "extract_vegetation") if not exists(save_dir): makedirs(save_dir) src = imread_with_error( join(ROOT_DIR_SRC, file_name) ) veg_mask = imread_with_error( join(ROOT_DIR_VEG, file_name), ) result = imread_with_error( join(result_dir, "result.png") ) imwrite_with_error( join( save_dir, "thresholded.png" ), veg_mask ) # WHITE -> GREEN veg_mask[:, :, [0, 2]] = [0, 0] veg_overlay = hsv_blending( bg_img=src, fg_img=veg_mask, bg_v_scale=0.6, fg_v_scale=1.5, ) imwrite_with_error( join( save_dir, "vegetation_overlay.png" ), veg_overlay ) # Result - Vegetation veg_mask_bin = veg_mask[:, :, 1].astype(bool) result[veg_mask_bin == True] = [0, 0, 0] imwrite_with_error( join( result_dir, "result_removed_vegetation.png" ), result ) # Overlay result result_overlay = hsv_blending( bg_img=src, fg_img=result, bg_v_scale=0.6 ) imwrite_with_error( join( result_dir, "result_overlay_removed_vegetation.png" ), result_overlay )
def gen_result_overlay(): ROOT_DIR = "/Users/popunbom/Google Drive/情報学部/研究/修士/最終発表/Thesis/img" SRC_DIR = join(ROOT_DIR, "resource/aerial_image") for exp_num in [1, 2, 3, 5, 9]: eprint("Experiment Num:", exp_num) bg = imread_with_error( join( SRC_DIR, f"aerial_roi{exp_num}.png" ) ) building_damage = imread_with_error( join( ROOT_DIR, f"result/aerial_roi{exp_num}/result.png" ) ) building_damage_overlay = hsv_blending(bg, building_damage, bg_v_scale=0.6) imwrite_with_error( join( ROOT_DIR, f"result/aerial_roi{exp_num}/result_overlay.png" ), building_damage_overlay ) road_damage = imread_with_error( join( ROOT_DIR, f"result/aerial_roi{exp_num}/road_damage/thresholded.png" ) ) # White -> Red road_damage[:, :, [0, 1]] = [0, 0] road_damage_overlay = hsv_blending(bg, road_damage) imwrite_with_error( join( ROOT_DIR, f"result/aerial_roi{exp_num}/road_damage/result_overlay.png" ), road_damage_overlay ) road_damage_wo_veg = imread_with_error( join( ROOT_DIR, f"result/aerial_roi{exp_num}/road_damage/removed_vegetation/thresholded.png" ) ) # White -> Red road_damage_wo_veg[:, :, [0, 1]] = [0, 0] road_damage_wo_veg_overlay = hsv_blending(bg, road_damage_wo_veg) imwrite_with_error( join( ROOT_DIR, f"result/aerial_roi{exp_num}/road_damage/removed_vegetation/result_overlay.png" ), road_damage_wo_veg_overlay )