【​ 物体识别 尺度不变性 图像匹配​】尺度不变关键点的独特图像特征(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、文章


💥1 概述

摘要:

本文提出了一种从图像中提取独特不变特征的方法,可用于在对象或场景的不同视图之间执行可靠的匹配。这些特征对图像比例和旋转是不变的,并且被证明可以在相当大的仿射失真、3D 视点变化、噪点添加和照明变化范围内提供强大的匹配。这些特征非常独特,从某种意义上说,单个特征可以与来自许多图像的大型特征数据库进行高概率的正确匹配。本文还介绍了一种使用这些特征进行物体识别的方法。识别过程是使用快速的最近邻算法将单个特征与已知对象的特征数据库进行匹配,然后进行 Hough 变换以识别属于单个对象的聚类,最后通过最小二乘解进行验证以获得一致的姿态参数。这种识别方法可以在杂乱和遮挡中可靠地识别对象,同时实现近乎实时的性能。

关键词:

不变特征 物体识别 尺度不变性 图像匹配

图像匹配是计算机视觉中许多问题的基本方面,包括对象或场景识别、从多个图像解决3D结构、立体对应和运动跟踪。本文描述了具有许多特性的图像特征,使它们适合匹配不同对象或场景的图像。这些特征对图像的缩放和旋转是不变的,并且对照明变化和3D相机视点的改变是部分不变的。它们在空间和频率域中定位良好,减少了被遮挡、杂乱或噪声干扰的可能性。可以使用高效的算法从典型图像中提取大量特征。此外,这些特征非常独特,这使得单个特征可以与大量特征数据库正确匹配的概率很高,为对象和场景识别提供了基础。通过采用级联过滤方法,可以最小化提取这些特征的成本,即仅在通过初始测试的位置应用更昂贵的操作。以下是用于生成图像特征集的计算的主要阶段:
1. 尺度空间极值检测:计算的第一阶段搜索所有尺度和图像位置。通过使用高斯差函数高效实现,以识别对尺度和方向不变的潜在兴趣点。
2. 关键点定位:在每个候选位置,拟合详细模型以确定位置和尺度。基于它们稳定性的度量选择关键点。
3. 方向分配:基于局部图像梯度方向为每个关键点位置分配一个或多个方向。所有未来操作都在相对于为每个特征分配的方向、尺度和位置进行转换的图像数据上执行,从而提供对这些转换的不变性。

📚2 运行结果

部分代码:

img=imread('mosaic_hall.jpg');%换自己图片
img=imresize(img,[row,colum]);
img=rgb2gray(img);
% img=histeq(img);
img=im2double(img);
origin=img;
% img=medfilt2(img);
toc
%% Scale-Space Extrema Detection
tic
% original sigma and the number of actave can be modified. the larger
% sigma0, the more quickly-smooth images
sigma0=sqrt(2);
octave=3;%6*sigma*k^(octave*level)<=min(m,n)/(2^(octave-2))
level=3;
D=cell(1,octave);
for i=1:octave
D(i)=mat2cell(zeros(row*2^(2-i)+2,colum*2^(2-i)+2,level),row*2^(2-i)+2,colum*2^(2-i)+2,level);
end
% first image in first octave is created by interpolating the original one.
temp_img=kron(img,ones(2));
temp_img=padarray(temp_img,[1,1],'replicate');
figure(2)
subplot(1,2,1);
imshow(origin)
%create the DoG pyramid.
for i=1:octave
    temp_D=D{i};
    for j=1:level
        scale=sigma0*sqrt(2)^(1/level)^((i-1)*level+j);
        p=(level)*(i-1);
        figure(1);
        subplot(octave,level,p+j);
        f=fspecial('gaussian',[1,floor(6*scale)],scale);
        L1=temp_img;
        if(i==1&&j==1)
        L2=conv2(temp_img,f,'same');
        L2=conv2(L2,f','same');
        temp_D(:,:,j)=L2-L1;
        imshow(uint8(255 * mat2gray(temp_D(:,:,j))));
        L1=L2;
        else
        L2=conv2(temp_img,f,'same');
        L2=conv2(L2,f','same');
        temp_D(:,:,j)=L2-L1;
        L1=L2;
        if(j==level)
            temp_img=L1(2:end-1,2:end-1);
        end
        imshow(uint8(255 * mat2gray(temp_D(:,:,j))));
        end
    end
    D{i}=temp_D;

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、文章

  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值