How to compare two images using information about spots location in the two images?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Hi. i am using two images that have spots in them. the two images are similar. some spots in image 1 are not present in image 2 and vice versa. furthermore spots present in both may slightly differ in location (few pixels).i want to find spots that are present in both. for that i am using regionprops PixelList to first detect spots and then compare pixelList if image 2 with that of image 1. If one pixel matches then spot matches. Howerever my codes isn't working properly. it gives all spots presnt in image 2 as output. kindly guide me. my code is as follows. i have also attaced the two images.


function[]=SPOT_MATCHING() % function[]=SPOT_MATCHING(user_Image,template) %
i=imread('modal_breast_A.jpg');
i3=i;
i=rgb2gray(i);
% i=water_s(i); IX=edge(i,'canny');
% [B,L,N] = bwboundaries(IX,'noholes'); cc = bwconncomp(IX, 8);
%CENTROIDS OF OBJECTS s = regionprops(cc, {'Area', 'Centroid','PixelIdxList', 'PixelList'});
% C = regionprops(cc, { 'Centroid'}); A = regionprops(cc, {'Area'});
centroids = [s.Centroid]; x = centroids(1:2:end-1);
y = centroids(2:2:end);
figure,imshow(i); hold on plot(x,y,'*')
%%%%%%%%%%%%%%%%%%% SECOND IMAGE%%%%%%%%%%%%%%%%%%%%% % % z=user_Image; %z=rgb2gray(z); z=imread('modal_breast_B.jpg');
z3=z; z=rgb2gray(z); % BWz=water_s(z);
IXz=edge(z,'canny');
% figure % imshow(IXz)
%[Bz,Lz,Nz] = bwboundaries(IXz,'holes');
ccz = bwconncomp(IXz, 8);
%CENTROIDS OF OBJECTS sz = regionprops(ccz, {'Area', 'Centroid','PixelIdxList', 'PixelList'});
% Cz = regionprops(ccz, { 'Centroid'}); Az = regionprops(ccz, {'Area'}); % length(Cz);
centroidsz = [sz.Centroid];
xz = centroidsz(1:2:end-1); yz = centroidsz(2:2:end);
figure,imshow(z3); hold on plot(xz,yz,'*')
%%%% BRUTE FORCE SEARCH FOR SPOTS%%%%%%%%%%%%%%%%%%%%%%%%%%
figure imshow(z); hold on
totalmatches=0; mismatch=0;
for loop2=1:length(Az) for loop=1:length(A) % found= ismember(s(loop).Centroid,sz(loop2).PixelList);
% % if found~=0 if ismember(1,found)==1 % display('match') plot(xz(loop2),yz(loop2),'square'); % totalmatches=totalmatches+1;
break
%
elseif ismember(1,found)~=1
plot(xz(loop2),yz(loop2),'*','color','g');
mismatch=mismatch+1;
%
continue
end
end
end
disp('total spot in figure 1') length(x)
disp('total spots in figure 2') length(xz)
disp('total matches') totalmatches
disp('total mismatches') mismatch
% % figure % plot([totalmatches;length(centroidsz)])
1 comentario
Image Analyst
el 26 de Mayo de 2015
Don't double space your code. Single space it. Paste it in then highlight it and click {}Code button. Or else attach the m-file with the paper clip icon.
Respuestas (1)
Image Analyst
el 26 de Mayo de 2015
Have you heard of the Groth Algorithm: http://www.bing.com/search?q=%2bgroth+algorithm&filters=rcrse%3a%221%22&FORM=RCRE?
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!