전공 공부/파이썬 기초

데이터 전처리와 관련된 유용한 함수들

상솜공방 2023. 12. 26. 17:25

이미지 파일을 불러와 넘파이 배열로 만들어주는 함수

def read_image(image_path):
    # 이미지 파일을 바이트로 읽어옵니다.
    with open(image_path, 'rb') as f:
    	# 텍스트 파일이 아니므로 rb, 즉 이진 코드로 읽어온다.
        # 만약 이미지가 PNG 형식이고, pyspng 라이브러리가 설치되어 있다면
        if pyspng is not None and image_path.endswith('.png'):
            # pyspng를 사용하여 PNG 이미지를 읽어옵니다.
            image = pyspng.load(f.read())
        else:
            # 그 외의 경우에는 PIL 라이브러리를 사용하여 이미지를 NumPy 배열로 읽어옵니다.
            image = np.array(PIL.Image.open(f))

    # 만약 이미지가 흑백이라면, 색상 채널을 추가하여 RGB 형식으로 변경합니다.
    if image.ndim == 2:
        image = image[:, :, np.newaxis]  # HW => HWC
        image = np.repeat(image, 3, axis=2)

    # 이미지의 차원 순서를 변경하여 CHW 형식으로 만듭니다.
    image = image.transpose(2, 0, 1)  # HWC => CHW

    # RGB 채널만 선택합니다.
    image = image[:3]

    return image

 

 

넘파이 배열을 이미지로 다시 바꿔주는 함수

def to_image(image, lo, hi):
    # 이미지를 NumPy 배열로 변환하고 데이터 타입을 float32로 설정합니다.
    image = np.asarray(image, dtype=np.float32)

    # 이미지를 lo에서 hi로 정규화합니다.
    image = (image - lo) * (255 / (hi - lo))

    # 소수점을 반올림하고, 0에서 255 사이의 값으로 클리핑한 후 uint8로 변환합니다.
    image = np.rint(image).clip(0, 255).astype(np.uint8)

    # 이미지의 차원 순서를 변경하여 HWC 형식으로 만듭니다.
    image = np.transpose(image, (1, 2, 0))

    # 이미지가 흑백이면, 색상 채널을 추가하여 RGB 형식으로 변경합니다.
    if image.shape[2] == 1:
        image = np.repeat(image, 3, axis=2)

    # 최종적으로 이미지를 반환합니다.
    return image

'전공 공부 > 파이썬 기초' 카테고리의 다른 글

VSCode 디버깅 설정  (0) 2024.01.22
(*args, **kwargs)의 의미  (0) 2023.10.13
모델의 gradient update 여부를 결정하는 함수  (0) 2023.10.03
모델 가중치 초기화  (1) 2023.10.03
make_dataset 함수  (1) 2023.10.02