快捷搜索: 王者荣耀 脱发

基于Matlab的图像拼接与拼接后平均剪切实现

本例程主要实现:两张有重叠部分的PNG格式文件,通过灰度化、角点检测、特征点提取、NCC算法匹配和RANSAC算法滤除误匹配完成两张图像的拼接并保存拼接图像,最后并将拼接后的图像平均大小裁剪成两部分。

目录

主函数

效果一

效果二

主函数:

clc;
clear all;
close all
% img1 = imread(projection_a.png);%读取拼接图1
% img2 = imread(projection_b.png);%读取拼接图2

img1 = imread(GDUT_left.png);%读取拼接图1
img2 = imread(GDUT_right.png);%读取拼接图2
img1Dup=rgb2gray(img1);%拼接图1灰度化
figure,imshow(img1Dup);%显示灰度化的拼接图1
title(Input gray image1);
img1Dup=double(img1Dup);%转化为double数据类型

img2Dup=rgb2gray(img2);%拼接图2灰度化
figure,imshow(img2Dup);%显示灰度化的拼接图2
title(Input gray image2);
img2Dup=double(img2Dup);%转化为double数据类型

%使用Harris角点检测进行特征点提取
[locs1] = Harris(img1Dup);%locs1存储拼接图1检测到的角点坐标
[locs2] = Harris(img2Dup);%locs2存储拼接图2检测到的角点坐标

%利用NCC匹配算法去寻找两幅图像之间的对应关系(相似程度),匹配好的特征点用红色线进行连接
%NCC(Normalized cross correlation)--归一化的交叉相关性
%matchLoc1存储拼接图1进行NCC匹配好的角点坐标
%matchLoc2存储拼接图2进行NCC匹配好的角点坐标
[matchLoc1 matchLoc2] =  findCorr(img1Dup,img2Dup,locs1, locs2);

%使用RANSAC算法滤除误匹配,寻找一个最佳单应矩阵H,RANSAC滤除匹配后特征点用蓝色线进行连接
%单应矩阵:同一平面下的点,从一个图像到另一个图像的投影映射
%RANSAC(RANdom SAmple Consensus)--随机抽样一致
%inlierIdx为RANSAC算法滤除误匹配后留下的特征点索引
[H inlierIdx] = estHomography(img1Dup,img2Dup,matchLoc2,matchLoc1);
%打印单应矩阵H
H
%拼接图1和拼接图2进行拼接,得到拼接后图像imgout
[imgout]=warpTheImage(H,img1,img2);
%显示拼接后的图像
figure,imshow(uint8(imgout));
title(final mosaicing image);
%保存拼接后的图片
imwrite(uint8(imgout), projection_mosaicing.jpg, jpg);

%拼接图像裁剪为两部分
imgout_gray = rgb2gray(imgout);
[m,n]=size(imgout_gray);
X1 = imcrop(imgout,[0,0,n/2,m]);
X2 = imcrop(imgout,[n/2,0,n/2,m]);
figure,imshow(X1);%显示裁剪图1
figure,imshow(X2);%显示裁剪图2

效果一:

输入的两张png图像(注:jpgmp等格式图像本例程也适用):

拼接图1(GDUT_left.png) 拼接图2(GDUT_right.png)

NCC匹配算法去寻找两幅图像之间的对应关系(相似程度):

使用RANSAC算法滤除误匹配,寻找一个最佳单应矩阵H,RANSAC滤除匹配后特征点用蓝色线进行连接:

拼接图1和拼接图2进行拼接后图像:

拼接后图像裁剪为大小相同的两部分:

效果二:

换一份图像进行测试:

输入的两张png图像(注:jpgmp等格式图像本例程也适用):

拼接图1(HAUT_left.png) 拼接图2(HAUT_right.png)

NCC匹配算法去寻找两幅图像之间的对应关系(相似程度):

使用RANSAC算法滤除误匹配,寻找一个最佳单应矩阵H,RANSAC滤除匹配后特征点用蓝色线进行连接:

拼接图1和拼接图2进行拼接后图像:

拼接后图像裁剪为大小相同的两部分:

经验分享 程序员 微信小程序 职场和发展