首页 > 编程语言 >基于FPGA的图像拼接融合算法

基于FPGA的图像拼接融合算法

时间:2024-08-22 12:24:11浏览次数:8  
标签:高斯 FPGA 融合 像素 算法 拼接 图像 分量 关键点

基于FPGA的图像拼接融合算法

一、图像拼接

1.0 拼接算法设计

  1. 预处理(图像矫正)图像矫正通过计算图像灰度值,赋值给目标像素,将目标像素与源数据比较,然后将图像边缘的值插入到目标点;对图像消除彩色分量(对提取特征无影响),只提取亮度分量;得到的灰度图像噪声更小,细节更明显。
  2. 特征点检测,SIFT 操作从输入图像与不同高斯滤波器的离散卷积开始。高斯滤波器是一种广泛使用的图像平滑算法,定义为:
    在这里插入图片描述
    上式中,G为(x,y)点的高斯核,σ为高斯参数。使用较大的 σ 值会对图像产生更大的平滑效果。图像与高斯核的离散卷积生成具有较少噪声和较少细节的图像。在 SIFT 中,高斯核的离散卷积是用四个不同的 σ 值完成的。逐渐增大的 σ 值用于生成一组模糊图像或八度音阶(意思频率减半,低频部分对应灰度图中变化平缓的部分,高频部分对应灰度图中变化剧烈的部分)。
    通过查找局部最大值或最小值,从 DoG 空间中提取关键点。如果一个像素是由顶层 9 个像素、中间层 8 个像素和底层 9 个像素组成的 26 像素邻域内的局部最大值或最小值,则该像素被认为是关键点。
  3. 特征点描述,是特定关键点的唯一标识符。 SIFT 使用关键点的梯度幅度和方向作为描述符的基础。 一个点的梯度大小和方向可以通过图像与 Sobel 滤波器的离散卷积来计算。为了生成关键点描述符,计算每个关键点周围 16x16 窗口内每个点的梯度幅度和方向。 16x16 窗口的梯度幅度与高斯核卷积。将每个 4x4 单元格中的梯度幅度组合起来,使 16x16 窗口减少到 4x4 窗口和 16 个梯度方向。最后,这 16 个梯度方向被转移到 8 个 bin 中。因此,构建了一个 128 个元素的向量,作为关键点描述符。
  4. 关键点匹配,比较来自两个相机传感器的视频帧中关键点的关键点描述符。如果两个关键点(每个相机传感器一个)的关键点描述符之间的差异低于误差阈值,则将它们视为关键点对。将它们的关键点描述符之间差异最小的关键点对作为参考关键点。
  1. 图像混合,加权平均方法用于将两个帧混合成单个图像。重叠区域的像素值等于两帧像素的加权平均值。根据重叠像素和相应帧的边界之间的距离选择权重。

在这里插入图片描述

1.1 融合算法设计

  1. 红外图像与微光图像融合的主要目的是通过融合可以得到一幅兼具两幅图像特点的融合结果。融合图像中包含源图像的光谱信息隐藏目标可以更好的显示。目标物在图像中较为显著,因此会更有利于后续的应用。红外图像是一种热辐射成像,图像中的目标热源部分会非常突出,灰度值明显高于其他区域。
  2. RPCA(鲁棒主成分分析,Robust Principal Component Analysis)是低秩矩阵恢复模型,已经在视频监控,计算机视觉等许多领域得到广泛应用。RPCA模型可将数据矩阵表示为低秩矩阵和稀疏矩阵的叠加。
  3. 稀疏矩阵表示图像的显著特征,低秩矩阵包含图像的细节纹理等背景信息。分别融合后发现融合效果目标信息显著,效果较好。
  4. 源图像经过 RPCA 变换后得到稀疏分量和低秩分量,分别表示不同的图像信息。
  5. 在红外图像中,显著区域是相对背景比较突出的一部分图像内容。因此,稀疏分量的特征可以描述源图像的目标等显著信息,低秩矩阵建模为红外图像的主要背景信息。
  6. NSCT 作为一种多尺度变换,它可以多分辨率多方向的分解提取图像的信息。采用 NSCT 变换的方法融合源图像的低秩分量可以更好得到目标图像的低秩分量。在得到融合之后的低秩分量和稀疏分量后通过叠加可以得到融合结果。
    在这里插入图片描述

1.2 设计架构

整个设计通过多路输入将数据多层拼接,来实现图像的融合显示。
在这里插入图片描述

在这里插入图片描述

标签:高斯,FPGA,融合,像素,算法,拼接,图像,分量,关键点
From: https://blog.csdn.net/qq_50670020/article/details/141424781

相关文章

  • 算法笔记|Day32动态规划V
    算法笔记|Day32动态规划V※※※※※完全背包问题理论基本题目描述题目分析采用一维数组(滚动数组)☆☆☆☆☆leetcode518.零钱兑换II题目分析代码☆☆☆☆☆leetcode377.组合总和Ⅳ题目分析代码☆☆☆☆☆KamaCoder57.爬楼梯(待补充)题目分析代码※※※※※完全......
  • [vue3] vue3更新组件流程与diff算法
    在Vue3中,组件的更新通过patch函数进行处理。patch函数源码位置:core/packages/runtime-core/src/renderer.tsatmain·vuejs/core(github.com)constpatch:PatchFn=(n1,n2,container,anchor=null,parentComponent=null,parentSuspen......
  • C++ 有向图拓扑排序算法
    代码 #include<algorithm>#include<cassert>#include<functional>#include<map>#include<memory>#include<queue>#include<set>#include<unordered_set>#include<vector>namespacejc{templa......
  • 力扣面试经典算法150题:跳跃游戏
    跳跃游戏今天的题目是力扣面试经典150题中的数组的中等难度题:跳跃游戏。题目链接:https://leetcode.cn/problems/jump-game/description/?envType=study-plan-v2&envId=top-interview-150题目描述给定一个非负整数数组nums,你最初位于数组的第一个下标,即nums[0]。数......
  • 最短路 - Dijkstra 算法
    Dijkstra(迪杰斯特拉)算法是基于贪心思想的单源最短路算法暴力Dijkstra具体如下:structnode{ intv,w;};vector<node>e[N];intdist[N],vis[N];e[u]存的是节点u的所有出边的终点和边权,dist[u]存u到原点s的最小距离,vis[u]标记是否走过voiddijkstra(int......
  • 粒子群算法求解多元函数拟合问题
    在一元线性回归中,我们使用最小二乘法估计出k与b,这其实就是一个求拟合函数的过程。当一元扩展到多元,我们也可以用最小二乘的思想估计出参数目录一、最小二乘法二、将最小二乘法视为最值问题1.利用有约束的fmincon函数(1)定义目标函数(2)进行求解2.利用无约束最小值函数(1)利用fminsearch......
  • 目标追踪 ByteTrack 算法详细流程分析
    原理介绍ByteTrack是字节跳动与2021年10月份公开的一个全新的多目标跟踪算法,原论文是《ByteTrack:Multi-ObjectTrackingbyAssociatingEveryDetectionBox》。ByteTrak的MOTA和FPS等指标上都实现了较好的性能,要优于现有的大多数MOT(多目标追踪)算法。github地址:https://git......
  • 面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、
    概述Dynamicprogramming,简称DP,动态规划,基础算法之一,维基百科的解释:是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时......
  • 面试+算法之回文(Java):验证回文串、回文数、最长回文子串、回文链表、分割成回文串、
    概述算法是一个程序员的核心竞争力,也是面试最重要的考查环节。本文整理一些与回文相关的基础算法题。注:本文语言为Java。验证回文串如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。给定一个字符......
  • 时间轮算法理解、Kafka实现
    概述TimingWheel,时间轮,简单理解就是一种用来存储若干个定时任务的环状队列(或数组),工作原理和钟表的表盘类似。关于环形队列,请参考环形队列。时间轮由两个部分组成,一个环状数组,一个遍历环状数组的指针。首先定义一个固定长度的环状数组,队列中的每一个元素代表一个时间格(可以精确......