MATLAB Answers

how to avoid index out of bounds error

148 views (last 30 days)
ravi
ravi on 11 Apr 2014
Answered: Ken Atwell on 12 Apr 2014
hi,I am trying excute fallowing programme,but it is showing Attempted to access proj(2); index out of bounds because numel(proj)=1 error.I was not able to solve this problem.anybody know answer suggest me.thanks in advance.
I = imread('ch_text.tiff');
[row ,col]=size(I);
h_proj=zeros;
for i = 1:row
sum=0;
for j=1:col
if I(i,j)==0 %black pixel found
sum=sum+1;
end
end
h_proj(i)=sum;
end
figure,plot(h_proj,1:row),title('horizontal projection');
nonzero_row_indx=zeros;
i = 1; k = 1;
while (i >= 1) && (i <= row)
if h_proj(i) ~= 0
nonzero_row_indx(k) = i;
k = k + 1;
i = i + 1;
while h_proj(i) ~= 0
i = i + 1;
end
nonzero_row_indx(k) = i - 1;
k = k + 1;
end
i = i + 1;
end

  1 Comment

Walter Roberson
Walter Roberson on 12 Apr 2014
Your code does not have a variable named "proj"

Sign in to comment.

Answers (3)

Nitin
Nitin on 12 Apr 2014
I tried running your programme using the Matlab built-in image, blobs.png and received the following error:
Attempted to access h_proj(273); index out of bounds because numel(h_proj)=272.
It would appear that the way you are incrementing i is not the correct, not sure what you are trying to achieve but i is getting incremented more than it should be in your code, hence the out of bounds error

  0 Comments

Sign in to comment.


Walter Roberson
Walter Roberson on 12 Apr 2014
Your code
while h_proj(i) ~= 0
i = i + 1;
end
is going to fail if h_proj ends with non-zero.
Note: do not name a variable "sum" as that will interfere with use of the important MATLAB routine sum()

  0 Comments

Sign in to comment.


Ken Atwell
Ken Atwell on 12 Apr 2014
Your inner-most 'while' loop continues to increment 'i' while 'h_proj(i)' is nonzero. This will fall out of bounds if the last value of 'h_proj(i)' is nonzero.
As you learn more about MATLAB, I encourage you to learn more about MATLAB's vector syntax, which can help you avoid overruns like this. As currently written, your code looks like an almost-direct port of something a C programmer would write. For example, the doubly-nested loop that sums black pixels can be done in a single instruction:
h_proj = sum(I==0,2)';
Have fun.

  0 Comments

Sign in to comment.

Sign in to answer this question.