화상 처리 100 노크 Q.6. 감색 처리 해설

이미지 처리 100 노크 Q.6. 감색 처리에 대한 해설 기사입니다.

감색 처리는 R(적색), G(녹색), B(파랑) 각각의 가능한 값의 종류를 한정합니다. 그러면 표현할 수 있는 색상이 줄어듭니다.

본제에서는 R,G,B가 각 256종류의 값(0~255)을 취하고 있던 것을, 각 4종류의 값(32,96,160,224)으로 줄이도록 지시되고 있습니다.

전 기사에서는 이쪽의 처리에 의해, 감색 처리를 실시하고 있습니다. (아래)
def dicrease_color(img):
    out = img.copy()
    out = out // 64 * 64 + 32
    return out

생각했던 것보다 처리가 적고 놀랐습니다. 이 함수의 아래 부분의 코드로 감색 처리를 실시하고 있습니다.
out = out // 64 * 64 + 32

이 64라는 숫자는 256(0~255)을 4로 나눈 값입니다.

즉, out // 64 란 256을 4분할했을 때 어느 클래스(0, 1, 2, 3이라고 하는 바람에 4클래스 있는 것으로 한다)에 속하는지를 조사하고 있는 것입니다.

그리고 * 64 + 32 로 하는 것으로 그 클래스의 정해진 값으로 하고 있습니다. (클래스 0이라면 32, 클래스 1이라면 96, 클래스 2라면 160, 클래스 3이라면 224로 정해져 있습니다.) 이번은 그 클래스 내의 중앙 부근의 값으로 하고 있는 것 같습니다. (클래스 0에 속하는 값은 0~63이며, 그 중앙은 32와 33)
예를 들어 out // 64가 2이면 (클래스 2), 즉 out가 128 ~ 191이면 out // 64에서 2가되고 * 64 + 32 )입니다.

이상의 것을 이해할 수 있으면 각 2치나 각 6치, 8값 등 생각대로 감색
처리할 수 있습니다. 아래 참고까지 코드를 제시해 둡니다. (※Google Colaboratory를 사용하고 있습니다. 이미지 로드 등에 조금 처리가 필요합니다. 저는 Google Colab에서 cv2.imshow()를 사용하는 방법 를 참고로 했습니다.)
# サポートパッチのインポート
from google.colab.patches import cv2_imshow

# 画像のインポート
!curl -o logo.png https://colab.research.google.com/img/colab_favicon_256px.png
import cv2

# 画像を読み込み、imgに格納
img = cv2.imread("imori.jpg", cv2.IMREAD_UNCHANGED)

# imと言う変数にimgをコピー
im = img.copy()

# 画像を表示
cv2_imshow(im)



각 2치로 분류


sample = im // 128 * 128 + 64
cv2_imshow(sample)



각 3가지로 분류


sample = im // 85 * 85 + 42
cv2_imshow(sample)



각 4치로 분류(원기사대로)


sample = im // 64 * 64 + 32
cv2_imshow(sample)



각 6가지로 분류


sample = im // 43 * 43 + 22
cv2_imshow(sample)



각 8값으로 분류


sample = im // 32 * 32 + 16
cv2_imshow(sample)


각 8치까지 표현할 수 있는 것만으로, 꽤 화질이 좋다고 하는 것은 놀랍네요.

이상입니다. 계속해서 이미지 처리 100 노크에 임합시다.

좋은 웹페이지 즐겨찾기