2

Numpy 配列で表された画像があります。つまり、各ピクセルは配列 [r、g、b] です。ここで、行列乗算を使用して、ループを使用しないようにして、YUV に変換したいと考えています。

self.yuv=self.rgb
self.yuv=dot([[   0.299,  0.587,    0.114  ],
              [-0.14713, -0.28886,  0.436  ],
              [   0.615, -0.51499, -0.10001]], 
             self.yuv[:,:])

エラーが表示されます - オブジェクトが整列していません。それは、 self.yuv[i,j] が垂直ベクトルではないためだと思います。転置は役に立ちません。

何か案は?

4

1 に答える 1

5

マトリックスには形状(3, 3)がありますが、画像には形状が(rows, cols, 3)あり、np.dot「a の最後の軸と b の最後から 2 番目の軸の合計」を実行します。

最も簡単な解決策は、内部のオペランドの順序を逆にしてnp.dot、変換行列を転置することです。

rgb2yuv = np.array([[0.299, 0.587, 0.114],
                    [-0.14713, -0.28886, 0.436],
                    [0.615, -0.51499, -0.10001]])
self.yuv = np.dot(self.rgb, rgb2yuv.T)
于 2013-05-28T20:09:51.763 に答える