[파이썬][Scipy] zoom, rotate, label, morphology 예제

Scipy의 이미지 처리 관련 함수인 zoom, rotate, label, 그리고 morphology의 예제를 제공하겠습니다.

zoom 함수 예제:

zoom 함수는 이미지를 확대 또는 축소하는 데 사용됩니다. 아래 예제에서는 이미지를 확대하는 방법을 보여줍니다.

mport numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import zoom

# 2D 배열로 이미지 생성
image = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])

# 이미지 확대
zoomed_image = zoom(image, 2)  # 2배 확대

# 결과 이미지 플로팅
plt.subplot(121)
plt.imshow(image, cmap='gray')
plt.title('원본 이미지')
plt.subplot(122)
plt.imshow(zoomed_image, cmap='gray')
plt.title('확대된 이미지')
plt.show()

rotate 함수 예제:

rotate 함수는 이미지를 회전시키는 데 사용됩니다. 아래 예제에서는 이미지를 45도 회전시키는 방법을 보여줍니다.

mport numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import rotate

# 2D 배열로 이미지 생성
image = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])

# 이미지 회전
rotated_image = rotate(image, angle=45, reshape=False)

# 결과 이미지 플로팅
plt.subplot(121)
plt.imshow(image, cmap='gray')
plt.title('원본 이미지')
plt.subplot(122)
plt.imshow(rotated_image, cmap='gray')
plt.title('회전된 이미지 (45도)')
plt.show()

label 함수 예제:

label 함수는 연결된 객체를 레이블링하는 데 사용됩니다. 아래 예제에서는 이미지에서 연결된 객체를 레이블링하는 방법을 보여줍니다.

mport numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import label

# 2D 배열로 이미지 생성 (0은 배경, 1은 객체)
image = np.array([[0, 0, 1, 0],
                  [1, 1, 1, 0],
                  [0, 0, 0, 0],
                  [1, 0, 0, 1]])

# 연결된 객체 레이블링
labeled_image, num_features = label(image)

# 결과 이미지와 레이블 수 출력
print("레이블링된 이미지:\n", labeled_image)
print("객체 개수:", num_features)

# 결과 이미지 플로팅
plt.subplot(121)
plt.imshow(image, cmap='gray')
plt.title('원본 이미지')
plt.subplot(122)
plt.imshow(labeled_image, cmap='viridis')
plt.title('레이블링된 이미지')
plt.show()

morphology 함수 예제:

morphology 모듈은 형태학적 연산을 수행하는 데 사용됩니다. 아래 예제에서는 이진 이미지에 대한 침식과 팽창을 보여줍니다.

mport numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import binary_erosion, binary_dilation

# 이진 이미지 생성
binary_image = np.array([[0, 0, 0, 0, 0],
                         [0, 1, 1, 0, 0],
                         [0, 1, 1, 0, 0],
                         [0, 0, 0, 1, 0],
                         [0, 0, 0, 0, 0]], dtype=bool)

# 침식 연산 수행
eroded_image = binary_erosion(binary_image)

# 팽창 연산 수행
dilated_image = binary_dilation(binary_image)

# 결과 이미지 플로팅
plt.subplot(131)
plt.imshow(binary_image, cmap='gray')
plt.title('원본 이미지')
plt.subplot(132)
plt.imshow(eroded_image, cmap='gray')
plt.title('침식된 이미지')
plt.subplot(133)
plt.imshow(dilated_image, cmap='gray')
plt.title('팽창된 이미지')
plt.show()

위의 예제들은 Scipy의 이미지 처리 함수인 zoom, rotate, label, 그리고 morphology 함수를 사용하여 다양한 이미지 처리 작업을 수행하는 방법을 보여줍니다.