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)

[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)

[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 각 채널에 독립적으로 적용
- 비가역 변환: 정보 손실이 발생하여 원본 복원 불가능
변환 과정:
- 픽셀 값을 지정된 비트 수에 맞게 마스킹 (하위비트를 모조리 0으로) : 좌시프트 후 우시프트 하기도.
- 하위 비트들을 제거하여 색상 단계 감소
- 결과적으로 평면적이고 단순한 색상 영역 생성
사용 예시:
posterizer = RandomPosterize(
bits=2,
)
posterized_imgs = [posterizer(original_img) for _ in range(4)]
plot([original_img] + posterized_imgs)

[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)

[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 기법:
- 원본 이미지를 가우시안 블러로 흐리게 만듦
- 원본과 블러 이미지의 차이를 계산 (언샵 마스크)
sharpened = original + factor * (original - blurred)- 팩터가 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 각 채널에 독립적으로 적용
- 적응적 조정: 이미지의 실제 명암 분포에 따라 자동으로 조정
- 정보 보존: 상대적인 밝기 관계는 유지하면서 범위만 확장
변환 과정:
- 각 채널에서 최소값(
min_val)과 최대값(max_val) 계산 - 만약
min_val == max_val이면 변환하지 않음 (단색 이미지) - 각 픽셀을 다음 공식으로 변환:
new_pixel = (pixel - min_val) * 255 / (max_val - min_val)- 결과적으로 가장 어두운 픽셀은 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 각 채널에 독립적으로 평활화 적용
- 전역 최적화: 이미지 전체의 히스토그램을 고려한 변환
- 적응적 개선: 이미지의 실제 명암 분포에 따라 최적의 대비 제공
변환 과정:
- 각 채널별로 픽셀 값의 히스토그램 계산
- 누적 분포 함수(CDF) 구성
- CDF를 이용해 픽셀 값을 0-255 범위로 재매핑:
new_pixel = (CDF[pixel] - CDF_min) * 255 / (total_pixels - CDF_min) - 결과적으로 모든 밝기 레벨이 고르게 분포
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)

[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)

[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
'Python' 카테고리의 다른 글
| [PyTorch] Randomly-applied-torchvision.transforms.v2 (0) | 2025.06.15 |
|---|---|
| [PyTorch] Augmentation-torchvision.transforms.v2 (1) | 2025.06.15 |
| [PyTorch] Geometric-torchvision.transforms.v2 (1) | 2025.06.15 |
| [PyTorch] Color-Torchvision.transforms.v2.functional (3) | 2025.06.14 |
| [PyTorch] Miscellanceous-Torchvision.transforms.v2.functional (0) | 2025.06.11 |