티스토리 뷰

728x90

이 사진을 가지고 python에서 albumentations을 사용하여 이미지를 바꿔보겠다.

Normalize

- 0 ~ 255사이인 pixel값을 "(img - mean * max_pixel_value) / (std * max_pixel_value)"의 공식을 이용하여 숫자를 작게 만든다.

 

장점

- 입력 값의 범위를 줄여, 학습에 빨리 수렴되도록 하고, 큰 입력값을 가진 특정 pixel의 특정 weight값이 커지는걸 방지 

ColorJitter

class albumentations.augmentations.transforms.ColorJitter (brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2, always_apply=False, p=0.5) - 최대값 or (최소, 최대)로 지정 

 

brightness : 명도

contrast : 대비 ( 물체를 다른 물체와 배경과 구별할 수 있게 만들어 주는 시각적인 특성의 차이를 말한다. )

saturation : 채도

hue : 색상

always_apply : 항상 적용 여부 (p = 1과 같음)

p : 적용할 확률

 

이미지의 색상/명도/채도 랜덤으로 바꿔줌

(총 4개의 파라미터가 랜덤으로 선택되므로 지속적으로 바뀜)

RandomResizedCrop

albumentations.augmentations.crops.transforms.RandomResizedCrop (height, width, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=1, always_apply=False, p=1.0)

 

height : crop한 후 height size

width : crop한 후 width size

scale : 

ratio :

interpolation : 보간법 알고리즘 flag (어떤 보간법을 사용할 것인가? https://albumentations.ai/docs/api_reference/augmentations/crops/transforms/ 참조)

 

RandomRotate90 & Resize

albumentations.augmentations.geometric.rotate.RandomRotate90

 

p: 실행 확률

 

90, 180,270,360도.... 회전시킨다. (43도, 78도 X 반드시 90도 각도)

위처럼 4가지 종류의 회전을 시켜줌

GaussNoise

var_limit : 노이즈 분산 범위 

mean : 노이즈의 평균

per_channel : True > 노이즈가 각 채널에 독립적으로 샘플링 / False > 모든 채널에 대해 노이즈가 한 번 샘플링

가우시안 분포를 따르는 노이즈를 만들어서 입혀주는 역할

 

ISONoise

albumentations.augmentations.transforms.ISONoise (color_shift=(0.01, 0.05), intensity=(0.1, 0.5), always_apply=False, p=0.5)

 

color_shift : 색상 변화의 분산 범위

intensity : luminace noise와 색상 강도 제어

카메라 센서 노이즈

GaussianBlur

albumentations.augmentations.blur.transforms.GaussianBlur (blur_limit=(3, 7), sigma_limit=0, always_apply=False, p=0.5) 

 

blur_limit : 커널 사이즈 설정 ( 홀수로 설정해야함)

sigma_limit : 커널 표준편차

가우시안 분포를 따르는 랜덤 커널 사이즈로 필터를 생성하여 블러처리

MotionBlur

albumentations.augmentations.blur.transforms.MotionBlur (blur_limit=7, allow_shifted=True, always_apply=False, p=0.5)

 

blur_limit : 최대 커널 사이즈

allow_shifted :  true로 설정하면 이동되지 않은 커널만 생성되고, 그렇지 않으면 임의로 이동된 커널을 생성합니다. ( 무슨 차이가 있는지 모르겠음)

카메라가 흔들린것 처럼 블러처리

 

ImageCompression

albumentations.augmentations.transforms.ImageCompression (quality_lower=99, quality_upper=100, compression_type=<ImageCompressionType.JPEG: 0>, always_apply=False, p=0.5)

 

quality_lower : 최저값 (무슨의미일까? 10%까지 압축?)

quality_upper : 최대값 

compression_type : 압축 타입

압축을 통해 화질을 낮춘다.

RandomFog

albumentations.augmentations.transforms.RandomFog (fog_coef_lower=0.3, fog_coef_upper=1, alpha_coef=0.08, always_apply=False, p=0.5)

 

fog_coef_lower : fog 크기 계수 최소값 ( 원모양 최소 크기)

fog_coef_upper : fog  크기 계수 최대값 ( 원모양 최대 크기)

alpha_coef : 안개 원의 투명성 정도

안개 효과를 부여(원이 커질 수록 사진이 뿌얘짐)

 

RandomGamma

albumentations.augmentations.transforms.RandomGamma (gamma_limit=(80, 120), eps=None, always_apply=False, p=0.5)

감마 : 감마값에 따라 같은 화면이라도 표현되는 밝기 톤의 차이가 느껴짐

 

gamma_limit : 감마의 범위 지정, 단일값 n을 지정시, (-n ~ n) , ( n1 , n2)처럼 범위를 지정할 수 있음 

eps : 더이상 사용하지 않는 파라미터

RandomRain

albumentations.augmentations.transforms.RandomRain (slant_lower=-10, slant_upper=10, drop_length=20, drop_width=1, drop_color=(200, 200, 200), blur_value=7, brightness_coefficient=0.7, rain_type=None, always_apply=False, p=0.5)

 

slant_lower : 빗방울 각도 최소? ( 최대 -20까지) > 음수 일시 왼쪽으로 빗방울이 내림

slant_upper : 빗방울 각도 최대 (최대 20까지)

drop_length : 빗방울 길이

drop_width : 빗방울 넓이

drop_color : 빗방울 색상 (기본 흰색)

blur_value : 사진의 흐림 정도

brightness_coefficient : 밝기 계수

rain_type : [None, "drizzle", "heavy", "torrential"] 존재

RandomSnow

albumentations.augmentations.transforms.RandomSnow (snow_point_lower=0.1, snow_point_upper=0.3, brightness_coeff=2.5, always_apply=False, p=0.5)


snow_point_lower : 눈의 양 최소치

snow_point_upper : 눈의 양 최대치

brightness_coeff : 밝기 계수

RandomShadow

albumentations.augmentations.transforms.RandomShadow (shadow_roi=(0, 0.5, 1, 1), num_shadows_lower=1, num_shadows_upper=2, shadow_dimension=5, always_apply=False, p=0.5)

 

shadow_roi : 그림자 다각형을 놓을 위치 (x_min, y_min, x_max, y_max

num_shadows_lower :  최소 다각형 수

num_shadows_upper : 최대 다각형 수

shadow_dimension : 다각형 그림자 변의 수 

무작위로 만든 다각형 그림자가 이미지에 삽입

RandomSunFlare

albumentations.augmentations.transforms.RandomSunFlare (flare_roi=(0, 0, 1, 0.5), angle_lower=0, angle_upper=1, num_flare_circles_lower=6, num_flare_circles_upper=10, src_radius=400, src_color=(255, 255, 255), always_apply=False, p=0.5)

 

flare_roi: 태양 효과 위치

angle_lower : 태양 효과 기울기 최소치

angle_upper :  태양 효과 기울기 최대치

num_flare_circles_lower : 태양 효과의 최소 원의수 

num_flare_circles_upper : 태양 효과의 최대 원의수  

src_radius : 태양 효과 원 반지름(반경)

src_color : 태양 효과 색상

Flip

albumentations.augmentations.geometric.transforms.Flip

파라미터 존재 x

 

horizontally, vertically, horizontally+ vertically 세가지 중 하나를 선택하여 수행

 

VerticalFlip , HorizontalFlip도 존재하니 취향것 사용하면 됨.
 

GridDistortion

albumentations.augmentations.geometric.transforms.GridDistortion (num_steps=5, distort_limit=0.3, interpolation=1, border_mode=4, value=None, mask_value=None, normalized=False, always_apply=False, p=0.5)

 

num_steps : 그리드 cell의 갯수 (많을수록 왜곡이 심해짐)

distort_limit : 왜곡 제한 (값이 클수록 왜곡을 많이시킴)
interpolation : 보간방법 (cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_CUBIC, cv2.INTER_AREA, cv2.INTER_LANCZOS4. Default: cv2.INTER_LINEAR.) 이런것들이 있다고 함 

border_mode : 사진의 데두리 관련 작업 방법( cv2.BORDER_CONSTANT, cv2.BORDER_REPLICATE, cv2.BORDER_REFLECT, cv2.BORDER_WRAP, cv2.BORDER_REFLECT_101. Default: cv2.BORDER_REFLECT_101) 

 

https://jacegem.github.io/blog/2018/OpenCV-Python-Tutorials-07-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B8%B0%EB%B3%B8-%EC%9E%91%EC%97%85/

 

[OpenCV-Python Tutorials 07] 이미지에 대한 기본 작업

[OpenCV-Python Tutorials 07] 이미지에 대한 기본 작업 모든 파일은 Github에서 확인 할 수 있습니다. 목표 배울 내용: 픽셀 값에 액세스 및 수정 이미지 속성에 액세스 이미지 영역 설정 (ROI: Region of Image)

jacegem.github.io

value :  border_mode가 cv2.BORDER_CONSTANT일때 적용되는 패딩 값 (어떤 역할인지 모르겠음)

mask_value : border_mode가 cv2.BORDER_CONSTANT일때 적용되는 마스크 값 (어떤 역할인지 모르겠음)

normalized : True일시, 왜곡이 이미지 밖으로 나가지 않도록 정규화

Perspective

albumentations.augmentations.geometric.transforms.Perspective (scale=(0.05, 0.1), keep_size=True, pad_mode=0, pad_val=0, mask_pad_val=0, fit_output=False, interpolation=1, always_apply=False, p=0.5)

 

scale : 전체 이미지 모서리부터 임의 거리를 샘플링하는데 사용 ( 이것때문에 사진이 커지고 변동됨)

keep_size : 원래 image size 보존 여부 ( 이미지 size가 변경되기 때문)

pad_mode : 테두리  Opencv Border mode를 따름

pad_val : 테두리 값

mask_pad_val : 테두리 마스크 값

fit_output : True > 이미지 변환후, 기존 image size 안에 바뀐 이미지가 들어감 / False > 변환 이미지가 기존 이미지 사이즈 밖으로 넘어갈 수 있음

interpolation: 보간법. cv2를 따름

 

Affine 

albumentations.augmentations.geometric.transforms.Affine (scale=None, translate_percent=None, translate_px=None, rotate=None, shear=None, interpolation=1, mask_interpolation=0, cval=0, cval_mask=0, mode=0, fit_output=False, keep_ratio=False, rotate_method='largest_box', always_apply=False, p=0.5)

 

 

Affine: 평행이동 , 스케일링, 전단, 회전을 이용한 변화

 

scale : 사진의 크기 조절  (zoom 의 역할) // (최소비율 , 최대비율)로 지정하여 사용가능   (음수 ~ 양수)

translate_percent : 사진 이동 비율 // (최소비율 , 최대비율)로 지정하여 사용가능

translate_px : 사진 이동 픽셀 // (최소 픽셀, 최대 픽셀) 

rotate : 사진 회전 ( 최소 회전, 최대 회전)

shear :  사진 전단(기울임) (최소 기울임, 최대 기울임)

interpolation : 보간법, cv2를따름

mask_interpolation : 

cval : 새로 만든 픽셀을 채울 때 사용할 상수 값 > 새로 만든 픽셀이란, 기울이거나 회전 등 이유로 새로 생긴 배경

cval_mask : mask에 사용할 상수값 

mode : OpenCV border

fit_output : True : 새로 변경된 이미지가 기존 크기 안에 반드시 존재 / False : 밖으로 나갈 수 있음

keep_ratio : radom scale됐을때 원본비율 유지 여부

rotate_method : 공식 doc에는 존재하는 파라미터지만, albumentation 1.3.0에서는 존재하지 않는 파라미터

이외에도 많은 것들이 있으니 밑에 사이트에서 원하는 것을 찾아 사용하길..

https://albumentations.ai/docs/api_reference/augmentations/

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함