概述

图像拼接一般包括warp(映射), compensation(光照补偿)和blend(融合)三部分。
warp部分主要取决于相机参数估计的准确性,光照补偿主要用于解决不同图像曝光不同所带来的输出图像的不同局部的光照差异,而blend则用于融合不同图像之间的重叠部分,一般使用线性加权的方式来得到最终的输出图像。


多波段融合(multi blend)

多波段融合的基本思想是图像可以分解为不同频率的图像的叠加(类似于傅里叶变换),在不同的频率上,应该使用不同的权重来进行融合,在低频部分应该使用波长较宽的加权信号(例如高斯核函数中sigma比较大),在高频部分应该使用较窄的加权信号(例如高斯核函数的sigma比较小),其算法如下:

  1. 计算输入图像的高斯金字塔。如果输入图像是 A,B A,B,则计算 GA0,GA1,GA2,GA3,… G_{A0},G_{A1},G_{A2},G_{A3},\ldots和 GB0,GB1,GB2,GB3,… G_{B0},G_{B1},G_{B2},G_{B3},\ldots(如何计算高斯金字塔?)
  2. 计算输入图像的拉普拉斯金字塔。记为 LA0,LA1,LA2,LA3,… L_{A0},L_{A1},L_{A2},L_{A3},\ldots和 LB0,LB1,LB2,LB3,… L_{B0},L_{B1},L_{B2},L_{B3},\ldots(如何计算拉普拉斯金字塔?)
  3. 将处于同一级的拉普拉斯金字塔进行融合。例如在拼接缝两侧使用简单的线性融合。记输出图像为 C C,则这里得到LC0,LC1…L_{C0},L_{C1}\ldots
  4. 将高层的拉普拉斯金字塔依次扩展直至和 LC0 L_{C0}相同分辨率。我们记做 LC00,LC11,LC22… L_{C00},L_{C11},L_{C22}\ldots
  5. 将4中得到的图像依次叠加,则得到最终的输出图像 C <script type="math/tex" id="MathJax-Element-20">C</script>。

代码实现

使用matlab实现多波段算法如下:

function C = multi_blend(A, B);%resize A,B,C to the same size
A_size = size(A);
B_size = size(B);
C_size = [512,512];
if(A_size ~= C_size)A = imresize(A,C_size);
end
if(B_size ~= C_size)B = imresize(B,C_size);
end%gaussian kernel
kernel=fspecial('gaussian',[5 5],1);%obtain the Gauss Pyramid
G_A0 = A;
G_A1 = conv2(G_A0,kernel,'same');
G_A1 = G_A1(2:2:size(G_A1,1),2:2:size(G_A1,2));
G_A2 = conv2(G_A1,kernel,'same');
G_A2 = G_A2(2:2:size(G_A2,1),2:2:size(G_A2,2));
G_A3 = conv2(G_A2,kernel,'same');
G_A3 = G_A3(2:2:size(G_A3,1),2:2:size(G_A3,2));
G_A4 = conv2(G_A3,kernel,'same');
G_A4 = G_A4(2:2:size(G_A4,1),2:2:size(G_A4,2));
G_A5 = conv2(G_A4,kernel,'same');
G_A5 = G_A5(2:2:size(G_A5,1),2:2:size(G_A5,2));G_B0 = B;
G_B1 = conv2(G_B0,kernel,'same');
G_B1 = G_B1(2:2:size(G_B1,1),2:2:size(G_B1,2));
G_B2 = conv2(G_B1,kernel,'same');
G_B2 = G_B2(2:2:size(G_B2,1),2:2:size(G_B2,2));
G_B3 = conv2(G_B2,kernel,'same');
G_B3 = G_B3(2:2:size(G_B3,1),2:2:size(G_B3,2));
G_B4 = conv2(G_B3,kernel,'same');
G_B4 = G_B4(2:2:size(G_B4,1),2:2:size(G_B4,2));
G_B5 = conv2(G_B4,kernel,'same');
G_B5 = G_B5(2:2:size(G_B5,1),2:2:size(G_B5,2));%get Laplacian Pyramid
L_A0 = double(G_A0)-imresize(G_A1,size(G_A0));
L_A1 = double(G_A1)-imresize(G_A2,size(G_A1));
L_A2 = double(G_A2)-imresize(G_A3,size(G_A2));
L_A3 = double(G_A3)-imresize(G_A4,size(G_A3));
L_A4 = double(G_A4)-imresize(G_A5,size(G_A4));
L_A5 = double(G_A5);L_B0 = double(G_B0)-imresize(G_B1,size(G_B0));
L_B1 = double(G_B1)-imresize(G_B2,size(G_B1));
L_B2 = double(G_B2)-imresize(G_B3,size(G_B2));
L_B3 = double(G_B3)-imresize(G_B4,size(G_B3));
L_B4 = double(G_B4)-imresize(G_B5,size(G_B4));
L_B5 = double(G_B5);%construct the mask
size0 = size(L_A0);
mask0 = zeros(size0);
mask0(:,1:size0(2)/2)=1;
mask0(:,size0(2)/2-5:1:size0(2)/2+5)=repmat(1:-0.1:0,[size0(1) 1]);
size1 = size(L_A1);
mask1 = zeros(size1);
mask1(:,1:size1(2)/2)=1;
mask1(:,size1(2)/2-5:1:size1(2)/2+5)=repmat(1:-0.1:0,[size1(1) 1]);
size2 = size(L_A2);
mask2 = zeros(size2);
mask2(:,1:size2(2)/2)=1;
mask2(:,size2(2)/2-5:1:size2(2)/2+5)=repmat(1:-0.1:0,[size2(1) 1]);
size3 = size(L_A3);
mask3 = zeros(size3);
mask3(:,1:size3(2)/2)=1;
mask3(:,size3(2)/2-5:1:size3(2)/2+5)=repmat(1:-0.1:0,[size3(1) 1]);
size4 = size(L_A4);
mask4 = zeros(size4);
mask4(:,1:size4(2)/2)=1;
mask4(:,size4(2)/2-5:1:size4(2)/2+5)=repmat(1:-0.1:0,[size4(1) 1]);
size5 = size(L_A5);
mask5 = zeros(size5);
mask5(:,1:size5(2)/2)=1;
mask5(:,size5(2)/2-5:1:size5(2)/2+5)=repmat(1:-0.1:0,[size5(1) 1]);%obtain the output
L_C0 = L_A0 .* mask0 + L_B0 .* (1-mask0);
L_C1 = L_A1 .* mask1 + L_B1 .* (1-mask1);
L_C2 = L_A2 .* mask2 + L_B2 .* (1-mask2);
L_C3 = L_A3 .* mask3 + L_B3 .* (1-mask3);
L_C4 = L_A4 .* mask4 + L_B4 .* (1-mask4);
L_C5 = L_A5 .* mask5 + L_B5 .* (1-mask5);
C = L_C0+imresize(L_C1,size0)+imresize(L_C2,size0)+imresize(L_C3,size0)+imresize(L_C4,size0)+imresize(L_C5,size0);figure(1);
imshow(A);
figure(2);
imshow(B);
figure(3);
imshow(uint8(C));end

实验效果:

输入两张光照差别很大的图像:

左半部分使用左图,右半部分使用右图,进行多波段融合得到如下:


每个波段融合使用的掩膜如下(白色代表左图成分,黑色代表右图成分):





其中前四幅图为显示方便做了偏移处理。

参考

  1. P. Burt and E. Adelson. A multiresolution spline with application to image mosaics. ACM Transactions on Graphics, 2(4):217–236, 1983.
  2. Matthew Brown and David G. Lowe. Automatic Panoramic Image Stitching using Invariant Features.

图像拼接——多波段融合(multi blend)相关推荐

  1. 图像拼接 - 多波段融合

    转自:https://blog.csdn.net/smallflyingpig/article/details/61200497 概述 图像拼接一般包括warp(映射), compensation(光 ...

  2. 图像融合之多波段融合(Multiband Blending)/拉普拉斯金字塔融合(Laplacian Pyramid Blending)

    多波段融合又叫拉普拉斯金字塔融合. 多波段融合的思想是对待融合的图像分别构建拉普拉斯金字塔,(拉普拉斯算子可以提取出图像的高频信息,在拉普拉斯金字塔中,越往上层的图像越高频)然后对同一层图像按照某种规 ...

  3. 泊松融合(Poisson blend)

    原文地址:http://www.cnblogs.com/CVFans/p/4475885.html 最近国外的Open Course很火.很多同学喜欢看斯坦福,麻省的公开课程.但是国产大学生最大的悲剧 ...

  4. Opencv 图像拼接与融合简单方法Stitcher

    Opencv 图像拼接与融合简单方法Stitcher 官方示例 使用方法 运行效果 官方示例 #include "opencv2/imgcodecs.hpp" #include & ...

  5. 全景图像拼接——图像融合

    图像融合技术就是将配准过后的图像融合成一幅宽视角.大场景的图像.但由于图像采集过程中各种因素的影响,例如光照.角度.距离等,从而导致图像间的光照不均匀.颜色上不连续. 经过配准以后,参考图像和输入图像 ...

  6. 图像拼接(融合)算法—matlab代码

    寻找两图像色差差异最小处进行左右拼接 拼接+融合 clc;clear;close all; img1=imread('试验图 1.bmp');%左图img2=imread('试验图 2.bmp');% ...

  7. python 一份简单的车辆环视全景系统实现图像拼接缝融合

    对于拼接后得到的俯视图,在拼接相邻两图拼接处存在一条拼接缝,如果不作处理,在视频播放过程中在拼接缝处会有明显的跳跃情况.由于我们相邻的两幅图之间有重叠区域,我们可以利用重叠区进行平滑过渡处理来消除拼接 ...

  8. 图像拼接缝融合之加权融合

    对于拼接后得到的俯视图,在拼接相邻两图拼接处存在一条拼接缝,如果不作处理,在视频播放过程中在拼接缝处会有明显的跳跃情况.由于我们相邻的两幅图之间有重叠区域,我们可以利用重叠区进行平滑过渡处理来消除拼接 ...

  9. [UE4]条件融合动画: Blend Posed by int

    Aim Group=0:使用动画"Blend Pose 0" Aim Group=1:使用动画"Blend Pose 1" 转载于:https://www.cn ...

最新文章

  1. 资源丨机器学习进阶路上不可错过的28个视频
  2. JCO_(配置连接池)
  3. 网站刷关键词_中小企业网站排名如何做SEO优化 - 刷百度关键词排名
  4. 西工大java高级网络编程_奥鹏西工大16春《JAVA高级网络编程》平时作业
  5. Oracle从小白到大牛的刷题之路(建议收藏学习)
  6. Python赋值语句浅析
  7. 283、移动零(python)
  8. a3967驱动_Arduino A3967 步进电机驱动板 EasyDriver Stepper Motor
  9. 浏览器的“心脏”——内核
  10. 2021阿里云双11云服务器配置表汇总!
  11. 黎曼流形(Riemannian manifold)
  12. 项目轮播图功能实现和导航栏的实现
  13. python实现中文数字转为阿拉伯数字
  14. 【收集】键盘钢琴 和弦琴谱 (带HTML版开发流程)
  15. 生成式模型(VAE+GAN)
  16. SpringCloud Alibaba 教程
  17. 魔兽怀旧服务器维护副本是否重置,魔兽世界怀旧服副本重置时间
  18. 入门UI设计一般要学习多久,学习哪些内容
  19. Springboot 自定义注解AOP实现时间参数格式转换
  20. 工作小笔记——电机基本参数和选型

热门文章

  1. Auto.js协议实战脚本_抓包(实战二)
  2. 运维必知必会的监控知识体系全梳理
  3. PTA 实例1.1:最大子列和问题
  4. DM8MPP双节点搭建
  5. Outlook 自动发送 密抄 自己 可多人密抄
  6. LeetCode第 57 场力扣夜喵双周赛(差分数组、单调栈) and 第 251 场力扣周赛(状态压缩动规,树的序列化,树哈希,字典树)
  7. matlab 各类函数区别定义
  8. 36氪acw_sc__v2
  9. python内置函数返回序列中最大元素_Python 内置函数 ____________ 用来返回序列中的最大元素。_学小易找答案...
  10. docker中运行bash: mongo: command not found报错问题处理(直接使用mongosh)