Government intelligence agencies need to continually analyze thousands of images of enemy territory. They are always looking for change - for instance, has the enemy relocated any of its planes, perhaps to prepare for attack? This example looks at developing an algorithm that can be used to make it faster and more fool-proof for the analysts to spot missing planes.
planes1 = imread('planes1.jpg'); figure;imshow(planes1);
planes2 = imread('planes2.jpg'); figure;imshow(planes2);
D = planes1 - planes2; figure;imshow(D);
Dbw = D > 20; imshow(Dbw); shg;
We will next use an Image Processing Toolbox function to remove all small groups of pixels.
Dbw = bwareaopen(Dbw, 10); % Get rid of regions less than 10 pixels imshow(Dbw);
We will also spread the objects to make them more identifyable.
se1=strel('square',3); Dbw=imdilate(Dbw,se1); imshow(Dbw);
Then we will use another function to identify, count and get the positions of the objects in the image.
[L,NumDiffs] = bwlabel(Dbw); NumDiffs s = regionprops(L,'all') c = [s.Centroid];
NumDiffs = 3 s = 3x1 struct array with fields: Area Centroid BoundingBox SubarrayIdx MajorAxisLength MinorAxisLength Eccentricity Orientation ConvexHull ConvexImage ConvexArea Image FilledImage FilledArea EulerNumber Extrema EquivDiameter Solidity Extent PixelIdxList PixelList Perimeter
Finally, we will display the first image and highlight where we think there was a change.
imshow(planes1); for i = 1 : NumDiffs h=rectangle('Position',[c(2*i-1)-15 c(2*i)-15 30 30],'Curvature',[1 1],'LineWidth',2); set(h,'EdgeColor',[1 1 0]); end
Which we can confirm plotting the second image and see that we have correctly detected that three planes have gone.
imshow(planes2); for i = 1 : NumDiffs h=rectangle('Position',[c(2*i-1)-15 c(2*i)-15 30 30],'Curvature',[1 1],'LineWidth',2,'EdgeColor',[1 1 0]); end