From 61b4e34cae4fdf328d38e1e7cabd028eefe1efda Mon Sep 17 00:00:00 2001 From: nagayosi Date: Thu, 24 Jan 2019 11:29:37 +0900 Subject: [PATCH] fixed --- Question_91_100/README.md | 66 ++++++++++++++++++++++++++++++ Question_91_100/answer_91.jpg | Bin 0 -> 13213 bytes Question_91_100/answer_91.py | 33 +++++++++++++++ Question_91_100/answer_92.jpg | Bin 0 -> 11139 bytes Question_91_100/answer_92.py | 53 ++++++++++++++++++++++++ Question_91_100/answer_92_k10.jpg | Bin 0 -> 11813 bytes Question_91_100/answer_92_m.jpg | Bin 0 -> 10760 bytes Question_91_100/imori.jpg | Bin 0 -> 12638 bytes Question_91_100/madara.jpg | Bin 0 -> 11665 bytes README.md | 20 ++++++--- 10 files changed, 166 insertions(+), 6 deletions(-) create mode 100644 Question_91_100/README.md create mode 100644 Question_91_100/answer_91.jpg create mode 100644 Question_91_100/answer_91.py create mode 100644 Question_91_100/answer_92.jpg create mode 100644 Question_91_100/answer_92.py create mode 100644 Question_91_100/answer_92_k10.jpg create mode 100644 Question_91_100/answer_92_m.jpg create mode 100755 Question_91_100/imori.jpg create mode 100755 Question_91_100/madara.jpg diff --git a/Question_91_100/README.md b/Question_91_100/README.md new file mode 100644 index 00000000..8d2e9cf1 --- /dev/null +++ b/Question_91_100/README.md @@ -0,0 +1,66 @@ +# Q. 91 - 100 + +## Q.91. K-meansによる減色処理 (Step.1) 色の距離によるクラス分類 + +*imori.jpg*をK-meansを用いた減色処理せよ。 + +減色処理はQ.6でも扱ったが、Q.6では予め決めた色に減色した。ここで扱うのはK-meansを用いて動的に減色する色を決定する。 + +アルゴリズムは, +1. 画像からランダムにK個のRGB成分をサンプリングする。(これをクラスと呼ぶことにする。) +2. 画像のそれぞれの画素に対して色の距離が最小となるクラスのインデックスを割り振る。 + +```bash +色の距離 dis = sqrt( (R-R')^2 + (G-G')^2 + (B-B')^2) +``` +3. 各インデックスに対応する色成分の平均をRGBそれぞれに対して取り、新たなクラスとする。 +4. 元のクラスと新しいクラスが全く同じならK-meansを終了する。そうでなければ、新しいクラスを元クラスとして2-3を繰り返す。 +5. 元画像の各画素で色の距離が最小となるクラスのRGBを割り当てる。 + +ここでは1-2を実装せよ。 +- クラス数はk=5とする +- ここでは画像をreshape((HxW, 3))にreshapeすると扱いやすくなる。 +- 1においてはnp.random.seed(0)として、np.random.choice(np.arrange(画像のWxH), 5, replace=False) +- まずは3-5のループを考えずに実装せよ + +解答では0-4にインデックスづけされたものをx50にして見やすいようにしている。 + +```bash +# 最初に選べれた色 +[[140. 121. 148.] + [135. 109. 122.] + [211. 189. 213.] + [135. 86. 84.] + [118. 99. 96.]] +``` + +最初に選ばれた色との色の距離でクラスのインデックスをつけたもの(アルゴリズム2)。 + +|入力 (imori.jpg) |出力(answer_91.jpg)| +|:---:|:---:| +|![](imori.jpg)|![](answer_91.jpg)| + +答え >> answer_91.py + +## Q.92. K-meansによる減色処理 (Step.2) 減色処理 + +ここではアルゴリズム3-5も実装せよ。 + +```bash +# 選ばれた色 +[[182.86730957 156.13246155 180.24510193] + [156.75152588 123.88993835 137.39085388] + [227.31060791 199.93135071 209.36465454] + [ 91.9105835 57.94448471 58.26378632] + [121.8759613 88.4736557 96.99688721]] +``` + +減色処理したもの。塗り絵イラスト風な画像にできる。k=10にすればある程度の色を保持しながらもイラスト風に減色できる。 + +また、k=5にして*madara.jpg*にも試してみよ。 + +|入力 (imori.jpg) |出力(answer_92.jpg)|k=10(answer_92_k10.jpg)| |入力2 (madara.jpg) |出力(answer_92_m.jpg) | +|:---:|:---:|:---:|:---:|:---:| +|![](imori.jpg)|![](answer_92.jpg)|![](answer_92_k10.jpg)|![](madara.jpg)|![](answer_92_m.jpg)| + +答え >> answer_92.py diff --git a/Question_91_100/answer_91.jpg b/Question_91_100/answer_91.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe26c1517fdf7935b203da2697390fca61c1725b GIT binary patch literal 13213 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 literal 0 HcmV?d00001 diff --git a/Question_91_100/answer_91.py b/Question_91_100/answer_91.py new file mode 100644 index 00000000..781ec872 --- /dev/null +++ b/Question_91_100/answer_91.py @@ -0,0 +1,33 @@ +import cv2 +import numpy as np +import matplotlib.pyplot as plt +from glob import glob + +img = cv2.imread("imori.jpg").astype(np.float32) +H, W, C = img.shape + +# k-Means +Class = 5 + +np.random.seed(0) + +img = np.reshape(img, (H*W, -1)) + +i = np.random.choice(np.arange(H*W), Class, replace=False) +Cs = img[i].copy() + +print(Cs) + +clss = np.zeros((H*W), dtype=int) + +for i in range(H*W): + dis = np.sum(np.abs(Cs - img[i]), axis=1) + clss[i] = np.argmin(dis) + + +out = np.reshape(clss, (H, W)) * 50 +out = out.astype(np.uint8) + +cv2.imwrite("out.jpg", out) +cv2.imshow("result", out) +cv2.waitKey(0) diff --git a/Question_91_100/answer_92.jpg b/Question_91_100/answer_92.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6613ddb68793fadb25bd13574418fd1c14588708 GIT binary patch literal 11139 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 TZJX0!@79(UxBEr+Vd?(>wX}(W literal 0 HcmV?d00001 diff --git a/Question_91_100/answer_92.py b/Question_91_100/answer_92.py new file mode 100644 index 00000000..70ee7183 --- /dev/null +++ b/Question_91_100/answer_92.py @@ -0,0 +1,53 @@ +import cv2 +import numpy as np +import matplotlib.pyplot as plt +from glob import glob + +img = cv2.imread("imori.jpg").astype(np.float32) +H, W, C = img.shape + +# k-Means +Class = 5 + +np.random.seed(0) + +img = np.reshape(img, (H*W, -1)) + + +i = np.random.choice(np.arange(H*W), Class, replace=False) +Cs = img[i].copy() + + +while True: + + clss = np.zeros((H*W), dtype=int) + + for i in range(H*W): + dis = np.sum(np.abs(Cs - img[i]), axis=1) + clss[i] = np.argmin(dis) + + Cs_tmp = np.zeros((Class, 3)) + + for i in range(Class): + Cs_tmp[i] = np.mean(img[clss==i], axis=0) + + if (Cs == Cs_tmp).all(): + break + else: + Cs = Cs_tmp.copy() + +out = np.zeros((H*W, 3), dtype=np.float32) + +for i in range(Class): + out[clss == i] = Cs[i] + +print(Cs) + +out[out < 0] = 0 +out[out > 255] = 255 +out = np.reshape(out, (H, W, 3)) +out = out.astype(np.uint8) + +cv2.imwrite("out.jpg", out) +cv2.imshow("result", out) +cv2.waitKey(0) diff --git a/Question_91_100/answer_92_k10.jpg b/Question_91_100/answer_92_k10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f122d941409d298e4c1bdd7ddc525a5c40a66491 GIT binary patch literal 11813 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
9ZWZ=2AJXnQzDP1+|`pYt> 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 https://github.com/KuKuXia/Image_Processing_100_Questions ## Recent -- あと14問なんじゃあああああああああああ +- あと8問なんじゃあああああああああああぁぁぁぁぁぁぁあぁぁぁぁぁあぁ +- **【New!】2019.1.24. Q.87 - 92 K-means を追加** - **【New!】2019.1.24. Q.84 - 86 簡単な画像認識 を追加** - **【New!】2019.1.23. Q.81 - 83 コーナー検出 を追加** - **【New!】2019.1.23. Q.77 - 80 ガボールフィルタ を追加** @@ -225,11 +226,18 @@ $ python sample.py |番号|問題||番号|問題| |:---:|:---:|:---:|:---:|:---:| -| 81 | Hessianのコーナー検出 | | 86 | 簡単な画像認識 (Step.3) 評価 -| 82 | Harrisのコーナー検出 (Step.1) Sobel + Gaussian -| 83 | Harrisのコーナー検出 (Step.2) コーナー検出 -| 84 | 簡単な画像認識 (Step.1) 減色化 + ヒストグラム -| 85 | 簡単な画像認識 (Step.2) クラス判別 +| 81 | Hessianのコーナー検出 | | 86 | 簡単な画像認識 (Step.3) 評価(Accuracy) | +| 82 | Harrisのコーナー検出 (Step.1) Sobel + Gaussian | | 87 | 簡単な画像認識 (Step.4) k-NN | +| 83 | Harrisのコーナー検出 (Step.2) コーナー検出 | | 88 | K-means (Step.1) 重心作成 | +| 84 | 簡単な画像認識 (Step.1) 減色化 + ヒストグラム | | 89 | K-means (Step.2) クラスタリング | +| 85 | 簡単な画像認識 (Step.2) クラス判別 | | 90 | K-means (Step.3) 初期ラベルの変更 | + +### [問題91 - 100](https://github.com/yoyoyo-yo/Gasyori100knock/tree/master/Question_91_100) + +|番号|問題||番号|問題| +|:---:|:---:|:---:|:---:|:---:| +| 91 | K-meansによる減色処理 (Step.1) 色の距離によるクラス分類 +| 92 | K-meansによる減色処理 (Step.2) 減色処理 ## TODO