0

このコードを使用して、画像の一部を別のマトリックスに転送しようとしています:

p1 = zeros(512,512,3);
p1(1:128, 1:128, 1:3) = image(1:128, 129:256, 1:3);

そして、このコードがうまくいかなかったとき、私は 3 つの for ループを試し、その後RGBレイヤーを別々に転送しようとしました:

p1(1:128, 1:128, 1) = image(1:128, 129:256, 1);

しかし、これらのコードはどれも機能しません。誰か私に何をすべきか教えてもらえますか?

4

1 に答える 1

1

Matlabでは、いつでも 1 つの行列を同じサイズの別の行列に割り当てることができます。例えば:

A = ones (4,2,3,4,5);
B = zeros(4,2,3,4,5);
A = B

エラーなしで実行されます。

使用しているイメージのタイプがuint8 ( 8 ビットの符号なし整数) である可能性がありますが、 double行列zerosが作成されます。これにより、行列を適切にキャスト(型を変更)しないと、操作または組み込み関数の不適切な動作が発生します。画像のタイプを確認するために使用します。whos

whos image

zerosuint8にキャストしてみてください:

p1 = uint8(zeros(512,512,3));
...

次に例を示します。

image = imread('peppers.png');
partail_im = uint8(zeros(size(image)));
partail_im(1:128,1:128,:) = image(1:128,129:256,:);
imshow(partail_im);

注: image は組み込み関数の名前であるため、変数の名前として使用しないことをお勧めしますimage

于 2013-06-13T14:04:49.373 に答える