Python/PyTorch 공부

[PyTorch] 이미지 크기와 바운딩박스 좌표를 resize 하는 함수 정의

AI 꿈나무 2021. 3. 6. 00:20
반응형

image transformation을 수행함과 동시에 바운딩 박스 좌표(labels)도 갱신시켜줘야 합니다. 이미지의 크기를 변경하면 객체의 위치도 변경되기 때문에 바운딩 박스 좌표도 그에 맞게 변경하는 함수를 정의하겠습니다.

 

 AMD dataset은 AMD, Non-AMD 두 종류의 이미지가 있으며 크기가 다릅니다. 크기를 256x256으로 고정시키고, 그에 따라 바운딩박스의 중심 좌표(label)도 갱신시키는 함수를 정의해보겠습니다.

 

 

 AMD와 Non-AMD 이미지 입니다. 둘의 크기는 다르므로 256x256 크기로 일치시켜주겠습니다.

 

import torchvision.transforms.functional as TF
# create a data transformation pipeline for single-object detection

# define a helper function to resize images
def resize_img_label(image, label=(0., 0.), target_size=(256,256)):
    w_orig, h_orig = image.size
    w_target, h_target = target_size
    cx, cy = label
    image_new = TF.resize(image, target_size)
    label_new = cx/w_orig*w_target, cy/h_orig*h_target
    return image_new, label_new

# resize an image
img, label = load_img_label(labels_df, 1)
print(img.size, label)

img_r, label_r = resize_img_label(img, label)
print(img_r.size, label_r)

plt.subplot(1, 2, 1)
show_img_label(img, label, w_h=(150, 150), thickness=20)
plt.subplot(1, 2, 2)
show_img_label(img_r, label_r)

 

 

 이미지의 크기가 변경되었고, 그에 따라 바운딩 박스 위치도 변경되었습니다.

 

 바운딩 박스의 크기는 50x50 로 설정되어 있습니다.

반응형