problem in for loop

1 view (last 30 days)
NAVNEET NAYAN
NAVNEET NAYAN on 30 Mar 2017
Edited: Guillaume on 30 Mar 2017
for i = 1:2:n
filename = strcat('I:\testing\8y\',num2str(i),'.jpg');
I = imread(filename);
I1 = rgb2gray(I);
mat1(:,:,i)= I1;
end
for j = 1:1:i-1
r1 = mat1(:,:,j);
r2 = mat1(:,:,j+1);
c = corr2(r1,r2);
mat2(j) = c;
end
When I run this code I got absurd results having zeros at alternate positions. most probably the reason is absence of even images in mat1(:,:,i) since i takes only odd values. Then I made a change in r2 as r2 = mat1(:,:,j+2), but it produced an error as "index exceeds matrix dimension". What should be the solution of this problem, so that r1 and r2 read odd values of i in a regular manner.
thanks
Navneet nayan

Accepted Answer

Jan
Jan on 30 Mar 2017
Would it help to use
for j = 1:1:i-2 % Instead of ...-1
...
r2 = mat1(:,:,j+2);
?
  2 Comments
NAVNEET NAYAN
NAVNEET NAYAN on 30 Mar 2017
yeah...it's working now... thanks a lot Simon
Guillaume
Guillaume on 30 Mar 2017
The for loop should be
for j = 1:2:i-2 %step of 2!
for the code to make sense.

Sign in to comment.

More Answers (1)

Guillaume
Guillaume on 30 Mar 2017
Edited: Guillaume on 30 Mar 2017
What is the point of having a matrix mat1 twice the size it needs to be, storing lots of useless 0. Why not decouple the iterating of the files from the filling of the matrix:
imageindices = 1:2:n;
for i = 1:numel(imageindices)
filepath = fullfile('I:\testing\8y', sprintf('%d.jpg', imageindices(i))); %prefer fullfile to strcat for building paths
mat1(:, :, i) = rgb2gray(imread(filepath));
end
The second loop is then trivial:
for i = 1:size(mat1, 3)-1
mat2(i) = corr(mat1(:, :, i), mat1(:, :, i+1));
end

Community Treasure Hunt

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

Start Hunting!