2016-05-21 4 views
1

のbin Lab色空間は、私がLab色空間離散化や2次元

enter image description here

を持っていると私は、「ビン」10×10の正方形のグリッドの色空間にしたいです。

したがって、最初のビンは(-110、-110)から(-100、-100)になり、次のビンは(-100、-110)から(-90、-100)のようになります。これらのビンはビン1とビン2になる可能性があります。

np.digitize()が見えましたが、1次元ビンを渡す必要があります。結果はちょっと大雑把に見えること

for fn in filenames: 
    image = color.rgb2lab(io.imread(fn)) 
    ab = image[:,:,1:] 
    width,height,d = ab.shape 
    reshaped_ab = np.reshape(ab,(width*height,d)) 
    print reshaped_ab.shape 
    images.append(reshaped_ab) 

all_abs = np.vstack(images) 
all_abs = shuffle(all_abs,random_state=0) 
sns 

df = pd.DataFrame(all_abs[:3000],columns=["a","b"]) 
top_a,top_b = df.max() 
bottom_a,bottom_b = df.min() 
range_a = top_a-bottom_a 
range_b = top_b-bottom_b 
corner_a = bottom_a 
corner_b = bottom_b 

bins = [] 
for i in xrange(int(range_a/10)): 
    for j in xrange(int(range_b/10)): 
     bins.append([corner_a,corner_b,corner_a+10,corner_b+10]) 
     corner_b = bottom_b+10 

    corner_a = corner_a+10 

が、「ビン」:私が試してみました

初歩的なアプローチがこれです。 1つは、色空間が四角い配置で値を持ち、そのコードが最大値と最小値からかなり離れているので、多くの空のビンがあります。また、四捨五入によって問題が発生する可能性があります。私はこれを行うより良い方法があるのだろうかと思っていますか?色のヒストグラムについて聞いたことがありますが、各ヒストグラムは各ビンの値を数えます。私は値を必要としませんが、箱は私がここで探しているものだと思います。

理想的には、ビンはそれぞれラベルを持つオブジェクトです。だから私はbins.indices [0]を行うことができ、それは私が与えたバウンディングボックスを返します。新しい色がcolor = [15.342、-6.534]なら、color.binは15または15番目のbinを返します。

私はこれが多くのことを求めていることを認識していますが、色空間を扱う人にとってはやや一般的な必要があると思います。だから、私が求めていることを達成できるPythonモジュールやツールはありますか?どのようにこれにアプローチしますか?ありがとう!

答えて

1

は標準numpyのの2D-ヒストグラム機能を使用してください:numpy.histogram2d

import numpy as np 
# a and b are arrays representing your color points 
H, a_edges, b_edges = np.histogram2d(a, b, bins=10) 

あなたは空のビンを破棄したい場合、あなたはここからいくつかの作業を行う必要があるだろう。しかし、空でない空のビンに将来の色を割り当てることは、長方形のグリッド上になければ、はるかに多くの作業が必要になります。