Python으로 이미지 처리 100 노크 # 7 평균 풀링

소개



아무래도, 라무입니다.
이번에는 이미지를 그리드 분할하는 기법인 풀링 처리 중에서도, 영역중의 평균값을 대표값으로 하는 평균 풀링에 대해서 실장합니다.

7번째: 평균 풀링



풀링이란 이미지를 고정 길이의 영역으로 그리드 분할하고, 그 영역내의 값을 모두 있는 값으로 하는 처리입니다. 이 처리를 실시하는 것으로 화상은 모자이크상이 됩니다.
평균 풀링은 영역 내의 픽셀 값의 평균값으로 영역 내를 채웁니다.

평균 풀링은 다음 공식으로 정의됩니다.
R은 영역의 것으로, 예를 들어 8×8 픽셀의 영역이면 $|R|=8×8=64$가 됩니다.
v = \frac{1}{|R|}\sum_{i \in R}v_i

소스 코드



avePooling.py
import numpy as np
import cv2
import matplotlib.pyplot as plt


def avePooling(img,k):
  dst = img.copy()

  w,h,c = img.shape
  # 中心画素から両端画素までの長さ
  size = k // 2

  for x in range(size, w, k):
    for y in range(size, h, k):
      dst[x-size:x+size,y-size:y+size,0] = np.mean(img[x-size:x+size,y-size:y+size,0])
      dst[x-size:x+size,y-size:y+size,1] = np.mean(img[x-size:x+size,y-size:y+size,1])
      dst[x-size:x+size,y-size:y+size,2] = np.mean(img[x-size:x+size,y-size:y+size,2])

  return dst


# 画像読込
img = cv2.imread('image.jpg')

# 平均プーリング
# kは領域サイズ
img = avePooling(img,40)

# 画像保存
cv2.imwrite('result.jpg', img)
# 画像表示
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()



이미지 왼쪽은 입력 이미지이고 이미지 오른쪽은 출력 이미지입니다.
잘 모자이크 모양의 이미지가되어 있음을 알 수 있네요. 글로 같은 것처럼 보입니다 만, 제대로 사시미입니다.



이미지 처리에 자주 사용되는 Lena 씨의 이미지의 풀 버전도 평균 풀링 처리를 걸면 Qiita에도 올릴 수 있군요.

결론



만약, 질문이 있는 분이 계시면 부담없이 부디.
imori_imori씨의 Github 에 공식의 해답이 실려 있으므로 꼭 그쪽도 확인해 보세요.
그런 다음 파이썬은 초보자이므로 잘못된 곳이 있더라도 부드럽게 지적하십시오.

좋은 웹페이지 즐겨찾기