The first two lines do not look correct:
[r c]=find(I==1);
smallGrayImage=grayImage([r c]);
Indexing grayImage this way does not make sense, because each entry in the matrix [r c] will be treated as a linear index, not as a row or column index.
To give you a better way, I'll need to know what you are aiming to do. You can't just pick out some arbitrary elements of grayImage - you need to pick out a rectangular region - so one question is, how is I generated, and what does it contain?