Index in position 2 exceeds array bounds. Index must not exceed 1024.

3 views (last 30 days)
I am student writing my thesis and new to matlab ,i have posted the code below in which the particle image velocimetry was attempted to be done.
clear all;
clc;
close all;
imagea = imread('image1.tif');
imageb = imread('image2.tif');
[xmax, ymax]=size(imagea);
wsize = [64, 64];
w_width = wsize(1);
w_height = wsize(2);
xmin = w_width/2;
ymin = w_height/2;
xgrid = 200:w_width/2:864;
ygrid = 200:w_height/2:1696;
w_xcount = length(xgrid);
w_ycount = length(ygrid);
x_disp_max = w_width/2;
y_disp_max = w_height/2;
test_ima(w_width, w_height) = 0;
test_imb(w_width+2*x_disp_max, w_height+2*y_disp_max) =0;
dpx(w_xcount, w_ycount) = 0;
dpy(w_xcount, w_ycount) = 0;
xpeak1 = 0;
ypeak1 = 0;
for i=1:(w_xcount)
for j=1:(w_ycount)
max_correlation = 0;
test_xmin = xgrid(i)-w_width/2;
test_xmax = xgrid(i)+w_width/2;
test_ymin = ygrid(j)-w_height/2;
test_ymax = ygrid(j)+w_height/2;
x_disp = 0;
y_disp = 0;
test_ima = imagea(test_xmin:test_xmax, test_ymin:test_ymax);
test_imb = imageb((test_xmin-x_disp_max):(test_xmax+x_disp_max), (test_ymin-y_disp_max):(test_ymax+y_disp_max));
correlation = normxcorr2(test_ima, test_imb);
[xpeak, ypeak] = find(correlation==max(correlation(:)));
xpeak1 = test_xmin + xpeak - wsize(1)/2 - x_disp_max;
ypeak1 = test_ymin + ypeak - wsize(2)/2 - y_disp_max;
dpx(i,j) = xpeak1 - xgrid(i);
dpy(i,j) = ypeak1 - ygrid(j);
end
end
quiver(dpy, -dpx)
  8 Comments
Walter Roberson
Walter Roberson on 18 Jan 2023
The images are indexed pseudocolor not grayscale. But that does not affect the size, and it looks like the colormap is in increments of 1/256 so it should turn out to make no color difference
Image Analyst
Image Analyst on 19 Jan 2023
"i have taken a part of image1 and using this function i wanted to find the location of it in the image2" <= yes but in your comment below to me you said that is the reason why you did not use my code. Why the discrepancy? And like I said there, you did not have to use a part of the main image as a template -- you could use whatever image you wanted. You could synthesize it or read it in from a file or whatever you want.

Sign in to comment.

Answers (2)

Image Analyst
Image Analyst on 18 Jan 2023
I do exactly that in my attached demo.
  2 Comments
Sumanth Kokkula
Sumanth Kokkula on 18 Jan 2023
Edited: Sumanth Kokkula on 18 Jan 2023
thanks for the reply but,i dont want to extract a particular object from the picture i want to use the normxcorr to locate the displaced part of my first image in the second
Image Analyst
Image Analyst on 18 Jan 2023
Yes, I know. I thought you'd realize that the template image could be anything. You could read it from a file of course. I didn't want to attach two image files with the demo and I wanted to just use built-in image for the demo, so I took the template image from the main image. But of course you can use whatever template image you want -- it doesn't have to come from the main image. I'm attaching a newer demo where I explicitly spell that out.

Sign in to comment.


Sumanth Kokkula
Sumanth Kokkula on 18 Jan 2023
i have the answer for the above mentioned error.
i have taken the wrong values in the room of intrest changing the values given the solution.
xgrid = 200:w_width/2:864;
ygrid = 200:w_height/2:1696;
the bold ones are the mistaken ones. by changing them i have found the solution.
thanks to all for your suggestions.

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!