Matlab查找图像块在原图中的位置

给定一个图像块,找出它在原图中的位置,无缩放,无旋转

----------------------------------------------------------------------------------------------

之前一直以为这个是个很难的事,主要是担心可能运算量会很大,要把图像块在整个图里滚一遍。


简单的思想是,为了提高速度,对图像块中心点和周围的几个点 在原图中移动比对,

如果误差小于阈值则加入可能的位置列表,

如果可能的位置过多(比如20个),则直接退出


如果要提高匹配准确率,可以增多比对的点数


Matlab

close all; 
clear all; 
clc; 

im = imread('1.jpg');
im=imresize(im,0.5);
figure; imshow(im); 

[m,n,c]=size(im);
im = im2double(im); 

%点击选取一个图像块
[c, r] = ginput(1);
c = floor(c); 
r = floor(r); 

%图像块宽度
w = 6;
block_im = im(r-w:r+w, c-w:c+w, :); 
  
err = 0; 

%可能匹配的位置
pnts = []; 

%匹配的图像块太多
too_many_match = 0; 

for i=w:m-w
    for j=w:n-w        
        err = sum(abs(im(i,j,:)-block_im(w, w,:)));           
        if  err > 0.01
            continue; 
        end

        err = sum(abs(im(i-3,j-3,:)-block_im(w-3, w-3,:)));           
        if  err > 0.01
            continue; 
        end
        err = sum(abs(im(i+3,j+3,:)-block_im(w+3,w+3,:)));
        if  err > 0.01
            continue; 
        end
        
        err = sum(abs(im(i-3,j+3,:)-block_im(w-3,w+3,:)));
        if  err > 0.01
            continue; 
        end
        
        err = sum(abs(im(i+3,j-3,:)-block_im(w+3,w-3,:)));
        if  err > 0.01
            continue; 
        end
        
       err = sum(abs(im(i+1,j-3,:)-block_im(w+1,w-3,:)));
        if  err > 0.01
            continue; 
        end
        
        pnts = [pnts; [i,j]];
        %如果匹配的点太多,那么就要重新选择图像块
        if size(pnts,1) > 20
            too_many_match  = 1; 
            break;
        end 
          
    end 
    
    if 1 == too_many_match  
        break;
    end 
end 

%pnts 
[m,n,c]=size(im)
hold on; 
len = size(pnts,1)

for i=1:len
    plot(pnts(i,2), pnts(i,1), 'ro');     
end 

figure; imshow(block_im);  title('图像块');
 

















这个性能太差了:







据说用opensurf来做图像相似度比对是比较好的

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值