PIL(Python Imaging Library)는 파이썬 환경에서 이미지를 처리할 수 있도록 도와주는 대표적인 라이브러리 중 하나입니다. 이미지 읽기, 쓰기, 변환, 조작 등이 가능하며 다양한 이미지 파일 형식을 지원하기 때문에 다양한 곳에서 사용됩니다. 이번 글에서는 기본적으로 PIL이 설치되어 있음을 가정하고, 이미지 데이터에 대한 EDA를 수행하기에 앞서 필요한 이미지 속성들을 추출하는데 집중합니다.
PIL에서 지원하고 있는 이미지 특성 추출 기능은 아래와 같습니다.
- filename : 파일명
- format : 파일의 형식(JPEG, PNG 등)
- mode : 이미지의 색상 모드로 픽셀이 표현 방법 (L-그레이, RGB-색상, CMYK-인쇄용 등)
- size : 픽셀 기준의 이미지 사이즈 (너비, 높이)로 반환
- info : 파일에 포함하고 있는 메타 데이터
- is_animated : 애니매이션 여부를 True / False 로 반
- n_frames : 애니메이션 이미지(GIF 등)에서 총 프레임 수, 기본 이미지는 1
사진 이미지 데이터를 가져온다고 가정하고 간단하게 아래와 같이 구현할 수 있습니다.
from PIL import Image
# path는 이미지의 경로 예를 들어 ./class1/image1.jpg 형태
img = Image.open(path)
width, height = img.size
mode = img.mode
format = img.format
관련해서 자세한 내용의 원문은 아래 링크를 참고바랍니다.
https://pillow.readthedocs.io/en/stable/reference/Image.html#image-attributes
또한, 이미지의 주요 특징 중 하나인 색상은 파일에서 3 채널(RGB 기준)로 구현됩니다. 저는 여기서 두가지 방법을 소개하고자 합니다. 첫번째는 .split()으로 나누는 방법, 두번째는 슬라이싱으로 구현하는 방법입니다. split() 메서드는 이미지를 각 색상 채널로 분리한 후, 각 채널을 개별 이미지 객체로 반환합니다. 여기서 각 채널은 별도의 그레이 스케일 이미지로 반환됩니다. 아래는 두 방법의 코드입니다.
from PIL import Image
img = Image.open('/content/example.jpg')
r, g, b = img.split()
red1 = np.array(r)
red2 = np.array(img)[:,:,0]
print(red1)
print(red2)
이러한 여러 이미지 속성들과 이들을 조합한 데이터로 EDA에 쓸 수 있는 코드를 아래와 같이 모았습니다. 필요할 경우 함수로 구현해서 사용할 수 있습니다.
from PIL import Image
with Image.open(image_path) as img:
img = img.convert('RGB') # 이미지를 RGB 모드로 변환
width, height = img.size
img_array = np.array(img)
mean_red = np.mean(img_array[:, :, 0])
mean_green = np.mean(img_array[:, :, 1])
mean_blue = np.mean(img_array[:, :, 2])
format = image_path.split('.')[-1].upper()
image_aspect_ratio = img.width / img.height
'Python > Data Analysis' 카테고리의 다른 글
MMSeg에서 .py로 정의된 사용자 정의 지표 가져오기 | Custom Metric (0) | 2024.11.25 |
---|---|
앙상블 기법을 딥러닝에서 활용할 수 있게 pytorch로 구현하기 | Voting, Bagging, Stacking (0) | 2024.11.11 |
인공신경망에서 그래디언트 손실 및 폭주 문제 해결 | 활성화 함수, 가중치 초기화 (2) | 2024.08.31 |
PyTorch로 Binary Classifier 구현하기 | 로지스틱 회귀, 이진 분류 (0) | 2024.08.19 |
PyTorch를 통해 Linear Regression 구현하기 (0) | 2024.08.19 |