在MATLAB的sift算法中,怎么用一个模板与多幅图像进行匹配
2015-07-19 · 知道合伙人教育行家
(1) 尺度不变特征变换(SIFT算法)概要
是一种计算机视觉的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
此算法由 David Lowe 在1999年所发表,2004年完善总结。其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。此算法有其专利,专利拥有者为 英属哥伦比亚大学。
局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。 对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。
(2 ) Matlab代码主要功能函数如下: match.m:测试程序
功能:该函数读入两幅(灰度)图像,找出各自的 SIFT 特征, 并显示两连接两幅图像中被匹配的特征点(关键特征点(the matched keypoints)直线(将对应特征点进行连接)。判断匹配的准则是匹配距离小于distRatio倍于下一个最近匹配的距离( A match is accepted only if its distance is less than distRatio times the distance to the second closest match. 该程序返回显示的匹配对的数量。( It returns the number of matches displayed.) 调用实例: match('desk.jpg','book.jpg');
( 假如,想测试一个含有一本书的桌面的图像 和一本书的图像之间特征匹配) 调用方法和参数描述:略。 注意:(1)图像为灰度图像,如果是彩色图像,应该在调用前利用rgb2gray转换为灰度图像。
(2)参数distRatio 为控制匹配点数量的系数,这里取 0.6,该参数决定了匹配点的数量,在Match.m文件中调整该参数,获得最合适的匹配点数量。 sift.m :尺度不变特征变换(SIFT算法)的核心算法程序
功能:该函数读入灰度图像,返回SIFT 特征关键点( SIFT keypoints.) 调用方法和参数描述:
调用方式:[image, descriptors, locs] = sift(imageFile) 输入参数( Input parameters):
imageFile: 图像文件名.
输出或返回参数( Returned):
image: 是具有double format格式的图像矩阵
descriptors: 一个 K-by-128 的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints)的不变量描述子. 这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量.
locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点), 尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小, 最后一个参数是方向orientation). 方向参数的范围是[-PI, PI] 单位为弧度.
appendimages.m: 该函数创建一个新的图像分别包含两个匹配的图像和他们之间
的匹配对的连接直线. (3) 实际案例执行结果:
程序代码使用matlab和c混合编程。用matlab打开文件中的sift_match.m文件,并执行。如下图所示:
从上图可以看出,共有17个匹配点。
2024-09-04 广告
%,可以从多个(2 * n个)按照上述思路的图像进行加密,得到一半的数量(n个)图像。
%所获得的图像隐藏的自适应算法中,并且能够获得第(n-1)个图像。
%对于第(n-1)个图像Arnold变换的,第(n-1)作为密钥块的图像,此外,密钥有迭代的次数,加扰规则,阿诺德加密规则 BR>%阿诺德的主要缺点是较大的周期,程序运行的时间很长,我的电脑需要8分钟,另一个,阿诺德只能处理方阵大量的扰码加密算法,程序中使用的图像
%扰码加密算法,只有一个办法,只是提出了占地多图像加密的思想,有要迟到做了很多工作。
%阅读4画面
F1 = imread('lena.gif');
F2 = imread('monkey.gif');
F3 = imread('house.gif');
F4 = imread('cameraman.gif');图像置乱
pic1_zhiluan = zhiluan(F1,F2) - 北美%;
pic2_zhiluan = zhiluan(F3,F4);
%的显示失真的图像
pic1_zhiluan = UINT8(pic1_zhiluan);
图,imshow(pic1_zhiluan),标题(“图片1 zhiluan') - 欧洲pic2_zhiluan = UINT8(pic2_zhiluan);
图,imshow(pic2_zhiluan),标题(“PIC2 zhiluan') - 中东%的两幅图像都争先恐后地隐藏
X1 =输入('请输入一个混合迭代参数:' );
pic1_hide =隐藏(pic1_zhiluan,X1,pic2_zhiluan);图像
%是经过Arnold置乱加密
diedai1 =输入隐藏的('输入参数迭代:')
pic1_jiami =阿诺德(pic1_hide,diedai1,0);
%,显示加密图像
pic1_jiami = UINT8(pic1_jiami);
图,imshow(pic1_jiami),标题(“图片1佳米') - 欧洲diedai2 =输入('请输入一个迭代参数:')
pic2_jiami =阿诺德(pic2_zhiluan,diedai2,0);
pic2_jiami = UINT8(pic2_jiami);
图,imshow(pic2_jiami),标题(“PIC2佳米') - 北美%解密图像
pic1_jiemi =阿诺德(pic1_jiami,diedai1,1);
pic2_jiemi =阿诺德(pic2_jiami,diedai2,1);隐藏图像
pic1_huifu =惠福(pic1_jiemi,X1,pic2_jiemi)以后 -
%的回收率;
%争先恐后逆过程,得到的图片
恢复[较受欢迎,图像2] = ni_zhiluan(pic1_huifu);
[为image3,为image4] = ni_zhiluan(pic2_jiemi);
%,显示每个图像
F1 = UINT8(F1);
图,imshow(F1),标题(“F1”);
图,imhist(F1),标题(“F1直方图');
较受欢迎= UINT8(较受欢迎);
图,imshow(较受欢迎),标题(“较受欢迎”);
图,imhist(较受欢迎),标题(“较受欢迎直方图');
F2 = UINT8(F2);
图,imshow(F2),标题('F2');
图,imhist(F2),标题('F2的直方图');
较受欢迎= UINT8(图片2);
图,imshow(图片2),标题(“图像2');
图,imhist(图片2),标题(“直方图的图像2');
F3 = UINT8(F3);
图,imshow(F3),标题(“F3”);
图,imhist(F3),标题(“F3的直方图');
为image3 = UINT8(为image3);
图,imshow(为image3),标题(“为image3');
图,imhist(为image3),标题(“直方图为image3');
F4 = UINT8(F4);
图,imshow(F4),标题(“F4”);
图,imhist(F4),标题(“F4的直方图');
为image4 = UINT8(为image4);
图,imshow(为image4),标题(“为image4');
图,imhist(为image4),标题(“为image4直方图”