본문 바로가기
목차
Python

[PyTorch] Photometric-torchvision.transforms.v2

by ds31x 2025. 6. 15.
728x90
반응형

Photometric Image Transformation
이미지의 측광학적 속성(photometric properties) 을 수정
하는 과정을 가리킴.

 

https://gist.github.com/dsaint31x/e87ebc2dd6a10edc7a46b5aa4118256f

 

dl_photometric-torchvision-transforms-v2.ipynb

dl_photometric-torchvision-transforms-v2.ipynb. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

Photometric Image Transformation의 주요 특징

1. 변경되는 속성들

  • 밝기(Brightness): 이미지 전체의 밝기 수준
  • 대비(Contrast): 밝은 부분과 어두운 부분의 차이
  • 색상(Color): 색조, 채도, 색온도 등
  • 톤(Tone): 이미지의 전반적인 색조와 분위기

2. 보존되는 속성

  • 기하학적 구조(Geometric Structure): 객체의 모양, 위치, 크기 관계는 변경되지 않음
  • 즉, 픽셀의 공간적 배치는 그대로 유지

3. 랜덤성(Randomness)

  • Grayscale을 제외한 모든 photometric 변환은 랜덤
  • 같은 transform 클래스의 instance라도 매번 다른 결과 생성
  • Data Augmentation 효과로 모델의 일반화 성능 향상

4. 입력

  • PIL.Image.Image 객체 또는 PyTorch의 Tensor (TVTensor 의 Image포함) 객체 모두 가능.
# 매번 다른 결과를 생성하는 photometric 변환
color_jitter = transforms.ColorJitter(brightness=0.2, contrast=0.2)

# 같은 이미지에 동일한 변환을 적용해도 결과가 다름
result1 = color_jitter(image)  # 밝기 +10%, 대비 +5%
result2 = color_jitter(image)  # 밝기 -15%, 대비 +8%
result3 = color_jitter(image)  # 밝기 +5%, 대비 -12%

이러한 randomness 덕분에
하나의 원본 이미지로부터 무수히 많은 변형된 이미지를 생성할 수 있어
Data Augmentation의 핵심 역할을 수행.

Prerequisites

colab에서 다음의 코드들을 수행시켜서 이미지를 다운로드하고 아래의 예제 코드를 수행할 수 있도록 함:

from torchvision.transforms.v2 import (
    Grayscale,                  # 컬러→흑백 변환 (non-random, 정보 손실)
    ColorJitter,                # 밝기/대비/채도/색조 랜덤 조정
    GaussianBlur,               # 가우시안 블러 효과 (노이즈 제거, 부드러움)
    RandomInvert,               # 색상 반전 (네거티브 효과)
    RandomPosterize,            # 색상 비트 수 감소 (포스터화, 평면적 색상)
    RandomSolarize,             # 임계값 이상 픽셀 반전 (과노출 효과)
    RandomAdjustSharpness,      # 선명도 조정 (엣지 강화/감소)
    RandomAutocontrast,         # 자동 대비 최대화 (히스토그램 스트레칭)
    RandomEqualize,             # 히스토그램 평활화 (명암 분포 균등화)
    JPEG,                       # JPEG 압축/해제 (압축 아티팩트 시뮬레이션)
)

img_path = "assets/astronaut.jpg"  
img_url = "https://raw.githubusercontent.com/pytorch/vision/main/gallery/assets/astronaut.jpg"

!mkdir -p assets  
!curl -o {img_path} {img_url}

from torchvision.io import decode_image

original_img = decode_image(img_path)
print(f" {type(original_img) = }\n \
{original_img.dtype = }\n \
{original_img.shape = }")

 

다음은 이미지 출력을 위한 plot 함수임:

더보기
# https://github.com/pytorch/vision/tree/main/gallery/
# 위의 torchvision관련 예제들의 display를 위한 plot함수를 그대로 가져옴.

import matplotlib.pyplot as plt
import torch
from torchvision.utils import draw_bounding_boxes, draw_segmentation_masks
from torchvision import tv_tensors
from torchvision.transforms.v2 import functional as F


def plot(imgs, row_title=None, **imshow_kwargs):
    if not isinstance(imgs[0], list):
        # Make a 2d grid even if there's just 1 row
        imgs = [imgs]

    num_rows = len(imgs)
    num_cols = len(imgs[0])
    _, axs = plt.subplots(nrows=num_rows, ncols=num_cols, squeeze=False)
    for row_idx, row in enumerate(imgs):
        for col_idx, img in enumerate(row):
            boxes = None
            masks = None
            if isinstance(img, tuple):
                img, target = img
                if isinstance(target, dict):
                    boxes = target.get("boxes")
                    masks = target.get("masks")
                elif isinstance(target, tv_tensors.BoundingBoxes):
                    boxes = target
                else:
                    raise ValueError(f"Unexpected target type: {type(target)}")
            img = F.to_image(img)
            if img.dtype.is_floating_point and img.min() < 0:
                # Poor man's re-normalization for the colors to be OK-ish. This
                # is useful for images coming out of Normalize()
                img -= img.min()
                img /= img.max()

            img = F.to_dtype(img, torch.uint8, scale=True)
            if boxes is not None:
                img = draw_bounding_boxes(img, boxes, colors="yellow", width=3)
            if masks is not None:
                img = draw_segmentation_masks(img, masks.to(torch.bool), colors=["green"] * masks.shape[0], alpha=.65)

            ax = axs[row_idx, col_idx]
            ax.imshow(img.permute(1, 2, 0).numpy(), **imshow_kwargs)
            ax.set(xticklabels=[], yticklabels=[], xticks=[], yticks=[])

    if row_title is not None:
        for row_idx in range(num_rows):
            axs[row_idx, 0].set(ylabel=row_title[row_idx])

    plt.tight_layout()

Grayscale

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.Grayscale.html

 

Grayscale — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 컬러 이미지를 Gray-scale (L) 이미지로 변환
  • RGB 채널을 가중 평균하여 단일 채널 또는 3채널 그레이스케일 이미지 생성: num_output_channels
  • 색상 정보를 제거하고 밝기(Luma) 정보만 유지

사용 용도:

  • 색상이 중요하지 않은 작업에서 계산 복잡도 감소 (예: 엣지 검출, 텍스트 인식)
  • 모델이 색상에 의존하지 않고 형태나 텍스처에 집중하도록 훈련
  • 메모리 사용량 절약 (단일 채널 사용 시)
  • 흑백 이미지 데이터셋과의 일관성 유지
  • 의료 영상, X-ray, MRI 등 원래 그레이스케일인 데이터와 통합 처리
  • 조명 조건에 불변한 특징 학습을 위한 전처리

주요 파라미터:

  • num_output_channels (int): 출력 채널 수를 지정
    • 1: 단일 채널 그레이스케일 이미지 생성 (기본값)
    • 3: 3채널 그레이스케일 이미지 생성 (RGB 값이 모두 동일)
    • 3채널로 출력하면 기존 RGB 모델과 호환성 유지 가능

변환 공식:

  • ITU-R 601-2 luma 변환 공식 사용: International Telecommunication Union - Radiocommunication sector의 601번 권고안의 2번째 개정판의 Luma(휘도) 변환 공식.
  • Y = 0.299 * R + 0.587 * G + 0.114 * B
  • 인간의 시각적 인지에 기반한 가중치 적용

특징:

  • Non-random 변환: 항상 동일한 입력에 대해 동일한 출력 생성
  • Deterministic: 데이터 증강이 아닌 전처리 목적으로 사용
  • 정보 손실: 색상 정보가 영구적으로 제거됨

사용 예시:

gray_img = Grayscale()(original_img)
plot([original_img, gray_img], cmap='gray')

관련: v2.functional.rgb_to_grayscale

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


ColorJitter

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.ColorJitter.html

 

ColorJitter — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지의 색상(chrominance) 속성을 랜덤하게 조정하는 측광학적 변환
  • 밝기(brightness), 대비(contrast), 채도(saturation), 색조(hue)를 독립적으로 변경
  • 다양한 조명 조건과 색상 환경을 시뮬레이션하여 강력한 데이터 증강 효과 제공

사용 용도:

  • Data Augmentation을 통한 모델의 일반화 성능 향상 및 overfitting(과적합) 방지
  • 다양한 조명 조건(실내/실외, 낮/밤, 형광등/백열등)에 대한 견고성 학습
  • 카메라 설정 변화(노출, 화이트 밸런스, 채도)에 불변한 특징 학습
  • 색상 변화에 민감하지 않은 객체 인식 모델 훈련
  • 실제 환경에서 발생하는 색상 왜곡과 조명 변화 시뮬레이션
  • classification 및 detection에서 표준 Data Augmentation 기법 으로 활용

주요 파라미터:

  • brightness (float, sequence of float): 밝기 조정 범위
    • float: 대칭 범위 [max(0, 1-brightness), 1+brightness]
    • sequence of float: 비대칭 범위 [min, max]
    • 예: 0.2는 0.8~1.2배 밝기 조정
    • 기본값: 0 (변경 없음)
  • contrast (float, sequence of float): 대비 조정 범위
    • float: 대칭 범위 [max(0, 1-contrast), 1+contrast]
    • sequence of float: 비대칭 범위 [min, max]
    • 예: 0.3은 0.7~1.3배 대비 조정
    • 기본값: 0 (변경 없음)
  • saturation (float, sequence of float): 채도 조정 범위
    • float: 대칭 범위 [max(0, 1-saturation), 1+saturation]
    • sequence of float: 비대칭 범위 [min, max]
    • 예: 0.5는 0.5~1.5배 채도 조정
    • 기본값: 0 (변경 없음)
  • hue (float, sequence of float): 색조 조정 범위
    • float: 대칭 범위 [-hue, +hue] (단위: 라디안이 아닌 0~1 스케일)
    • sequence of float: 비대칭 범위 [min, max]
    • 값 범위: [-0.5, 0.5] (색상환에서 ±180도에 해당)
    • 예: 0.1은 ±36도 색조 변경
    • 기본값: 0 (변경 없음)

특징:

  • Random 변환: 매번 다른 색상 조정값 적용
  • 독립적 조정: 각 속성이 독립적으로 랜덤하게 변경
  • 순서 랜덤화: 밝기, 대비, 채도, 색조 조정 순서도 랜덤

사용 예시:

jitter = ColorJitter(
    brightness=.5, 
    hue=.3,
    )
jittered_imgs = [jitter(original_img) for _ in range(4)]
plot([original_img] + jittered_imgs)

관련: v2.functional.adjust_XXX

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


GaussianBlur

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.GaussianBlur.html

 

GaussianBlur — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지에 가우시안 블러(Gaussian blur) 필터를 적용하여 흐림 효과 생성
  • 고주파 성분(세밀한 디테일, 노이즈)을 제거하고 이미지를 부드럽게 만드는 변환
  • 가우시안 커널을 사용하여 각 픽셀 주변의 가중 평균을 계산

사용 용도:

  • 데이터 증강을 통해 이미지의 선명도 변화에 견고한 모델 훈련
  • 노이즈 제거 및 이미지 전처리로 품질 향상
  • 초점이 맞지 않는 이미지나 모션 블러 상황 시뮬레이션
  • 이미지의 세밀한 텍스처에 과도하게 의존하지 않는 모델 학습
  • 의료 영상에서 노이즈 감소 및 부드러운 경계선 생성
  • 컴퓨터 비전에서 엣지 검출 전 전처리 단계

주요 파라미터:

다음의 Guassian Kernel $G(x,y)$를  convolution.

$$G(x,y) = \frac{1}{2\pi\sigma^2} \exp \left( -\frac{x^2+y^2}{2\sigma^2} \right)$$

  • kernel_size (int, sequence of int): 가우시안 커널의 크기
    • int: 정사각형 커널 [kernel_size, kernel_size]
    • sequence of int (height, width): 직사각형 커널 [kH, kW]
    • 홀수 값만 허용 (예: 3, 5, 7, 9, ...)
    • 큰 값일수록 더 강한 블러 효과
    • sequence of int로 지정 시 랜덤하게 선택
  • sigma (float, sequence of float): 가우시안 분포의 표준편차
    • float: 고정된 표준편차 사용
    • sequence of float: 범위 [min_sigma, max_sigma]에서 랜덤 선택
    • 큰 값일수록 더 넓은 범위의 픽셀이 블러에 영향
    • 기본값: (0.1, 2.0) (랜덤 범위)
    • None: 커널 크기에 기반한 자동 계산 sigma = 0.3 * ((kernel_size - 1) * 0.5 - 1) + 0.8

특징:

  • Conditional Random 변환: 파라미터가 범위로 지정된 경우 랜덤
  • 선형 필터: 주변 픽셀들의 가중 평균으로 계산
  • 가장자리 처리: 이미지 경계에서 적절한 패딩 적용

블러 강도 제어:

  • 약한 블러: kernel_size=3, sigma=(0.1, 0.5)
  • 중간 블러: kernel_size=5, sigma=(0.5, 1.5)
  • 강한 블러: kernel_size=9, sigma=(1.0, 2.0)

사용 예시:

blurrer = GaussianBlur(
    kernel_size=(5, 9), 
    sigma=(0.1, 5.),
    )
blurred_imgs = [blurrer(original_img) for _ in range(4)]
plot([original_img] + blurred_imgs)

관련: v2.functional.gaussian_blur

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


RandomInvert

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.RandomInvert.html

 

RandomInvert — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 지정된 확률로 이미지의 색상을 랜덤하게 반전(invert)시키는 변환
  • 각 픽셀 값을 255 - pixel_value (또는 1.0 - pixel_value)로 변환하여 네거티브 효과 생성
  • 흰색은 검은색으로, 검은색은 흰색으로 변환하는 색상 반전 효과

사용 용도:

  • 데이터 증강을 통해 색상 극성(polarity)에 불변한 모델 훈련
  • 텍스트 인식에서 흰 배경/검은 글씨 ↔ 검은 배경/흰 글씨 변환 대응
  • 의료 영상에서 양성/음성 대비 이미지 학습 (X-ray, MRI 등)
  • 이진 이미지나 문서 이미지에서 전경/배경 관계 학습
  • 야간 모드/다크 모드 인터페이스 시뮬레이션
  • 모델이 색상의 절대값이 아닌 상대적 관계에 집중하도록 유도

주요 파라미터:

  • p (float): 색상 반전을 적용할 확률
    • 0.0: 반전 없음 (항상 원본 유지)
    • 1.0: 항상 반전 적용
    • 기본값: 0.5 (50% 확률로 반전)
    • 일반적 범위: 0.1 ~ 0.5

특징:

  • Random 변환: 지정된 확률에 따라 랜덤하게 적용
  • 전역 변환: 이미지 전체에 일괄적으로 적용
  • 가역 변환: 두 번 적용하면 원본으로 복원
  • 채널별 적용: RGB 각 채널에 독립적으로 반전 적용

변환 공식:

  • 정수형 이미지 (0-255): inverted = 255 - original
  • 부동소수점 이미지 (0.0-1.0): inverted = 1.0 - original

사용 예시:

inverter = RandomInvert()
invertered_imgs = [inverter(original_img) for _ in range(4)] # 2종류만 나옴
plot([original_img] + invertered_imgs)

관련: v2.functional.invert

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


RandomPosterize

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.RandomPosterize.html

 

RandomPosterize — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지의 색상 비트 수를 랜덤하게 감소시켜 포스터화(posterization) 효과 생성
  • 각 색상 채널의 정밀도를 줄여 단계적이고 평면적인 색상 변화를 만드는 변환
  • 연속적인 색상 그라데이션을 이산적인 색상 밴드로 변환

사용 용도:

  • 데이터 증강을 통해 색상 정밀도 변화에 견고한 모델 훈련
  • 낮은 색상 품질이나 제한된 색상 팔레트 환경 시뮬레이션
  • 압축 아티팩트나 양자화 노이즈에 대한 내성 향상
  • 디지털 아트, 포스터 스타일 이미지 효과 생성
  • 모델이 세밀한 색상 변화에 과도하게 의존하지 않도록 학습
  • 레트로/빈티지 스타일 이미지 처리 시뮬레이션

주요 파라미터:

  • bits (int, sequence of int): 유지할 색상 비트 수를 지정
    • int: 고정된 비트 수 사용
    • sequence of int: 범위 [min_bits, max_bits]에서 랜덤 선택
    • 값 범위: 1 ~ 8 (일반적으로 3 ~ 6 사용)
    • 작은 값일수록 더 강한 포스터화 효과

비트 수와 색상 단계:

  • 8 bits: 256 색상 단계 (원본)
  • 6 bits: 64 색상 단계 (약간의 포스터화)
  • 4 bits: 16 색상 단계 (중간 포스터화)
  • 2 bits: 4 색상 단계 (강한 포스터화)
  • 1 bit: 2 색상 단계 (극단적 이진화)

특징:

  • Conditional Random 변환: 비트 수가 범위로 지정된 경우 랜덤
  • 채널별 적용: RGB 각 채널에 독립적으로 적용
  • 비가역 변환: 정보 손실이 발생하여 원본 복원 불가능

변환 과정:

  1. 픽셀 값을 지정된 비트 수에 맞게 마스킹 (하위비트를 모조리 0으로) : 좌시프트 후 우시프트 하기도.
  2. 하위 비트들을 제거하여 색상 단계 감소
  3. 결과적으로 평면적이고 단순한 색상 영역 생성

사용 예시:

posterizer = RandomPosterize(
    bits=2,
    )
posterized_imgs = [posterizer(original_img) for _ in range(4)]
plot([original_img] + posterized_imgs)

관련: v2.functional.posterize

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


RandomSolarize

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.RandomSolarize.html

 

RandomSolarize — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지에 솔라리제이션(solarization) 효과를 랜덤하게 적용하는 변환
  • 지정된 임계값보다 높은 픽셀 값을 반전시켜 독특한 시각적 효과 생성
  • 과노출된 필름에서 나타나는 솔라리제이션 현상을 디지털로 시뮬레이션

사용 용도:

  • Data Augmentation(데이터 증강)을 통해 극단적인 조명 조건에 견고한 모델 훈련
  • 과노출이나 강한 조명 환경에서의 이미지 인식 성능 향상
  • 모델이 픽셀 값의 절대적 크기보다 상대적 관계에 집중하도록 유도
  • 아티스틱한 이미지 효과를 통한 다양성 증가
  • 하이 다이나믹 레인지(HDR) 이미지강한 백라이트 상황 시뮬레이션
  • 컴퓨터 비전에서 밝기 변화에 불변한 특징 학습

주요 파라미터:

  • threshold (int, float): 솔라리제이션을 적용할 임계값
    • 이 값보다 높은 픽셀은 반전됨 (255 - pixel_value)
    • 이 값보다 낮거나 같은 픽셀은 변화 없음
    • 정수형 이미지: 0 ~ 255 범위
    • 부동소수점 이미지: 0.0 ~ 1.0 범위
    • 일반적인 값: 128 (중간 밝기) 또는 192 (높은 밝기)
  • p (float): 솔라리제이션을 적용할 확률
    • 0.0: 적용 안 함
    • 1.0: 항상 적용
    • 기본값: 0.5 (50% 확률)

특징:

  • Random 변환: 지정된 확률에 따라 랜덤하게 적용
  • 부분 반전: 임계값 이상의 픽셀만 선택적으로 반전
  • 채널별 적용: RGB 각 채널에 독립적으로 적용
  • 비선형 효과: 밝은 영역에서 극적인 변화 생성

변환 공식:

if pixel_value > threshold:
    new_value = 255 - pixel_value  (또는 1.0 - pixel_value)
else:
    new_value = pixel_value  (변화 없음)

시각적 효과:

  • threshold = 192: 매우 밝은 부분만 반전 (하이라이트 영역)
  • threshold = 128: 중간 밝기 이상 반전 (절반 영역)
  • threshold = 64: 대부분 영역 반전 (어두운 부분만 유지)

사용 예시:

solarizer = RandomSolarize(
    threshold=192.0,
    )
solarized_imgs = [solarizer(original_img) for _ in range(4)]
plot([original_img] + solarized_imgs)

관련: v2.functional.solarize

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


RandomAdjustSharpness

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.RandomAdjustSharpness.html

 

RandomAdjustSharpness — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지의 선예도(sharpness, 선명도)를 랜덤하게 조정하는 측광학적 변환
  • unsharp masking 기법을 사용하여 이미지를 더 선명하거나 부드럽게 만듦: 실제로는 accutance만 향상시킴.
  • 엣지와 세밀한 디테일을 강화하거나 감소시켜 이미지의 시각적 선명도 제어

https://dsaint31.tistory.com/797

 

[CV] Sharpness (선예도)

sharpness(선예도)은 세부 정보(detail)의 명확성과 질감을 얼마나 잘 나타내는지를 나타내는 주관적인 지표임. Psychophycial AttributeSharpness는 "psychophysical attribute" 또는 "perceptual quality measure"로, 정량적

dsaint31.tistory.com

 

사용 용도:

  • 데이터 증강을 통해 다양한 이미지 품질과 선명도에 견고한 모델 훈련
  • 카메라 포커스 변화나 렌즈 품질 차이 시뮬레이션
  • 이미지 압축, 리사이징으로 인한 선명도 손실 환경 모델링
  • 의료 영상에서 다양한 스캔 품질에 대한 적응성 향상
  • 모델이 과도하게 세밀한 텍스처에 의존하지 않도록 학습
  • 실제 환경에서 발생하는 다양한 광학적 조건 시뮬레이션

주요 파라미터:

  • sharpness_factor (float): 선명도 조정 팩터
    • $\text{out} = (1-f)\text{blurred_input} + f\text{input}$
    • 0.0: 완전히 흐린 이미지 (원본의 가우시안 블러 버전)
    • 1.0: 원본 이미지 (변화 없음)
    • > 1.0: 더 선명한 이미지 (엣지 강화)
    • 일반적 범위: 0.1 ~ 3.0
    • 예: 2.0은 원본보다 2배 더 선명
  • p (float): 선명도 조정을 적용할 확률
    • 0.0: 적용 안 함
    • 1.0: 항상 적용
    • 기본값: 0.5 (50% 확률)

특징:

  • Random 변환: 지정된 확률에 따라 랜덤하게 적용
  • Unsharp Masking: 원본과 블러된 이미지의 차이를 이용한 선명도 조정
  • 엣지 강화: 높은 팩터 값에서 이미지 경계선과 세부사항 강조
  • 전역 효과: 이미지 전체에 균등하게 적용

Unsharp Masking 기법:

  1. 원본 이미지를 가우시안 블러로 흐리게 만듦
  2. 원본과 블러 이미지의 차이를 계산 (언샵 마스크)
  3. sharpened = original + factor * (original - blurred)
  4. 팩터가 1보다 크면 선명해지고, 작으면 부드러워짐

https://dsaint31.tistory.com/931

 

Unsharp Masking and Selective Unsharp Masking

정의Unsharp Maskingsharpness를 높이는 대표적인 sharpening 기법.그러나 평탄부의 Noise까지 강조함.Selective Unsharp Masking선택적으로 sharpening을 적용: subtle detail은 강조되지 않음.Edge Enhancement 에 속함.2024.09.

dsaint31.tistory.com

사용 예시:

sharpness_adjuster = RandomAdjustSharpness(
    sharpness_factor=2,
    )
sharpened_imgs = [sharpness_adjuster(original_img) for _ in range(4)]
plot([original_img] + sharpened_imgs)

관련: v2.functional.adjust_sharpness

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com

https://ds31x.tistory.com/468#8.-unsharpmask-%ED%95%84%ED%84%B0

 

Pillow 사용법 - Basic 04 - ImageFilter

PIL.ImageFilter는 이미지에blur, sharpening, edge detection, emboss 등다양한 시각적 효과를 적용할 수 있는 사전 정의된 필터들을 제공하는 모듈.이는 convoluton 기반으로 동작하는 다양한 필터를 사전 정의하

ds31x.tistory.com


RandomAutocontrast

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.RandomAutocontrast.html

 

RandomAutocontrast — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지의 contrast를 자동으로 최대화하는 측광학적 변환을 랜덤하게 적용
  • 히스토그램 스트레칭(histogram stretching)을 통해 이미지의 명암 범위를 전체 가용 범위로 확장
  • 이미지의 최소값과 최대값을 찾아 0-255 (또는 0.0-1.0) 전체 범위로 재분포

https://dsaint31.tistory.com/838

 

[DIP] Histogram Stretching

Histogram Stretching은이미지의 contrast(명암대비) 를 개선하기 위해 : Image Enhancement히스토그램을 확장(=stretching)하는 기법임.이 기법은이미지의 밝기값(=intensity)이 전체 범위에 걸쳐 고르게 분포되지

dsaint31.tistory.com

 

사용 용도:

  • 데이터 증강을 통해 다양한 대비 조건에 견고한 모델 훈련
  • 저대비(low contrast) 이미지나 밋밋한 이미지의 시각적 품질 향상
  • 조명이 균일하지 않거나 안개, 연무가 있는 환경에서 촬영된 이미지 개선
  • 의료 영상에서 조직 간 대비 향상 및 세부사항 강조
  • 오래된 사진이나 페이드된 이미지의 복원 시뮬레이션
  • 다양한 촬영 조건과 카메라 설정에 불변한 특징 학습

주요 파라미터:

  • p (float): 자동 대비 조정을 적용할 확률
    • 0.0: 적용 안 함
    • 1.0: 항상 적용
    • 기본값: 0.5 (50% 확률)

특징:

  • Random 변환: 지정된 확률에 따라 랜덤하게 적용
  • 채널별 처리: RGB 각 채널에 독립적으로 적용
  • 적응적 조정: 이미지의 실제 명암 분포에 따라 자동으로 조정
  • 정보 보존: 상대적인 밝기 관계는 유지하면서 범위만 확장

변환 과정:

  1. 각 채널에서 최소값(min_val)과 최대값(max_val) 계산
  2. 만약 min_val == max_val이면 변환하지 않음 (단색 이미지)
  3. 각 픽셀을 다음 공식으로 변환: 
  4. new_pixel = (pixel - min_val) * 255 / (max_val - min_val)
  5. 결과적으로 가장 어두운 픽셀은 0, 가장 밝은 픽셀은 255가 됨

효과:

  • 대비 향상: 이미지의 동적 범위를 최대한 활용
  • 세부사항 강조: 미세한 명암 차이가 더 뚜렷하게 나타남
  • 시각적 개선: 전체적으로 더 선명하고 생동감 있는 이미지

사용 예시:

autocontraster = RandomAutocontrast()
autocontrasted_imgs = [autocontraster(original_img) for _ in range(4)]
plot([original_img] + autocontrasted_imgs)

관련: v2.functional.autocontrast

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


RandomEqualize

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.RandomEqualize.html

 

RandomEqualize — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지에 히스토그램 평활화(histogram equalization)를 랜덤하게 적용하는 측광학적 변환
  • 픽셀 값의 분포를 균등하게 재분배하여 이미지의 전체적인 대비를 향상
  • 누적 분포 함수(CDF, Cumulative Distribution Function)를 이용해 어두운 영역과 밝은 영역의 분포를 최적화

https://dsaint31.tistory.com/837

 

[DIP] (Global) Histogram Equalization

Histogram Equalization에 대한 설명히스토그램 평활화(Histogram Equalization)는 이미지의 contrast(명암대비)를 개선하기 위한 기법 중 하나임: Image Enhancement일반적으로 이미지의 히스토그램이 특정 영역에

dsaint31.tistory.com

 

사용 용도:

  • 데이터 증강을 통해 다양한 명암 분포에 견고한 모델 훈련
  • 저대비 이미지나 조명이 불균일한 이미지의 시각적 품질 향상
  • 의료 영상에서 조직 간 대비 강화 및 세부사항 가시성 개선
  • 야간 촬영이나 역광 상황에서 촬영된 이미지 보정 시뮬레이션
  • 오래된 사진이나 손상된 이미지의 복원 효과 모델링
  • 보안 카메라나 감시 시스템의 다양한 조명 조건 대응

주요 파라미터:

  • p (float): 히스토그램 평활화를 적용할 확률
    • 0.0: 적용 안 함
    • 1.0: 항상 적용
    • 기본값: 0.5 (50% 확률)

특징:

  • Random 변환: 지정된 확률에 따라 랜덤하게 적용
  • 채널별 처리: RGB 각 채널에 독립적으로 평활화 적용
  • 전역 최적화: 이미지 전체의 히스토그램을 고려한 변환
  • 적응적 개선: 이미지의 실제 명암 분포에 따라 최적의 대비 제공

변환 과정:

  1. 각 채널별로 픽셀 값의 히스토그램 계산
  2. 누적 분포 함수(CDF) 구성
  3. CDF를 이용해 픽셀 값을 0-255 범위로 재매핑:
    new_pixel = (CDF[pixel] - CDF_min) * 255 / (total_pixels - CDF_min)
  4. 결과적으로 모든 밝기 레벨이 고르게 분포

AutoContrast vs Equalize 차이점:

  • AutoContrast: 단순히 최소/최대값을 0/255로 스트레칭 (linear)
  • Equalize: 히스토그램 분포를 균등하게 재분배 (더 복잡하고 효과적, non-linear)

사용 예시:

equalizer = RandomEqualize()
equalized_imgs = [equalizer(original_img) for _ in range(4)]
plot([original_img] + equalized_imgs)

관련: v2.functional.equalize

 

[PyTorch] Color-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 color space 와 blurring, color effect, adustment 등의 처리들에 관련된는 함수들을 소개함. torchvision 의 다음 문서에서 color항목의 functional

ds31x.tistory.com


JPEG

https://pytorch.org/vision/main/generated/torchvision.transforms.v2.JPEG.html

 

JPEG — Torchvision main documentation

Shortcuts

docs.pytorch.org

 

역할:

  • 이미지에 JPEG 압축 아티팩트를 랜덤하게 시뮬레이션하는 측광학적 변환
  • 다양한 품질 수준의 JPEG 압축/해제 과정을 거쳐 압축 노이즈와 블로킹 효과 생성
  • 실제 웹상이나 모바일에서 사용되는 압축된 이미지 환경을 모델링

사용 용도:

  • 데이터 증강을 통해 압축 아티팩트에 견고한 모델 훈련
  • 실제 환경에서 자주 접하는 압축된 이미지에 대한 성능 향상
  • 웹 이미지, 소셜 미디어 이미지, 모바일 카메라 이미지 처리 대응
  • 저품질 이미지나 네트워크 대역폭 제한 환경 시뮬레이션
  • 이미지 복원, 디노이징 모델의 훈련 데이터 생성
  • 모델이 압축 노이즈에 과민하게 반응하지 않도록 학습

주요 파라미터:

  • quality (int, sequence of int): JPEG 압축 품질을 지정
    • int: 고정된 품질 수준 사용
    • sequence of int: 범위 [min_quality, max_quality]에서 랜덤 선택 (조건부 random)
    • 값 범위: 1 ~ 100
    • 높은 값: 고품질, 적은 압축 (95-100: 거의 무손실)
    • 중간 값: 일반적 웹 품질 (70-85: 표준 웹 이미지)
    • 낮은 값: 저품질, 강한 압축 (10-30: 심한 아티팩트)

특징:

  • Random 변환: 품질이 범위로 지정된 경우 조건부 랜덤하게 선택
  • 비가역 변환: 정보 손실이 발생하여 원본 복원 불가능
  • 실제 압축: 실제 JPEG 인코딩/디코딩 과정을 거침
  • 블로킹 효과: 8x8 DCT 블록 단위의 압축 아티팩트 생성

압축 품질별 효과 (디테일 정보의 고주파 성분을 얼마나 보존할지를 결정하는 양자화 수준-일종의 threshold: %):

  • 90-100: 매우 높은 품질, 거의 눈에 띄지 않는 압축
  • 70-89: 높은 품질, 웹 표준 이미지 수준
  • 50-69: 중간 품질, 약간의 압축 아티팩트
  • 30-49: 낮은 품질, 뚜렷한 블로킹과 색상 왜곡
  • 10-29: 매우 낮은 품질, 심각한 압축 아티팩트

사용 예시:

jpeg = JPEG((5, 50))
jpeg_imgs = [jpeg(original_img) for _ in range(4)]
plot([original_img] + jpeg_imgs)

관련: v2.functional.jpeg

 

[PyTorch] Miscellanceous-Torchvision.transforms.v2.functional

torchvision.transforms.v2.functional 모듈에서 제공하는이미지 데이터에서 normalization 등의 miscellaneous 에 속하는 함수들을 소개함. 관련 gist 파일https://gist.github.com/dsaint31x/86a6ce6f612f79ef1ac33c442376b518 dl_misc-to

ds31x.tistory.com

https://dsaint31.tistory.com/402#JPEG-1-3

 

[DIP] Image Format (summary)

Digital Image 들의 대표적인 encoding 방식들은 다음과 같음:더보기encoding 과 decoding에 대한 일반적 정의:https://dsaint31.me/mkdocs_site/CE/ch01/code_for_character/#code-encoding BMECodes for Characters Code 란 특정 형태의 i

dsaint31.tistory.com


같이 보면 좋은 자료들

https://dsaint31.me/mkdocs_site/DIP/cv2/ch02/dip_histogram/

 

BME

Histogram 영상에서의 Histogram은 image의 intensity (or pixel이 가지는 값)들의 분포를 보여줌. chart로 표현하기도 하지만 image에 대한 feature에 해당하는 내부적 데이터로 사용하기도함. image에서 histogram으

dsaint31.me

https://dsaint31.tistory.com/843

 

[CV] Dynamic Range vs. Contrast

Dynamic Range와 Contrast는 "디스플레이 시스템 및 이미지 센서"나 "이미지"의 Brightness 특성을 설명하는 데 사용되는 관련된 용어.2024.09.05 - [Programming/DIP] - [CV] Brightness vs. Intensity [CV] Brightness vs. Intensity

dsaint31.tistory.com

https://dsaint31.tistory.com/625

 

[DIP] Image Quality 관련 정량화 지표들: Resolution, Contrast, SNR

Image Quality 관련 정량화 지표들: 다음은 Image Restoration등에서 사용되는 Image Quality를 나타내는 정량적 지표들에 대한 간략한 소개임.(image acquisition에 사용된 장비의 성능의 비교에도 사용됨) 참고

dsaint31.tistory.com

 

728x90