0
I = imread('data1.jpg')
[p3, p4] = size(I);
q1 = 50; % size of the crop box
i3_start = floor((p3-q1)/2); % or round instead of floor; using neither gives warning
i3_stop = i3_start + q1;

i4_start = floor((p4-q1)/2);
i4_stop = i4_start + q1;

I = I(i3_start:i3_stop, i4_start:i4_stop, :);
figure ,imshow(I);

このコードを実行すると、「インデックスがマトリックスの次元を超えています。

エラー ==> 10 でクロップトリー I = I(i3_start:i3_stop, i4_start:i4_stop, :);"

このエラーを修正するのを手伝ってくれる人はいますか? 画像を中央でトリミングしたい

4

1 に答える 1

1

エラーはおそらく functin の呼び出し方法が原因sizeです。

I画像をロードする行列が 3 次元 (N x M x K) の場合、次のように呼び出す必要がありますsize

[p3, p4, p5] = size(I)

つまり、追加のパラメーター (この場合は "p5") を追加します。

次のように呼び出す場合size:

[p3, p4] = size(I)

p4 は、行列の 2 番目と 3 番目の次元の積に設定されますI

更新されたコード

I = imread('pdb_img_1.jpg');
% Modified call to "size"
% [p3, p4] = size(I)
[p3, p4, p5] = size(I)
% Increased the size of the "crop box"
q1 = 150; % size of the crop box
i3_start = floor((p3-q1)/2) % or round instead of floor; using neither gives warning
i3_stop = i3_start + q1

i4_start = floor((p4-q1)/2)
i4_stop = i4_start + q1

I = I(i3_start:i3_stop, i4_start:i4_stop, :);
figure
imshow(I)

元の画像

ここに画像の説明を入力

トリミングされた画像 ここに画像の説明を入力 これがお役に立てば幸いです。

于 2015-10-10T09:39:08.847 に答える