导航:首页 > 源码编译 > 拼接图像算法

拼接图像算法

发布时间:2023-05-07 19:55:49

1. GPU上图像拼接的快速计算

图像拼接已被研究并广泛应用于计算机科学的许多领域,但在特征匹配、扭曲和混合步骤中存在大量计算。从而无法满足某些应用的实时性需求。幸运的是,已经在图形处理器单元 (GPU) 上开发并实现了一些可以加快拼接过程的相关并行操作。在本文中,我们使用统一计算设备架构 (CUDA) 提出了基于 GPU 的图像拼接的并行实现。我们在执行时间方面获得了比在中央处理单元 (CPU) 上实现更好的结果。在实验中使用集成 GPU GTX745 时,我们对大输入图像实现了高达 27.6 倍的加速比。

典型的拼接过程主要包括三个不同的图像处理步骤,即配准、扭曲和插值以及混合。图像配准是图像拼接的关键任务。配准是指在描绘同一场景的一对图像之间建立几何变换,该变换由一个8自由度的平面单应性决定。

GPU以其强大的并行计算能力吸引许多领域的研究,作为一种协处理器对计算量大的算法加速已成为实践的重要途径。在前人的研究中,他们都避免了考虑两个极其耗时的步骤,即特征匹配和随机样本共识(RANSAC)。作为图像配准中的两个关键过程,在提出的 GPU 加速并行算法中应考虑它们。

使用GPU并行计算会遇到两个限制

CUDA的出现解决了上述问题,并且CUDA使用C语言,最初为CPU编写的C语言函数可以移植到CUDA内核,无需修改。

在CUDA中,一定数量的线程被分组到一个块中,一定数量的块以规则的网格模式在逻辑上排列(见图1)。每个块都映射到一个多处理器,一个多处理器可以同时运行多个线程块。由于本地资源(寄存器和共享内存)在块之间进行划分,包含在同一块中的线程可以访问相同的共享内存并快速实现同步操作。但是,不同块中的线程并不能直接实现通信和同步。除了本地寄存器和共享内存,所有线程都可以访问全局内存、常量内存和纹理内存。

A. 特征匹配

令点 经过仿射变换后得到 ,即

向量 是平移分量, 控制缩放、旋转效果。利用齐次坐标系,方程(2)也可以写为

接着计算两幅图像特征点之间的欧几里得距离,并将距离按照升序排序,比较升序排序中第一和第二的比值如果小于某个阈值,则认为是匹配点。

由于 中有六个未知参数,随机选择3对不共线的点匹配 ,使用该矩阵 计算剩余 对匹配点的误差。执行大量迭代,直到内点对最多。可以使用最小二乘估计器估计所有六个参数。

B. 变形和插值

扭曲变形过程中,可能使像素点位置出现负值或者没有数值与之对应,在这种抢矿下需要插值算法创建更平滑和准确的数值,进一步减少翘曲中产生的变形。最常用的插值方法是最近邻插值、双线性插值和双三次插值。考虑到精度和计算复杂度之间的权衡,实验采用双线性插值算法。

C. 混合

为了实现并行计算,本文采用了基于羽化的混合方法,其混合函数可以表示为:

其中 是像素 的权重函数。

A. 并行匹配

匹配分为粗匹配和精匹配。粗匹配过程中,块线程数由特征元素数决定,每个块可以实现一个关键点之间的匹配,每个线程计算两个图像两个特征向量的距离。在计算完所有距离后,使用并行计算的归并排序对距离值排序。最后,所有块得到的匹配结果存储在全局内存中,然后传送到CPU。

精匹配过程,设计内核执行RANSAC迭代,只启动一个block,线程数为 ,首先用CPU将三个非共线点计算得到的变换矩阵 ,然后将 、阈值和剩余 个点传到GPU,判断内外点。

通过内存分配,可以实现精细匹配优化。

B. 平行变形和插值

将 矩阵的逆矩阵 存放在常量内存中,由于需要频繁地调用。将待校正的图像存放在纹理内存中,纹理内存是专门为本地访问模式设计的。

为了进一步提升性能,若两个坐标小数部分小于0.2则强度值分配为整数部分,否则使用双线性插值。

C. 并行混合

由于混合数是像素和像素的混合,因此线程数等于重叠部分包含的像素。令重叠图像的列数设置为16的倍数。 gridDim.x的大小等于重叠图像的行数,gridDim.y的大小等于重叠图像的列数重叠图像除以16。

基于 CPU 的算法在配备 16GMB DDR3 RAM 的 Intel Core i7-4790、3.60GHz 处理器上实现。基于 GPU 的算法在 NVIDIA GeForce GTX745 集成显卡上进行测试,每块最大 1024 个线程和 4096 MB 全局内存。

可以清楚地看到,这两种图像之间几乎没有差异。原因是实验中使用的GPU卡支持浮点计算,与CPU版本相比产生的误差非常小。

在本文中,我们提出了一种使用 CUDA 架构在 GPU 上运行的并行图像拼接方法。顺序算法通过几个 CUDA 内核转换为并行版本。通过使用不同类型的内存,我们实现了并行算法的优化。同时,将GPU获得的结果与CPU获得的结果进行比较,我们实现了高达27.6的加速比。尽管所提出的方法显着提高了计算性能,但仍有许多工作要做。例如,更精确的插值方法(双三次插值)和可变权重 c( x, y) 可以考虑进一步改善镶嵌结果。此外,并行镶嵌算法也可以在多个GPU平台上运行,对于大数据可以更有效地执行算法。在今后的工作中,我们将一一处理这些问题。

2. 急求!图像拼接算法代码

算法描述

procere ImageMatching

{

输入FirstImage;

输入SecondImage;

//获得两幅图象的大小

Height1=GetImageHeight(FirstImage);

Height2=GetImageHeight(SecondImage);

Width1=GetImageWidth(FirstImage);

Width2=GetImageWidth(SecondImage);

// 从第二幅图象取网格匹配模板

SecondImageGrid = GetSecondImageGrid(SecondImage);

// 粗略匹配,网格在第一幅图象中先从左向右移动,再从下到上移动,每次移动一个网格间距,Step_Width 或Step_Height,当网格移出重叠区域后结束

y=Heitht1-GridHeight;

MinValue = MaxInteger;

While ( y<Height1-OverlapNumber)//当网格移出重叠部分后结束

{

x=Grid_Width/2; //当网格位于第一幅图象的最左边时,A点的横坐标。

While ( x<(Width1-Grid_Width/2) )

{

FirstImageGrid=GetImgaeGrid(FirstImgaeGrid, x, y);

differ=CaculateDiff(FirstImgaeGrid, SecondImageGrid);//计算象素值差的平

//方和

if (differ<MinValue)

{

BestMatch_x=x;

BestMatch_y=y;

MinValue = differ;

}

x= x+Step_width;

}

y=y-Step_Height;

}

//精确匹配

Step_Width= Step_Width/2;

Step_Height= Step_Height/2;

While ( Step_Height>0 & Step_Width>0)//当水平步长和垂直步长均减为零时结束

{

if(Step_Height==0)//当仅有垂直步长减为零时,将其置为1

Step_Height=1;

If(Step_Width==0) //当仅有水平步长减为零时,将其置为1

Step_Width=1;

temp_x = BestMatch_x;

temp_y = BestMatch_y;

for ( i= -1; i<1; i++)

for( j= -1; j<1; j++)

{

if ((i=0&j!=0)|(i!=0&j=0))

{

FirstImageGrid=GetImgaeGrid(FirstImgaeGrid,

temp_x+i*Step_Width, temp_y +j*Step_Height);

differ=CaculateDiff(FirstImgaeGrid, SecondImageGrid);

if (differ<MinValue)

{

BestMatch_x=x;

BestMatch_y=y;

MinValue = differ;

}

}

}

Step_Height = Step_Height /2;

Step_Width = Step_Width/2;

}

}
不懂的可以问我,相互交流

3. 使用OpenCV和Python进行图像拼接

么是图像拼接呢?简单来说,对于输入应该有一组图像,输出是合成图像。同时,必须保留图像之间的逻辑流。

首先让我们了解图像拼接的概念。基本上,如果你想捕捉一个大的场景,你的相机只能提供一个特定分辨率的图像(如:640×480),这当然不足以捕捉大的全景。所以,我们可以做的是捕捉整个场景的多个图像,然后把所有的碎片放在一起,形成一个大的图像。这些有序的照片被称为全景。获取多幅图像并将其转换成全景图的整个过程称为图像拼接。

首先,需要安装opencv 3.4.2.16。

接下来我们将导入我们将在Python代码中使用的库:

在我们的教程中,我们将拍摄这张精美的照片,我们会将其分成两张左右两张照片,然后我们会尝试拍摄相同或非常相似的照片。

因此,我将此图像切成两个图像,它们会有某种重叠区域:

在此,我们将列出我们应采取的步骤,以取得最终的结果:

因此,从第一步开始,我们将导入这两个图像并将它们转换为灰度,如果您使用的是大图像,我建议您使用cv2.resize,因为如果您使用较旧的计算机,它可能会非常慢并且需要很长时间。如果要调整图像大小,即调整50%,只需将fx = 1更改为fx = 0.5即可。

我们还需要找出两幅图像中匹配的特征。我们将使用opencv_contrib的SIFT描述符。SIFT (Scale constant Feature Transform)是一种非常强大的OpenCV算法。这些最匹配的特征作为拼接的基础。我们提取两幅图像的关键点和sift描述符如下:

kp1和kp2是关键点,des1和des2是图像的描述符。如果我们用特征来画这幅图,它会是这样的:

左边的图像显示实际图像。右侧的图像使用SIFT检测到的特征进行注释:

一旦你有了两个图像的描述符和关键点,我们就会发现它们之间的对应关系。我们为什么要这么做?为了将任意两个图像连接成一个更大的图像,我们必须找到重叠的点。这些重叠的点会让我们根据第一幅图像了解第二幅图像的方向。根据这些公共点,我们就能知道第二幅图像是大是小还是旋转后重叠,或者缩小/放大后再fitted。所有此类信息的产生是通过建立对应关系来实现的。这个过程称为registration。

对于匹配图像,可以使用opencv提供的FLANN或BFMatcher方法。我会写两个例子证明我们会得到相同的结果。两个示例都匹配两张照片中更相似的特征。当我们设置参数k = 2时,这样我们就要求knnMatcher为每个描述符给出2个最佳匹配。“matches”是列表的列表,其中每个子列表由“k”个对象组成。以下是Python代码:

FLANN匹配代码:

BFMatcher匹配代码:

通常在图像中,图像的许多地方可能存在许多特征。所以我们过滤掉所有的匹配来得到最好的。因此我们使用上面得到的前2个匹配项进行比值检验。如果下面定义的比值大于指定的比值,则考虑匹配。

现在我们定义在图像上绘制线条的参数,并给出输出以查看当我们在图像上找到所有匹配时的样子:

这是输出的匹配图像:

这部分完整Python代码:

因此,一旦我们获得了图像之间的最佳匹配,我们的下一步就是计算单应矩阵。如前所述,单应矩阵将与最佳匹配点一起使用,以估计两个图像内的相对方向变换。

在OpenCV中估计单应性是一项简单的任务,只需一行代码:

在开始编码拼接算法之前,我们需要交换图像输入。所以img_现在会取右图像img会取左图像。

那么让我们进入拼接编码:

因此,首先,我们将最小匹配条件count设置为10(由MIN_MATCH_COUNT定义),并且只有在匹配良好的匹配超出所需匹配时才进行拼接。否则,只需显示一条消息,说明匹配不够。

因此,在if语句中,我们将关键点(从匹配列表)转换为findHomography()函数的参数。

只需在这段代码中讨论cv2.imshow(“original_image_overlapping.jpg”,img2),我们就会显示我们收到的图像重叠区域:

因此,一旦我们建立了单应性,我们需要扭曲视角,我们将以下单应矩阵应用于图像:

所以我们使用如下:

在上面两行Python代码中,我们从两个给定的图像中获取重叠区域。然后在“dst”中我们只接收到没有重叠的图像的右侧,因此在第二行代码中我们将左侧图像放置到最终图像。所以在这一点上我们完全拼接了图像:

剩下的就是去除图像的黑色,所以我们将编写以下代码来从所有图像边框中删除黑边:

这是我们调用修剪边界的最终定义函数,同时我们在屏幕上显示该图像。如果您愿意,也可以将其写入磁盘:

使用上面的Python代码,我们将首先收到原始图片:

这是完整的最终代码:

在本教程中,我们学习了如何使用OpenCV执行图像拼接和全景构造,并编写了最终的图像拼接代码。

我们的图像拼接算法需要四个主要步骤:检测关键点和提取局部不变描述符; 获得图像之间的匹配描述符; 应用RANSAC估计单应矩阵; 使用单应矩阵应用warping transformation。

当仅为两个图像构建全景图时,该算法在实践中工作良好。

4. 图像拼接技术的基本介绍

图像配准和图像融合是图像拼接的两个关键技术。图像配准是图像融合的基础,而且图像配准算法的计算量一般非常大,因此图像拼接技术的发展灶液很大程度上取决于图像配准技术的创新。早期的图像配准技术主要采用点匹配法,这类方法速激昌度慢、精度低,而且常常需要人工选取初始匹配点,无法适应大数据量图像的融合。图像拼接的方法很多,不同的算法步骤明辩扒会有一定差异,但大致的过程是相同的。一般来说,图像拼接主要包括以下五步: 将待拼接图像的重合区域进行融合得到拼接重构的平滑无缝全景图像。

5. 用MATLAB实现图像的拼接显示

看楼主的要求,似乎没楼上说的那么复杂。

楼主只是要求把四幅图片变成同样大小然后拼接起来就是了。

如果上述理解无误,那么实现并不困难,主要有以下几点需要注意:

1、图像格式:由于图像格式包括索引色和真彩色这两大类不同的类型,所以需要统一转换一下才能拼接。这两类图像的判断根据是读入的数据是二维还是三维,对于二维的数据,如果调色板为空,则按照灰度图像处理。

2、数据格式:根据具体的图像文件格式不同,读入的数据可能是logical、uint8、uint16、uint32、single、uint64、double等不同的格式,要想进行拼接,需要转换为同一种数据类型。

3、注意图像的宽高顺序:512*384的图像应为[384 512]。

参考代码

%待拼接文件
imfile={'1.jpg','2.jpg','3.gif','4.png'};

%读入文件,并调整大小、转换格式
A=cell(2,2);
fori=1:4
%读入图像数据
[X,map]=imread(imfile{i});
ifsize(X,3)==1
%有些灰度图像无map数据
ifisempty(map)
map=gray;
end
%转换为真彩色
X=ind2rgb(X,map);
end
%调整图像大小,并转换数据格式
A{i}=im2double(imresize(X,[384512]));
end

%拼接图像并显示
A=[A{1}A{2};A{3}A{4}];
imshow(A)

6. 数字图像处理的基本算法及要解决的主要问题

图像处理,是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外,基于光学理论的处理方法依然占有重要的地位。

图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。

传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。
目录
[隐藏]

* 1 解决方案
* 2 常用的信号处理技术
o 2.1 从一维信号处理扩展来的技术和概念
o 2.2 专用于二维(或更高维)的技术和概念
* 3 典型问题
* 4 应用
* 5 相关相近领域
* 6 参见

[编辑] 解决方案

几十年前,图像处理大多数由光学设备在模拟模式下进行。由于这些光学方法本身所具有的并行特性,至今他们仍然在很多应用领域占有核心地位,例如 全息摄影。但是由于计算机速度的大幅度提高,这些技术正在迅速的被数字图像处理方法所替代。

从通常意义上讲,数字图像处理技术更加普适、可靠和准确。比起模拟方法,它们也更容易实现。专用的硬件被用于数字图像处理,例如,基于流水线的计算机体系结构在这方面取得了巨大的商业成功。今天,硬件解决方案被广泛的用于视频处理系统,但商业化的图像处理任务基本上仍以软件形式实现,运行在通用个人电脑上。

[编辑] 常用的信号处理技术

大多数用于一维信号处理的概念都有其在二维图像信号领域的延伸,它们中的一部分在二维情形下变得十分复杂。同时图像处理也具有自身一些新的概念,例如,连通性、旋转不变性,等等。这些概念仅对二维或更高维的情况下才有非平凡的意义。

图像处理中常用到快速傅立叶变换,因为它可以减小数据处理量和处理时间。

[编辑] 从一维信号处理扩展来的技术和概念

* 分辨率(Image resolution|Resolution)
* 动态范围(Dynamic range)
* 带宽(Bandwidth)
* 滤波器设计(Filter (signal processing)|Filtering)
* 微分算子(Differential operators)
* 边缘检测(Edge detection)
* Domain molation
* 降噪(Noise rection)

[编辑] 专用于二维(或更高维)的技术和概念

* 连通性(Connectedness|Connectivity)
* 旋转不变性(Rotational invariance)

[编辑] 典型问题

* 几何变换(geometric transformations):包括放大、缩小、旋转等。
* 颜色处理(color):颜色空间的转化、亮度以及对比度的调节、颜色修正等。
* 图像合成(image composite):多个图像的加、减、组合、拼接。
* 降噪(image denoising):研究各种针对二维图像的去噪滤波器或者信号处理技术。
* 边缘检测(edge detection):进行边缘或者其他局部特征提取。
* 分割(image segmentation):依据不同标准,把二维图像分割成不同区域。
* 图像制作(image editing):和计算机图形学有一定交叉。
* 图像配准(image registration):比较或集成不同条件下获取的图像。
* 图像增强(image enhancement):
* 图像数字水印(image watermarking):研究图像域的数据隐藏、加密、或认证。
* 图像压缩(image compression):研究图像压缩。

[编辑] 应用

* 摄影及印刷 (Photography and printing)
* 卫星图像处理 (Satellite image processing)
* 医学图像处理 (Medical image processing)
* 面孔识别, 特征识别 (Face detection, feature detection, face identification)
* 显微图像处理 (Microscope image processing)
* 汽车障碍识别 (Car barrier detection)

[编辑] 相关相近领域

* 分类(Classification)
* 特征提取(Feature extraction)
* 模式识别(Pattern recognition)
* 投影(Projection)
* 多尺度信号分析(Multi-scale signal analysis)
* 离散余弦变换(The Discrete Cosine Transform)

7. 长图最多可以拼多少照片

长图最多可以拼9张图片,再多图片也不清晰了,有的软件还需要付费。LongScreen 是一款专注 iPhone 截屏的拼图应用。它的特点是能轻松拼接横向并列拼图,并支持竖向快速拼接长图,选择好图片点击右上角合并就可以开始拼接了。

图像拼接技术技术分类

图像拼接技术主要包括两个关键环节即图像配准和图像融合。对于图像融合部分,由于其耗时不太大,且现有的几种主要方法效果差别也不多,所以总体来说算法上比较成熟。

而图像配准部分是整个图像拼接技术的核心部分,它直接关系到图像拼接算法的成功率和运行速度,因此配准算法的研究是多年来研究的重点。

目前的图像配准算法基本上可以分为两类:基于频域的方法(相位相关方法)和基于时域的方法。

相位相关法最早是由Kuglin和Hines在1975年提出的,并且证明在纯二维平移的情形下,拼接精度可以达到1个像素,多用于航空照片和卫星遥感图像的配准等领域。

该方法对拼接的图像进行快速傅立叶变换,将两幅待配准图像变换到频域,然后通过它们的互功率谱直接计算出两幅图像间的平移矢量,从而实现图像的配准。由于其具有简单而精确的特点,后来成为最有前途的图像配准算法之一。

但是相位相关方法一般需要比较大的重叠比例(通常要求配准图像之间有50%的重叠比例),如果重叠比例较小,则容易造成平移矢量的错误估计,从而较难实现图像的配准。

8. 基于特征匹配和迭代优化的航拍图像拼接

本文研究了无人机(UAV)遥感图像拼接过程中重叠区域的不匹配问题。为了解决这个问题,首先通过将双重匹配与随机抽样共识(RANSAC)方法相结合来过滤特征点。其次,为了保证每幅图像与全景照片的投影关系的一致性,我们提出了一种局部拼接的方法。为了避免随着图像数量的增加透视变化累积而导致图像倾斜的错误,我们建立了图像旋转坐标系,并将图像之间的关系限制为平移和旋转。用坐标原点的相对位置来表示平移距离,通过迭代求解最优旋转角度。最后,图像的重叠部分通过线性加权融合。通过实验结果验证,本文提出的方法在大量图像的情况下能够保证更快的处理速度和更高的处理精度,从而达到理想的拼接效果。

近年来,随着计算机视觉的不断进步,图像拼接技术在海洋和矿产勘探、遥感勘探、医学成像、效果生成、虚拟现实等方面得到了广泛的应用。许多航拍遥感图像可以通过配备摄像头的无人机在地面拍摄得到。通常,由于无人机飞行高度、相机焦距等因素,单幅图像存在信息量少、全局分辨率低等问题。因此,要获得广角高分辨率的照片,就需要研究全景图像拼接技术。Brown 在 2003 年引入了着名的 AutoSitich 算法,很快就被用于商业产品,如 Photoshop。但是,该算法假定图像的重叠区域没有深度变化。2013 年,萨拉戈萨 J 等人。将图像拆分为密集的网格,并为每个网格使用单个更改,称为网格变形。该方法在一定程度上解决了图像变形、尺寸缩放、重定向等问题。

图像拼接技术一般分为图像几何校正、图像预处理、图像对齐、图像融合四个步骤。由于相机镜头的畸变,需要对无人机的图像进行校正,使得到的图像满足个别地图的投影关系。图像预处理是几乎所有图像处理技术的重要组成部分,包括去噪、灰度变化等。这个过程可以降低匹配难度,提高匹配精度。然而,对于无人机遥感图像的拼接,图像匹配和图像融合是成功的关键。

图像匹配技术是图像拼接的基础。1975年米尔格拉姆提出了计算机拼接技术。于是,在重叠区域寻找最优接缝线就成为一个重要的研究方向。同年,Kuslin 提出了一种相位相关方法,通过傅里叶变化将图像转换到频域,并利用功率谱计算平移。1987 年,Reddy 提出了一种扩展的相位相关方法,该方法可以计算图像的平移和旋转关系并解决图像缩放问题。图像拼接的另一个分支是基于图像特征。1988年Harris提出经典的Harris点检测算法,它使用特定的旋转不变性哈里斯点进行特征匹配。2004 年,Lowe 提出了一种完美的尺度不变特征变换算法(SIFT),对平移、旋转、尺度缩放、不均匀光照等图像领域应用最广泛的技术具有良好的适应性。C Aguerrebere 根据输入图像的 SNR 条件给出的问题难度级别显示不同的行为区域。Wu通过建立模型,将深度学习和进化算法应用于遥感图像的拼接,实现概率意义上的全局优化。

图像融合技术是遥感图像拼接技术中的另一项核心技术,分为像素级融合、特征级融合、决策级融合。像素级融合仍然是现阶段最常用的图像融合方法之一。

对于无人机的遥感图像,存在图像数量多、光照条件多变等问题。每次拼接过程中的小错误都难以避免。随着图像数量的增加,误差不断累积,图像拼接后期会出现图像失真和重影。S Bang 创建高质量全景图,过滤掉视频的模糊帧,选择关键帧,并校正相机镜头失真。Zhang 提出了基于 STIF 的 GA-SIFT 并给出了一种自适应阈值方法来解决计算量大和拼接时间长的问题。李明基于动态规划解决无人机侧视问题寻找最佳接缝线。然而,当图像数量逐渐增加时,现有的拼接算法存在误差累积。

也有一些基于网格变形的图像拼接算法,但计算量太大。在本文中,图像被匹配两次以过滤特征点以提高准确度。拼接问题对应于通过坐标系转换的旋转角度解,应用高斯-牛顿迭代计算最优旋转角度。此外,我们练习局部匹配方法以减少错误并使用加权融合来实现过度平滑。

SIFT特征点不仅在空间尺度和旋转上保持不变,而且在光照和视角变化的条件下,还具有优异的抗干扰能力和良好的稳定性。为了实现空间尺度的不变性,SIFT特征点可以根据物体远看小而模糊,反之大而清晰的特点,建立高斯金字塔模型。差分金字塔 (DoG) 是通过计算金字塔中相邻两层图像之间的差异来获得的。使用函数拟合在 DOG 空间中测试极值。通过对确定场中基于SIFT特征点的梯度信息进行统计,选择加权幅度最大的梯度方向作为主梯度方向。通过将特征点与其主梯度方向相关联,可以解决图像特征点的旋转不变性问题。最后,利用特征点周围像素的信息建立一个128维的向量作为特征点的描述符。

提取特征点后,需要对两幅图像的特征点进行匹配。通过特征点成对匹配,可以计算出两个特征点对应的描述符之间的欧氏距离,选择欧氏距离最小的点作为匹配点对。为了减少不匹配的发生率, 被用作正确匹配的阈值。具有大于 的描述符欧几里得距离的匹配点对被消除。

RANSAC 是特征点匹配中最常用的方法之一。它首先从匹配结果中随机选择四对特征点并计算单应矩阵。其次,根据上一步得到的单应矩阵,计算第一幅图像在第二幅图像中的重投影坐标,并计算该坐标与第二幅图像中匹配点对坐标的距离。通过设置距离阈值记录所有匹配点对中正确匹配特征点对的个数。重复上面的过程,最终留下与最多点对数的正确匹配。

高斯-牛顿迭代是求解非线性最小二乘优化问题的算法之一,可以描述为:

我们选择一个初始值,然后不断更新当前优化变量以减小目标函数值。高斯-牛顿迭代的主要思想是对函数 进行一阶泰勒展开,计算 及其雅可比矩阵 对应的函数值。使用 和 计算 的增量,直到 足够小。

加权平均法是图像融合中简单有效的方法之一。第一幅图像和第二幅图像重叠区域的像素值由两幅图像像素的加权求和得到,表示为:

其中:越接近 img1, 的值越大。 的值从1逐渐变为0,重叠区域从第一幅图像逐渐过渡到第二幅图像,从而实现画面的平滑过渡。照片的加权平均融合因其直观的简单性和快速的运行速度而被广泛使用和图像拼接。

对于两幅图像的拼接,由于无人机的遥感相机通常安装在一个稳定的平台上,通过选择合适的坐标系,将图像对齐问题转化为单幅图像旋转问题,如图1所示。

此外,大多数具有相关高光频的常用相机通常在连续帧之间具有较大的重叠区域。因此,在图像拼接过程中,第 幅图像在全局位置上的投影关系,不仅受第 幅图像的影响,还与 图像相关。为了保证图像变形的一致性,首先将 张图像拼接在一起,然后将结果整合到整幅图像中。大量的实验测试证明,当i设置为3时效果最佳。整个过程如图图2。

图像中的特征点有很多种,本文使用最常见的SIFT特征点。我们提取并匹配两张输入图像的特征点,结果如下所示。

特征点的匹配精度直接影响旋转角度的计算,因此使用前必须对特征点对进行过滤。鉴于过滤特征点的方法很多,本文先将左图与右图进行匹配,再将右图与左图进行匹配。两次相同结果配对的匹配点将被保留。在此基础上,使用RANSAC方法对结果进行优化,成功匹配了上图中的121个特征点。

从无人机拍摄的两张照片之间通常存在旋转和平移。为了独立优化旋转角度,我们首先建立如图 5所示的坐标系。

以图像匹配成功的特征点坐标值的平均值作为该坐标的原点,坐标轴与像素坐标系的两个坐标轴平行。根据公式(3),特征点从图像坐标系转换为图像旋转坐标系:

其中 为滤波后的特征对的总数, 为特征点在原始图像坐标系中的坐标值,并且 是新的值。

在计算图像的旋转角度之前,我们首先需要分析图像的缩放比例。由飞行高度引起的尺寸变化将在轴上具有相同的缩放比例。因此,根据所有特征点与图像旋转坐标系原点的欧氏距离比,可以计算出两幅图像之间的缩放比例,对图像进行缩放和改变。

图像缩放后,计算图像旋转的角度。高斯牛顿迭代的方式计算旋转角度的最优解。首先设置目标函数:

通过迭代选择最优的 使得:

使用误差函数 的泰勒展开进行迭代。

其中

根据

我们可以发现增量值 每次迭代。最终,当我们计算出的 满足条件时,停止迭代过程。可以使用最佳旋转角度和旋转中心来求解图像的变换矩阵。

由于拍摄图像时光线不均匀,连续两张图像之间可能存在一些颜色差异。此外,图像旋转不可避免地存在小误差,因此我们练习线性加权融合以消除两幅图像之间的拼接线和色度变化。图像的重叠是按距离加权的,这样拼接结果自然是从img1到img2过度了。

我们利用OpenCV的功能从遥感图像中提取SIFT特征点并进行匹配。从Stitch拼接功能、基于透视变化的图像拼接结果以及本文的拼接速度的对比可以看出,本文采用的方法具有一定的优越性。

从表1数据可以看出,在拼接少量图像时,三种算法的拼接结果相似,没有出现明显的拼接误差。但是,Stitcher 算法比其他两种拼接方法花费的时间要多得多。

图 11很明显,随着图像数量的增加,基于透视变换的图像拼接算法出现了严重的失配。然而,本文采用的方法取得了比较满意的结果,因为在无人机拍摄的图像中,地面上的所有特征都可以近似地视为在同一平面上。根据透视变换,无人机的远近抖动会引入图像拼接导致错误。图像数量的不断增加会导致错误的积累,从而导致严重的失配。另外,这使得程序中断,从而无法完成所有60幅图像的拼接。假设同一平面上图片的仿射变化会更符合无人机遥感图像的实际情况。最后,可以通过线性加权融合来解决误差问题,以提高拼接效果。考虑到stitch算法耗时过长,本文不会对两者进行比较。

在上面的图 12 中,使用 100 张图像来测试本文中的方法。图像的仿射变换是通过计算围绕图像特征点中心的旋转角度来进行的。变换后的图像采用线性加权融合后,可以得到大量图像数据处理后的结果。拼接自然,符合人类视觉体验。

我们在网络上跑了一组数据,结果如下。

鉴于以上实验结果,该方法具有一定的抗干扰能力,可以高速运行。与高度集成的Stitcher和基于透视变换的图像拼接结果相比,我们可以发现,基于透视变化的图像拼接结果随着图像数量的增加而逐渐变差。然而,尽管拼接效果很好,但 Stitcher 需要更长的处理时间。

在本文中,我们研究了无人机遥感图像的拼接技术,主要贡献可以总结如下:

通过实验结果可以看出,本文提出的方法比现有方法具有更好的实时性,对于相机平面与成像平面平行的情况具有更好的拼接效果。

9. AANAP:自适应尽可能自然的图像拼接

图像拼接的目标是创建看起来自然的马赛克,没有因相对相机运动、照明变化和光学像差而可能出现的伪影。在本文中,我们提出了一种新颖的拼接方法,该方法在整个目标图像上使用平滑拼接场,同时考虑到所有局部变换变化。计算扭曲是完全自动化的,并使用局部单应性和全局相似性变换的组合,两者都是相对于目标估计的。我们通过线性化单应性并慢慢将其更改为全局相似性来减轻非重叠区域中的透视失真。所提出的方法很容易推广到多幅图像,并允许自动获得全景中的最佳视角。它对参数选择也更加稳健,因此与最先进的方法相比更加自动化。使用各种具有挑战性的案例证明了所提出方法的好处。

图像拼接是计算机视觉中古老且广泛使用的算法之一。获得尽可能自然、没有伪影的图像马赛克是非常重要的,尽管解释全景图或马赛克的自然外观存在主观性。

早期的方法是估计单应变换,但容易导致错位和重影。作者提出了一种新方法,该方法结合了多种技术,使全景图看起来更自然。减轻 As-Projective-As-Possible (APAP) 中发生的透视失真拼接,重叠区域中对应点的子集自动估计全局相似性变换。在重叠区域中的单应性和全局相似性之间进行平滑插值,并在非重叠区域中使用线性化单应性(仿射)和全局相消洞卖似性变换类似地进行外推。两个拼接场(单应线性化单应性和全局相似性)的平滑组合帮助实现:

目标图和参考图分别为 和 ,匹配点对分别为 和 ,由 到 的单应 表示为

在齐次坐标中表示 和 ,单应性可以由 的矩阵 表示。

(5)中的 的矩阵中只有两行是相互独立的,对于 对匹配点对, 可以表示为:

其中 和 是(5)中矩阵的前两行,并且同时限制 保证单应矩阵只有8个自由度。

APAP中作者用局部加权的方式修改(6)式,在 处的的局部单应性可以表示为

重写为

其中 ,在APAP中权重采用高加权的方式获取,在靠近 的位置权重大,远离的位置权重小,即

其中 。

需要注意的是局部单应性只能在参考图和目标图重叠的区域计算。非重叠区域的单应变换采用重叠区域的权重的线性组合获得,因此需要谨慎选择合适的偏置以防外推伪影。

由于高斯加权的各向同性性质,会导致“波浪”效应,而选择适当的偏移会导致良好的结果。即使在这种情况下,APAP 的非重叠区域的透视失真也很明显。本文作者使用拿逗在重叠区域中没有偏移的移动 DLT 来估计局部单应性,并使用单应性线性化外推到非重叠区域,减少透视失真。

非重叠区域的单应变换会产生极不自然的尺度变化,用1维的透视变换来理解

若用一系列点对估计参数 ,在可用点对范围之外, 和 也是非线性的。在2维透视变换中扭曲会更加严重。

对于图像,锚点 附近的任意一点 的单应泰勒级数展开可以表示成

其中 为单应 在 点处的雅可比矩阵。

在非重叠区域计算颤友 的 线性化并不容易。而重叠区域和非重叠区域的边界可能存在多个点,不知道在何处计算雅可比矩阵,因此在边界将锚点线性化并计算加权平均。

边界处的一系列锚点 ,线性化的加权组合表示为

为高斯权重 或Student权重 ,由于Student分布尾部衰减更慢,当q远离锚定点时,所有锚定点都被赋予类似的加权,表现更加鲁棒。

使用所有点匹配查找全局相似性变换可能会导致非最优解,特别是当重叠区域包含不同的图像平面时。这个问题在下图中很明显,它显示了SPHP的缝合结果。

作者通过以下方式分割对应点来计算参考图像和目标图像之间的最佳相似性变换的方法。在获得特征点匹配后,首先使用带有阈值 的RANSAC去除异常值。然后,使用带有阈值 的 RANSAC 找到具有最大内点的平面的单应性,其中 ,删除这些内点。重复这个过程,直到内点的数量小于η. 每组匹配的内点用于计算单个相似性变换。然后,检查对应于变换的旋转角度并选择具有最小旋转角度的旋转角度。

拼接结果出现不自然的区域用一下方式更新全局相似变换。

其中 为第 个局部单应性, 表示更新后的局部单应性 为全局相似变换, 和 为权重系数,上标 表示目标图像, 表示参考图像,限制 ,且都在0~1之间,用下式计算:

其中 为目标图像扭曲后在 方向上的投影点。 和 分别为目标图像和参考图像的中心点。

和 为 的最小和最大值,其中 为最终全景图的第 个位置。

使用全局相似性变换更新目标图像的扭曲会导致参考图像和先前对齐的目标图像之间的重叠区域不对齐。因此,我们需要通过适当地将变化从目标图像传播到参考图像来补偿这些变化。现在可以获得参考图像的局部变换,如下所示:

在这项工作中,我们提出了一种新颖的拼接方法,该方法使用从局部单应性或其线性化版本和全局相似变换导出的平滑拼接场。结果表明,我们的方法提供了更自然的全景图,在重叠区域没有可见的视差,并减轻了非重叠区域的透视失真问题。此外,它较少依赖于参数的选择并自动计算适当的全局相似性变换。与现有方法的实验比较表明,与最先进的方法相比,所提出的方法产生了最好的缝合。未来的研究发展将包括在存在大运动时补偿视差,这可以通过将切缝方法集成到该框架中来执行。

阅读全文

与拼接图像算法相关的资料

热点内容
xp配置java环境变量配置 浏览:7
python中1到100怎么算 浏览:765
小度我想看程序员 浏览:504
bs刷装备建立后文件夹没有 浏览:79
找漫画看应该下载什么app 浏览:182
如何在vps上搭建自己的代理服务器 浏览:744
nginxphp端口 浏览:403
内脏pdf 浏览:152
怎么看云服务器架构 浏览:85
我的世界国际服为什么登不进服务器 浏览:997
微盟程序员老婆 浏览:931
intellij创建java 浏览:111
java连接odbc 浏览:40
启动修复无法修复电脑命令提示符 浏览:360
手机编程是什么 浏览:98
山东移动程序员 浏览:165
苏州java程序员培训学校 浏览:479
单片机液晶驱动 浏览:856
魔拆app里能拆到什么 浏览:132
新预算法的立法理念 浏览:146