2017-03-01 4 views
2

イメージは配列(img)として表示されていますが、イメージのコピーをたくさん作成したいと思います。次のコピー0:2,0:2,0:2、3:5など)を0にする。私はnp.broadcast_toを使ってイメージの複数のコピーを作成しましたが、イメージの複数のコピーと、イメージ内の複数の場所をインデックス化してイメージ内の四角形をゼロにすることに問題があります。ブロック内の配列を使ってインデックスを付ける

私はskimage.util.view_as_blocksのようなものを探していると思いますが、読み込みだけでなく元の配列に書き込むことができる必要があります。

これの背後にある考え方は、画像のすべてのコピーをニューラルネットワークに渡すことです。最悪のことをするコピーは、そのゼロの場所で識別しようとしているクラス(画像)のコピーでなければなりません。

img = np.arange(10*10).reshape(10,10) 
img_copies = np.broadcast_to(img, [100, 10, 10]) 
z = np.zeros(2*2).reshape(2,2) 

おかげ

+0

はどのようにコードに供給 '異なるlocations'持つもの'異なるsquares'ですか?それらの四角形はすべて同じ形になるでしょうか? – Divakar

+0

編集した元の投稿をより具体的にする。異なる四角形は左上隅から始まり、オーバーラップしない方法で配列全体をカバーします。各四角形は同じサイズになります。ありがとう – Aryeh

答えて

0

は、私はそれを割れていると思います!ここで6D形状を変更する配列に沿ってmaskingを使ったアプローチだ -

def block_masked_arrays(img, BSZ): 
    # Store shape params 
    m = img.shape[0]//BSZ 
    n = m**2 

    # Make copies of input array such that we replicate array along first axis. 
    # Reshape such that the block sizes are exposed by going higher dimensional. 
    img3D = np.tile(img,(n,1,1)).reshape(m,m,m,BSZ,m,BSZ)  

    # Create a square matrix with all ones except on diagonals. 
    # Reshape and broadcast it to match the "blocky" reshaped input array. 
    mask = np.eye(n,dtype=bool).reshape(m,m,m,1,m,1) 

    # Use the mask to mask out the appropriate blocks. Reshape back to 3D. 
    img3D[np.broadcast_to(mask, img3D.shape)] = 0 
    img3D.shape = (n,m*BSZ,-1) 
    return img3D 

サンプル実行 -

In [339]: img 
Out[339]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]]) 

In [340]: block_masked_arrays(img, BSZ=2) 
Out[340]: 
array([[[ 0, 0, 2, 3], 
     [ 0, 0, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]], 

     [[ 0, 1, 0, 0], 
     [ 4, 5, 0, 0], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]], 

     [[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 0, 0, 10, 11], 
     [ 0, 0, 14, 15]], 

     [[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 0, 0], 
     [12, 13, 0, 0]]]) 
+0

私はあなたのコードに続いて、特に高次の次元で問題を抱えていますが、うまくいきます。あなたの機能はどのように機能しますか?ありがとうございました – Aryeh

+0

@Aryehここにコメントがいくつか追加されました。 – Divakar

+0

あなたの機能が働いたので、私はこれを回答としてマークしました。ありがとうございました。私はまだあなたが使用した方法の名前、またはあなたがしたことについてもっと学ぶことができるようにすることをお勧めしたいいくつかのウェブサイトは、追加された次元を使用して理解していない?ありがとう – Aryeh

関連する問題