Newer
Older
DenoiseEsoImg / main.py
@sato sato on 1 Mar 2022 1 KB Dockerfileの追加
import os.path as osp
from glob import glob

import cv2
import numpy as np
from tqdm import tqdm


def make_dataset_list():
    imgs_path_list = glob("./*.png")

    dataset_list = []
    for path in imgs_path_list:
        img_num = int(osp.basename(path)[:-4])
        target_path = osp.join(osp.dirname(path), "{:08}.png".format(img_num + 1))
        if osp.exists(target_path):
            dataset_list.append({"seq_0": path, "seq_1": target_path})

    return dataset_list


dataset_list = make_dataset_list()
print(f"samples: {len(dataset_list)}")

mae_list = []
for pair in tqdm(dataset_list):
    seq_0 = cv2.imread(pair["seq_0"])
    seq_1 = cv2.imread(pair["seq_1"])

    img_num = int(osp.basename(pair["seq_0"])[:-4])
    cv2.imwrite(f"./diff/diff_{img_num}_src.jpg", np.clip(np.abs(seq_0 - seq_1), 0, 255).astype(np.uint8))

    cv2.imshow("diff1", np.clip(np.abs(seq_0 - seq_1), 0, 255).astype(np.uint8))

    # medianフィルタ
    # seq_0 = cv2.medianBlur(seq_0, 3)
    # seq_1 = cv2.medianBlur(seq_1, 3)

    # Gaussianフィルタ
    # seq_0 = cv2.GaussianBlur(seq_0, (3, 3), 0)
    # seq_1 = cv2.GaussianBlur(seq_1, (3, 3), 0)

    # 移動平均フィルタ
    # seq_0 = cv2.blur(seq_0, (3, 3))
    # seq_1 = cv2.blur(seq_1, (3, 3))

    # バイラテラルフィルタ
    # seq_0 = cv2.bilateralFilter(seq_0, 3, 20, 20)
    # seq_1 = cv2.bilateralFilter(seq_1, 3, 20, 20)

    # ノンローカルミーンフィルタ
    seq_0 = cv2.fastNlMeansDenoisingColored(seq_0, None, 10, 10, 7, 21)
    seq_1 = cv2.fastNlMeansDenoisingColored(seq_1, None, 10, 10, 7, 21)

    cv2.imshow("seq_0", seq_0)
    cv2.imshow("seq_1", seq_1)

    cv2.imwrite(f"./diff/diff_{img_num}_denoise.jpg", np.clip(np.abs(seq_0 - seq_1), 0, 255).astype(np.uint8))
    cv2.imshow("diff2", np.clip(np.abs(seq_0 - seq_1), 0, 255).astype(np.uint8))

    mae_list.append(np.mean(np.abs(seq_0 - seq_1)))
    cv2.waitKey(3000)

print(f"ave_mae: {sum(mae_list) / len(mae_list)}")