チャネル間強度範囲は、あなたが完全にベクトル化ソリューションを開発するためにnumpyのbroadcastingを利用することができる軸2に沿って最大値と最小強度との差である:
import numpy as np
def in_range(rgb, rgb_min, rgb_max):
masks = np.logical_and(rgb >= rgb_min, rgb <= rgb_max)
return np.all(masks, axis=2)
def small_deviation(rgb, rgb_dev):
return (np.max(rgb, axis=2) - np.min(rgb, axis=2)) < rgb_dev
DEMO
以下のサンプルでは、ランダムに生成された4
行と5
列の3チャネル画像を使用します。
In [80]: np.random.seed(0)
In [81]: image = np.random.random(size=(4, 5, 3))
In [82]: np.set_printoptions(precision=2)
In [83]: np.rollaxis(image, 2, 0)
Out[83]:
array([[[ 0.55, 0.54, 0.44, 0.38, 0.57],
[ 0.09, 0.78, 0.8 , 0.12, 0.94],
[ 0.26, 0.57, 0.61, 0.68, 0.7 ],
[ 0.67, 0.32, 0.44, 0.21, 0.25]],
[[ 0.72, 0.42, 0.89, 0.79, 0.93],
[ 0.02, 0.87, 0.46, 0.64, 0.52],
[ 0.77, 0.02, 0.62, 0.36, 0.06],
[ 0.21, 0.36, 0.99, 0.16, 0.47]],
[[ 0.6 , 0.65, 0.96, 0.53, 0.07],
[ 0.83, 0.98, 0.78, 0.14, 0.41],
[ 0.46, 0.62, 0.94, 0.44, 0.67],
[ 0.13, 0.57, 0.1 , 0.65, 0.24]]])
閾値はlow = [.0, .0, .0]
、up = [.6, .5, 0.7]
とdev = .4
に設定しました。
In [84]: low = [.0, .0, .0]
In [85]: up = [.6, .5, 0.7]
In [86]: mask1 = in_range(image, low, up)
In [87]: mask1
Out[87]:
array([[False, True, False, False, False],
[False, False, False, False, False],
[False, True, False, False, False],
[False, True, False, True, True]], dtype=bool)
In [88]: dev = .4
In [89]: mask2 = small_deviation(image, dev)
In [90]: mask2
Out[90]:
array([[ True, True, False, False, False],
[False, True, True, False, False],
[False, False, True, True, False],
[False, True, False, False, True]], dtype=bool)
In [91]: mask = np.logical_and(mask1, mask2)
In [92]: mask
Out[92]:
array([[False, True, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, True, False, False, True]], dtype=bool)
達成したいことは完全にはわかりません。あなたは例を挙げてください(例えば、入力と期待される出力として3x3の "画像")。 –
グレースケールの測定値がより単純なHSLまたはYUVカラースプレースに変換するとうまくいくかもしれません。 – Eric
最後に、多かれ少なかれ灰色がかったピクセルがすべて真であるマスクを取得したいと思います。画像の黒い色は値[0.4、0.38、0.41]を持ち、色はチャンネルの1つでより高い偏差(例えば[0.4、0.58、0.41])を持つ可能性があるので、各ピクセルのチャネル間の特定の差よりも大きい。 私は上記のチャンネルをチェックアウトしますが、まだ具体的な解決方法を理解しています。今は少しはっきりしていますか? – mamamamama