Reputation: 471
I want to compare two images in Matlab (I learned that Matlab has more features for comparing images and processing them). Can anyone suggest a good and simple method for doing the same? And the image needs to be exactly same. So the brightness and position of the image need not be considered.
I need to complete my project in two months so I would be glad if any one helps me with a good algorithm or method.
Upvotes: 3
Views: 40320
Reputation: 10966
When you load an image into MATLAB, they are stored as matrices. Anything you can use to compare matrices can compare the images (for e.g. ISEQUAL). But if you want to compare the images more in an image processing sense, look at the demos for the Image Processing Toolbox and see here which (if any) of the demos fit your definition of "compare".
Upvotes: 2
Reputation: 361
You can use the EMD algorithm. It works on histograms. Here is some code that may help:
function[d] = hcompare_EMD(h1,h2)
% This function calculates Earth Movers Distance between two normalized
% histograms h1 and h2. Normalized histogram is histogram h, that has at
% each i place in it, value:
% (number of picture pixels with gray level i-1) /
% (total num of pixels in picture).
% ALternative fast way:
d = sum(abs(cumsum(h1) - cumsum(h2)));
end
and the histograms for the two images are calculated this way:
function[h] = histImage(img)
% This function calculates normalized histogram of image.
% Normalized histogram is histogram h, that has at
% each i place in it, value:
% (number of picture pixels with gray level i-1) /
% (total num of pixels in picture).
sum = 0;
[y,x] = size(img); % getting sizes of image
h = zeros(1,256); % creating output histogram array
for i = 1:1: y % runing on rows
for j = 1:1: x % running on colomns
% gray level is addtess to cell in output histogram array
% we add there 1 (bacause of current pixel (y,x) has this gray level
h(img(i,j)) = h(img(i,j)) + 1;
% pay attention to fact, that we use here pixel value as index!
end
end
h = h./(y*x);
end
to calculate the distance between the histograms of the two images (histArray, histPattern):
function[dmap] = patDistMAp(histArray, histPattern)
% Given histograms of an image and pattern returns an array (image)
% of distance values between
% img windows and pattern. Distance values are computed between the histograms
% of the windows and the pattern using the histogram distance function
[y,x,z] = size(histArray);
dmap = zeros(y,x); % output array
for i = 1:1: y % runing on rows
for j = 1:1: x % running on colomns
hist = histArray(i,j,:);
% for k = 1:1:256 % making array 1x256 from 1x1x256
% h1(k) = hist(1,1,k); % there is a permute function,
% end % but we will use it next time)
h1 = permute(squeeze(hist),[2,1]);
% Using temp variable, as MATLAB7 wants it:
temp = hcompare_EMD(histPattern,h1);
dmap(i,j) = temp;
end
end
end
Upvotes: 3
Reputation: 5913
Image needs to be exactly the same?
a = imread('image1.jpg');
b = imread('image2.jpg');
result = all(size(a) == size(b));
if result
result = all(reshape(a,[],1)== reshape(b,[],1));
end
Upvotes: 1
Reputation: 43
a = imread('image1.jpg'); %reading images as array to variable 'a' & 'b'.
b = imread('image2.jpg');
c = corr2(a,b); %finding the correlation btwn two images
if c==1
disp('The images are same')%output display
else
disp('the images are not same')
end;
Upvotes: 2