LoginSignup
3
1

More than 3 years have passed since last update.

画像処理100ノック Q.6. 減色処理 解説

Posted at

画像処理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の定められた値(160)としています。

以上のことが理解できれば各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)

ダウンロード (1).png

各2値に分類

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

ダウンロード (2).png

各3値に分類

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

ダウンロード (3).png

各4値に分類(元記事通り)

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

ダウンロード (4).png

各6値に分類

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

ダウンロード (5).png

各8値に分類

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

ダウンロード (6).png
各8値まで表現できるだけで、かなり画質が良いと言うのは驚きですね。

以上です。引き続き画像処理100ノックに取り組みましょう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1