bp1

finding differences in images

Contents

read images

% original images
m1 = imread('corV0001.bmp');
m2 = imread('corV0002.bmp');
subplot(2,1,1);
imshow(m1);
subplot(2,1,2);
imshow(m2);
disp('image size');
disp(size(m1));
image size
   240   320     3

convert to grayscale and find differences

close all
g1 = im2double(rgb2gray(m1));
g2 = im2double(rgb2gray(m2));
d = g2 - g1;
dmax = max(max(d));
dmin = min(min(d));
fprintf('max diff  %g\nmin diff %g\n',dmax,dmin);
max diff  0.556863
min diff -0.509804

show differences

One way of illustrating differences is to map the image range -1 .. 1 into 0 .. 1 by (1+diff)/2

cdiff = (1+d)/2;
imshow(cdiff);

difference histogram

% zero difference corresponds to 0.5 brightness
imhist(cdiff);
% alternative plot
[counts,x] = imhist(cdiff);
counts(129)=0; % don't count zero differences
stem(x-0.5,counts,'.');

color difference display

red is positive difference, blue is negative difference

% black background
bipolar_image(d,1);
% white background
bipolar_image(d,2);
% superimpose on image
thres = 0.15*max(dmax,-dmin);
k1 = d < -thres;
k2 = d >  thres;
g = (g1.*not(k1)).*not(k2);
final = cat(3,g+double(k2),g,g+double(k1));
imshow(final);