Skip to content

Preprocessing

Enhancement project에서 사용 가능한 preprocessing 종류는 다음과 같습니다 (총 6종류)

[
    "noise_reduction",
    "sharpen",
    "contrast",
    "adaptive_contrast",
    "built_in_enhancer",
    "final_touch_up",
]

preprocessing기능은 PreProcessor API를 통해 제공됩니다.

enhancement.PreProcessor

Enhancement의 preprocessing을 위한 PreProcessor class 입니다.

Usage

demo/preprocessing.py 참고

build(device) classmethod

PreProcessor class의 instance를 생성합니다.

Parameters:

Name Type Description Default
"device"

Union[int, str], # GPU 번호 (int) or "cpu" (str) (default "cpu")

required

Returns:

Name Type Description
PreProcessor PreProcessor

PreProcessor class의 instance.

preprocess(image, config_list)

image를 preprocessing합니다.

Parameters:

Name Type Description Default
image np.ndarray

augmentation을 적용할 image 입니다.

data type: uint8
shape: H x W - Gray

required
config_list List[Dict]

preprocessing 정보가 담긴 config list.

[
    {
        "_target_": str,  # preprocessing function name
        "mask": Optional[np.ndarray],  # preprocessing function이 적용될 mask 입니다. 0이면 적용되지 않고, 1이면 적용됩니다. mask=None이면 전체 영역에 적용됩니다.
            ```
            data type: uint8
            shape: H x W
            ```
        "denoise_level": float,  # noise_reduction 함수에서 사용하는 parameter입니다. 유효 범위는 다음과 같습니다. [0.0, 5.0]. Defaults to 0.15.
        "sharpness_level": float,  # sharpen 함수에서 사용하는 parameter입니다. 유효 범위는 다음과 같습니다. [0.0, 10.0]. Defaults to 1.0.
        "contrast_level": float,  # contrast 함수에서 사용하는 parameter입니다. 유효 범위는 다음과 같습니다. [0.0, 10.0]. Defaults to 1.0.
        "clip_limit": float,  # adaptive_contrast 함수에서 사용하는 parameter입니다. 유효 범위는 다음과 같습니다. [0.0, 100.0]. Defaults to 2.0.
        "tile_grid_size": int,  # adaptive_contrast 함수에서 사용하는 parameter입니다. 유효 범위는 다음과 같습니다. [1, 100]. Defaults to 8.
    }
    ...,  # times number of preprocessing
]

required

Returns:

Type Description
np.ndarray

np.ndarray: preprocessed image.

data type: uint8
shape: H x W - Gray

Example
preprocessor = PreProcessor.build(device="cpu")
image = np.zeros((512, 512), dtype=np.uint8)
config_list = [
    {
        "_target_": "noise_reduction",
        "mask": np.ones((512, 512), dtype=np.uint8),
        "denoise_level": 0.15,
    },
    {
        "_target_": "sharpen",
        "mask": np.ones((512, 512), dtype=np.uint8),
        "sharpness_level": 1.0,
    },
    {
        "_target_": "contrast",
        "mask": np.ones((512, 512), dtype=np.uint8),
        "contrast_level": 1.0,
    },
    {
        "_target_": "adaptive_contrast",
        "mask": np.ones((512, 512), dtype=np.uint8),
        "clip_limit": 2.0,
        "tile_grid_size": 8,
    },
    {
        "_target_": "built_in_enhancer",
        "mask": np.ones((512, 512), dtype=np.uint8),
    },
    {
        "_target_": "final_touch_up",
    },
]
image = preprocessor.preprocess(image, config_list)