我在matlab新手。所以我需要帮助。我尝试做这个编码,但有这个错误

时间:2015-10-10 06:12:38

标签: matlab image-processing handwriting-recognition

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,   :);“

有人可以帮我解决这个错误吗?我想在中心裁剪图像

1 个答案:

答案 0 :(得分:1)

错误可能是由于您调用功能区size的方式。

如果加载图像的矩阵I是三维的(N x M x K),则必须以这种方式调用size

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

即添加一个额外的参数(在这种情况下" p5")。

如果您将size称为:

[p3, p4] = size(I)

p4将设置为矩阵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)

原始图片

enter image description here

裁剪图片 enter image description here 希望这会有所帮助。