How can I identify an image inside of a larger image?

4 次查看(过去 30 天)
I have two pictures. One is a small image of Waldo and the other is a much larger image with him hiding somewhere. My goal is to create a program that will find Waldo using only the functions length, size, imread, and image. This is what I have so far.
[row,column,layer] = size(Waldo);
[row_,column_,layer_] = size(wheresWaldo);
counter = 0;
for i = 1:1:row_
for j = 1:1:column_
for k = 1:1:layer_
if wheresWaldo(i,j,1) == Waldo(1,1,1) && wheresWaldo(i,j,2) == Waldo(1,1,2) && wheresWaldo(i,j,3) == Waldo(1,1,3)
counter = counter + 1;
ivals(counter) = i;
jvals(counter) = j;
end
end
end
end
What I am doing here is taking the first pixel of the Waldo image and seeing where the R G B values of that pixel occur in the wheresWaldo image. I found several instances and stores them in the variables ivals and jvals. ivals represent rows and jvals represents columns.

回答(1 个)

Image Analyst
Image Analyst 2018-11-11
You can use normalized cross correlation with normxcorr2(), or you can use isequal() (if the small image and large image match exactly pixel for pixel). See attached demo.
  2 个评论
Andrew Padilla
Andrew Padilla 2018-11-11
编辑:Andrew Padilla 2018-11-11
Hi. Please take a look at my post again. I cannot use either of those functions. I listed the functions that I am allowed to use. I need to take advantage of for loops and if statements.
Image Analyst
Image Analyst 2018-11-11
You will need the outer loops to scan your little image over the larger image. Then, at each location, you'll need another pair of loops to compare every pixel (all 3 colors) of the small image to the large image. So you're missing a pair of for loops.

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by