Detecting multiple images in a single image

后端 未结 6 1560
滥情空心
滥情空心 2021-01-30 21:39

I need help to identify the border and compare the images with the original image. I need guidance on How can I achieve this through processing or matlab or anything for beginne

6条回答
  •  悲&欢浪女
    2021-01-30 22:27

    You can use correlation method to position the multiple images:

    file1='http://i.stack.imgur.com/1KyJA.jpg';
    file2='http://i.stack.imgur.com/zyHuj.jpg';
    It = imread(file1);
    Ii = imread(file2);
    It=rgb2gray(It);
    Ii=rgb2gray(Ii);
    It=double(It);  % template
    Ii=double(Ii);  % image
    
    Ii_mean = conv2(Ii,ones(size(It))./numel(It),'same');
    It_mean = mean(It(:));
    corr_1 = conv2(Ii,rot90(It-It_mean,2),'same')./numel(It);
    corr_2 = Ii_mean.*sum(It(:)-It_mean);
    conv_std = sqrt(conv2(Ii.^2,ones(size(It))./numel(It),'same')-Ii_mean.^2);
    It_std = std(It(:));
    S = (corr_1-corr_2)./(conv_std.*It_std);
    
    imagesc(abs(S))
    

    The result will give you the positions with maximum values:

    enter image description here

    Get the coordinates of maxima, and position your template centroid at the same position, check the difference between your template and the matching image.

    I am not sure what do you mean by "identify the border", but you can always extract the edges with canny detector:

    bw=edge(It);
    bw=imfill(bw,'holes');
    figure,imshow(bw)
    

提交回复
热议问题