【图形拼接】matlab基于sift的图像拼接系统【源码60期】

一、简介

matlab基于sift的图像拼接系统,图像拼接是数字图像处理领域中一个重要的技术,其主要目的是将多幅图像合并成一张大的全景图。SIFT(尺度不变特征变换)算法是一种强大的工具,能够实现稳健、定向的图像特征提取与匹配,因此在图像拼接中得到了广泛应用。在MATLAB中,我们可以利用SIFT算法实现图像的自动拼接。

二、部分源码

clc;clear;close all;
left=imread('left.jpg','jpg');
imwrite(left,'left.pgm','pgm');

right=imread('right.jpg','jpg');
imwrite(right,'right.pgm','pgm');

[m,X1,Y1,X2,Y2] = match('left.pgm','right.pgm');
Ip=mosaic('left.jpg','right.jpg',X1,X2,Y1,Y2,m);
imwrite(Ip/255,'OK.jpg','jpg');

function [Ip] = mosaic(image1, image2,X1,X2,Y1,Y2,num)
I1 = double(imread(image1));[h1 w1 d1] = size(I1);
I2 = double(imread(image2));[h2 w2 d2] = size(I2);
Z  = [ X2'  Y2' ; Y2' -X2' ; ones(1,num) zeros(1,num) ;zeros(1,num) ones(1,num) ]';     
xp = [ X1 ; Y1 ];
t  = Z \ xp;
a  = t(1); 
b  = t(2);
tx = t(3);
ty = t(4);
T = [a b tx ; -b a ty ; 0 0 1];
cp = T*[ 1 1 w2 w2 ; 1 h2 1 h2 ; 1 1 1 1 ]; 
Xpr = min( [ cp(1,:) 0 ] ) : max( [cp(1,:) w1] ); 
Ypr = min( [ cp(2,:) 0 ] ) : max( [cp(2,:) h1] );
[Xp,Yp] = ndgrid(Xpr,Ypr);
[wp hp] = size(Xp); 
X = T \ [ Xp(:) Yp(:) ones(wp*hp,1) ]';  
clear Ip;
xI = reshape( X(1,:),wp,hp)';
yI = reshape( X(2,:),wp,hp)';
Ip(:,:,1) = interp2(I2(:,:,1), xI, yI, '*bilinear');
Ip(:,:,2) = interp2(I2(:,:,2), xI, yI, '*bilinear'); 
Ip(:,:,3) = interp2(I2(:,:,3), xI, yI, '*bilinear'); 
offset =  -round( [ min( [ cp(1,:) 0 ] ) min( [ cp(2,:) 0 ] ) ] );
Ip(1+offset(2):h1+offset(2),1+offset(1):w1+offset(1),:) = double(I1(1:h1,1:w1,:));
figure; image(Ip/255); axis image;
title('mosaic image');

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值