How to solve this error (index must be a positive integer or logical)?

function s = subim(f, m, n, rx, cy)
%SUBIM Extracts a subimage, s, from a given image, f.
%The subimage is of size m-by-n, and the coordinates of its top, left corner are (rx, cy).
s = zeros(m, n);
rowhigh = rx + m - 1;
colhigh = cy + n - 1;
xcount = 0;
for r = rx:rowhigh
xcount = xcount + 1;
ycount = 0;
for c = cy:colhigh
ycount = ycount + 1;
s(xcount, ycount) = f(r, c);
end
end
I am try to run the code, but this got error. Attempted to access f(0,0); index must be a positive integer or logical.
f = imread('13100.jpg');
[m,n]=size(f);
s = zeros(m, n);
rx = 0;
cy = 0;
s = zeros(m, n);
rowhigh = rx + m - 1;
colhigh = cy + n - 1;
xcount = 0;
for r = rx:rowhigh
xcount = xcount + 1;
ycount = 0;
for c = cy:colhigh
ycount = ycount + 1;
s(xcount, ycount) = f(r, c);
end
end
%

1 Comment

@Mei Synn Tan: rather than doing this in a loop you should use indexing with vectors. Also note that images are often 3D, which your code does not take into account.

Sign in to comment.

 Accepted Answer

This:
rx = 0;
cy = 0;
Should be
rx = 1;
cy = 1;
You are taking indices 0, note that, matlab will not take -ve or zero indices. Indices should be +ve integers.

More Answers (0)

Categories

Find more on Convert Image Type in Help Center and File Exchange

Asked:

on 13 Apr 2017

Edited:

on 13 Apr 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!