クーの自由研究

マスターの かえるのクーは8年の任期を終え消失しました。クーⅡ世の中の人絶賛募集中です。(特にオリオン座&プレイアデス方向の方は優遇します)助手がメイド喫茶から生還し、リハビリを兼ねて復帰しています。

画像の背景ノイズが気にいらないので、背景ごと消去してみます

人工的ノイズはアーティファクトともいうらしいです

名前がかっこいいですが、大嫌いです。かえるのクーの助手の「井戸中 聖」(いとなか あきら)です。

f:id:np2LKoo:20210518004821j:plain

大量の生成アニメ顔をもとにいろんな処理を、いろいろやってみようと思うのですが、背景のアーティファクト(ノイズや変な生成物)がどうも邪魔でしかたありません。(このままだと、たぶんへんな風に学習しそうです)

背景を簡易的に消去するプログラムを作成します

そこでopenCV (cv2) の機能を使って背景を「簡易的」に消す方法を考えます。

このやり方では、髪の毛の色や服のいろと背景色がほとんど同じ場合はミスをする可能性が高い(へんなマスクを作ってしまう)のですが、やってみます。DeepLearning系のマスク生成処理もあったのですが、探した範囲ではあまり気に入るものがありませんでした。

1ファイルだけ、サンプルに処理してみるテストプログラムを動かしてみます。

「それなりに動けばいい」というベタで恥ずかしい処理になっています。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('example-51.jpg')
img = img[..., ::-1] #BGR->RGB
mask = np.zeros(img.shape[:2],np.uint8)
sp = img.shape #入手生成データは 1000×1000pxの画像です。
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (25, 25, 974, 974) #まわり26ドットの部分は背景としてみなして処理します。
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0), 0, 1).astype('uint8')
workmask = np.zeros((sp[0]+2, sp[1]+2), np.uint8)
#内部の閉じた部分(マスクとしては島)はマスクを無効とする。
#仮生成したマスクをさらに4隅からべた塗りして本マスクとします。
cv2.floodFill(mask2, workmask, (0, 0), 9) #9は仮の値
cv2.floodFill(mask2, workmask, (0, 999), 9)
cv2.floodFill(mask2, workmask, (999, 0), 9)
cv2.floodFill(mask2, workmask, (999, 999), 9)
mask3 = np.where((mask2==9), 0, 1).astype('uint8')
img = img * mask3[:, :, np.newaxis] #マスクをかけます
plt.imshow(img)
plt.colorbar()
plt.show()

OpenCVでの処理は以下で教えていただきました。

4隅からべた塗でマスクを上書きしているのは、キャラクター内部にマスクを生成してしまうことがあったためです。

背景消去処理例

上は背景処理前、下は背景マスク処理後

f:id:np2LKoo:20210517013353j:plain f:id:np2LKoo:20210517013213j:plain f:id:np2LKoo:20210518002126j:plain f:id:np2LKoo:20210518002200j:plain

f:id:np2LKoo:20210518003009p:plain f:id:np2LKoo:20210518003028p:plain f:id:np2LKoo:20210518003102p:plain f:id:np2LKoo:20210518003125p:plain

 わかりやすいようにマスク部分を黒色のままにしています。(学習するときに黒部分が「スパース」:値ゼロのすかすか部分:になるのであれば、このままでよい気もします)

まわりの「へんな画像」はなんとなくうまく消せるのですが、服の色までマスクかけてしまうこともありました。お肌の露出が多い画像は肩などの色を背景として拾ってしまうものもありました。学習画像の前処理としては、今回この処理で「よし」とします。なお、処理後画像のデータとしての解像度はかわりませんが、画像貼り付け操作の関係で(変換後)貼り付け画像のPixel数は少なくなっています。(ぼやけてみえるのはそのせいです)

本編とますます関係のない道草ですが、こんなのがしばらく続くかもしれませんwww「草こえて森こえてアマゾンこえてマダガスカル」です。

もう誰も覚えていないと思いますが、本編は「芸術する!」です。