OpenCV计算摄影学(7)HDR成像之多帧图像对齐的类cv::AlignMTB

news2025/2/28 14:27:04
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

该算法将图像转换为‌中值阈值位图‌(Median Threshold Bitmap,MTB):

1.位图生成‌:

  • 计算图像‌亮度中值‌作为全局阈值‌2
  • 亮度高于中值的像素标记为1,否则标记为0,形成二值位图‌

2.位操作对齐‌:

  • 通过位移(bit-shifting)和异或(XOR)等位运算对齐不同图像的MTB位图,计算最小差异偏移量‌

3.技术特性‌:

  • 曝光不变性‌:基于中值阈值而非绝对亮度值,无需依赖曝光参数或相机响应曲线‌
  • 边界处理‌:对齐后的新增区域默认填充0(黑色)‌

4‌.应用场景‌:

  • 多曝光图像对齐(HDR成像预处理)‌
  • 动态场景下的快速图像配准(如移动端摄影)‌

    5.关联文献‌:
  • 详细实现参考论文 [290]‌

算法流程示意图‌
‌输入图像‌ → 2. ‌灰度化‌ → 3. ‌计算中值亮度‌ → 4. ‌生成MTB位图‌ → 5. ‌位运算对齐‌ → 6. ‌输出对齐结果

cv::AlignMTB 是 OpenCV 库中用于对齐不同曝光图像的具体实现类,它继承自 cv::AlignExposures 抽象基类。这个类利用基于中值阈值位图(Median Threshold Bitmap, MTB)的方法来对齐图像,这种方法不依赖于图像的亮度信息,因此非常适合用于高动态范围(HDR)成像中的曝光对齐。

主要功能

  • 对齐曝光图像:cv::AlignMTB 能够处理一系列具有不同曝光设置的图像,并将它们对齐以便进行后续的 HDR 合成或其他处理。

接口概览

以下是 cv::AlignMTB 类的一些重要成员函数和属性:

构造函数

  • AlignMTB(): 默认构造函数。
  • AlignMTB(int max_bits, bool exclude_range, int cut): 带参数的构造函数,允许用户指定最大位数、是否排除中间亮度范围以及切割点。
    成员函数
  • void process(InputArrayOfArrays src_images, std::vector& dst_images, const std::vector& times, const Mat& response):
    处理输入的图像序列并生成对齐后的输出图像。此函数覆盖了基类中的虚函数。
    参数包括源图像序列、目标(对齐后)图像序列、每个图像的曝光时间列表以及相机响应函数。
  • void computeBitmaps(const Mat& img, Mat& tb, Mat& eb) const:
    计算给定图像的阈值位图(tb)和曝光位图(eb)。
  • void align(const std::vector& src_images, std::vector& dst_images, std::vector& shifts) const:
    对齐输入图像序列,并返回每张图像相对于第一张图像的位移。
  • void calculateShift(const Mat& img0, const Mat& img1, Point& shift):
    计算两张图像之间的位移。
  • void shiftMat(const Mat& src, Mat& dst, const Point& shift):
    根据给定的位移调整图像的位置。

属性

  • int max_bits_:用于计算MTB的最大位数,默认为6。
  • bool exclude_range_:是否排除中间亮度范围,默认为真。
  • int cut_:切割点,用于决定如何分割亮度范围,默认为0。

代码示例


#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/photo.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main()
{
    // 1. 读取不同曝光的图像序列
    vector< Mat > images;
    vector< String > img_paths = { "exposure1.jpg", "exposure2.jpg", "exposure3.jpg" };

    for ( const auto& path : img_paths )
    {
        Mat img = imread( path );
        if ( img.empty() )
        {
            cerr << "Error: 无法读取图像 " << path << endl;
            return -1;
        }
        images.push_back( img );
    }

    // 2. 创建 AlignMTB 对齐器‌:ml-citation{ref="1" data="citationList"}
    Ptr< AlignMTB > align = createAlignMTB();
    vector< Mat > aligned_images;

    // 3. 执行对齐操作‌:ml-citation{ref="1,3" data="citationList"}
    align->process( images, aligned_images );

    // 4. 显示原始图像和对齐结果‌:ml-citation{ref="2" data="citationList"}
    for ( size_t i = 0; i < images.size(); ++i )
    {
        imshow( "原始图像 " + to_string( i ), images[ i ] );
        imshow( "对齐结果 " + to_string( i ), aligned_images[ i ] );
    }

    waitKey( 0 );
    destroyAllWindows();
    return 0;
}

运行结果

感觉没啥变化呀
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure PR 9 中继器 03 翻页控制

大家好&#xff0c;我是大明同学。 接着上期的内容&#xff0c;这期内容&#xff0c;我们来了解一下Axure中继器图表翻页控制。 预览地址&#xff1a;https://pvie5g.axshare.com 翻页控制 1.打开上期RP 文件&#xff0c;在元件库中拖入一个矩形&#xff0c;宽值根据业务实际…

IO流(师从韩顺平)

文章目录 文件什么是文件文件流 常用的文件操作创建文件对象相关构造器和方法应用案例 获取文件的相关信息应用案例 目录的操作和文件删除应用案例 IO 流原理及流的分类Java IO 流原理IO流的分类 IO 流体系图-常用的类IO 流体系图&#xff08;重要&#xff01;&#xff01;&…

Spring Boot集成Jetty、Tomcat或Undertow及支持HTTP/2协议

目录 一、常用Web服务器 1、Tomcat 2、Jetty 3、Undertow 二、什么是HTTP/2协议 1、定义 2、特性 3、优点 4、与HTTP/1.1的区别 三、集成Web服务器并开启HTTP/2协议 1、生成证书 2、新建springboot项目 3、集成Web服务器 3.1 集成Tomcat 3.2 集成Jetty 3.3 集成…

《Python实战进阶》专栏 No 5:GraphQL vs RESTful API 对比与实现

《Python实战进阶》专栏包括68集&#xff0c;每一集聚焦一个中高级技术知识点&#xff0c;涵盖Python在Web开发、数据处理、自动化、机器学习、并发编程等领域的应用&#xff0c;系统梳理Python开发者的知识集。本集的主题为&#xff1a; No4 : GraphQL vs RESTful API 对比与实…

MYSQL 5.7数据库,关于1067报错 invalid default value for,解决方法!

???作者&#xff1a; 米罗学长 ???个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 ???各类成品java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot&#xff0c;mysql等项目&#xff0c;源码丰富&#xff0c;欢迎咨询。 ???…

【Linux基础】Linux下的C编程指南

目录 一、前言 二、Vim的使用 2.1 普通模式 2.2 插入模式 2.3 命令行模式 2.4 可视模式 三、GCC编译器 3.1 预处理阶段 3.2 编译阶段 3.3 汇编阶段 3.4 链接阶段 3.5 静态库和动态库 四、Gdb调试器 五、总结 一、前言 在Linux环境下使用C语言进行编程是一项基础且…

浅谈HTTP及HTTPS协议

1.什么是HTTP&#xff1f; HTTP全称是超文本传输协议&#xff0c;是一种基于TCP协议的应用非常广泛的应用层协议。 1.1常见应用场景 一.浏览器与服务器之间的交互。 二.手机和服务器之间通信。 三。多个服务器之间的通信。 2.HTTP请求详解 2.1请求报文格式 我们首先看一下…

Pytest自定义测试用例执行顺序

文章目录 1.前言2.pytest默认执行顺序3.pytest自定义执行顺序 1.前言 在pytest中&#xff0c;我们可能需要自定义测试用例的执行顺序&#xff0c;例如登陆前需要先注册&#xff0c;这个时候就需要先执行注册的测试用例再执行登录的测试用例。 本文主要讲解pytest的默认执行顺序…

人大金仓KCA | 用户与角色

人大金仓KCA | 用户与角色 一、知识预备1. 用户和角色 二、具体实施1. 用户管理-命令行1.1 创建和修改用户1.2 修改用户密码1.3 修改用户的并发连接数1.4 修改用户的密码有效期 2.用户管理-EasyKStudio2.1 创建和修改用户2.2 修改用户密码2.3 修改用户的并发连接数2.4 修改用户…

【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者数据湖&#xff0c;基本上绕不开一个架构“Medallion”&#xff0c; 它使得数据管理更为简单有效。ADB 通过…

智能证件照处理器(深度学习)

功能说明:支持常见证件照尺寸(一寸、二寸、护照等) 智能背景去除(使用深度学习模型)自定义背景颜色选择自动调整尺寸并保持比例实时预览处理效果注意:整合rembg进行抠图,使用Pillow处理图像缩放和背景替换,定义常见证件照尺寸,并提供用户交互选项。首次运行时会自动下…

C++-第十三章:红黑树

目录 第一节&#xff1a;红黑树的特征 第二节&#xff1a;实现思路 2-1.插入 2-1-1.unc为红 2-1-2.cur为par的左子树&#xff0c;且par为gra的左子树(cur在最左边) 2-1-2-1.unc不存在 2-1-2-2.unc为黑 2-1-3.cur为par的右子树&#xff0c;且par为gra的右子树(cur在最右侧) 2-…

推荐3个背景渐变色的wordpress主题

干净、清爽、背景渐变色的wordpress企业主题 ​ 服务类公司wordpress企业主题https://www.jianzhanpress.com/?p8255 红色大气的wordpress企业主题&#xff0c;适合服务行业的公司搭建企业官方网站使用。 ​ wordpress询盘型独立站主题https://www.jianzhanpress.com/?p8258…

Scrapy:隧道代理中移除 Proxy-Authorization 的原理解析

隧道代理中移除 Proxy-Authorization 的原理解析 背景 在 Scrapy 的 HTTP 下载处理中&#xff0c;当使用隧道代理&#xff08;TunnelingAgent&#xff09;时&#xff0c;会移除请求头中的 Proxy-Authorization。这个操作看似简单&#xff0c;但背后有着重要的安全考虑和技术原…

微信小程序-二维码绘制

wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…

Fiddler 的安装与使用

目录 1、Fiddler 的安装2、Fiddler 的使用 1、Fiddler 的安装 通过Fiddler 官网进行下载&#xff08;下载免费的经典版本&#xff09;&#xff0c;填写用途、邮箱、国家信息即可开始下载。 Fiddler 官网下载链接 双击安装包即可进行安装&#xff0c;显示以下界面说明安装成功。…

Hadoop架构详解

Hadoop 是一个开源的分布式计算系统&#xff0c;用于存储和处理大规模数据集。Hadoop 主要由HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce、Yarn&#xff08;Jobtracker&#xff0c;TaskTracker&#xff09;三大核心组件组成。其中HDFS是分布式文件…

清华大学DeepSeek文档下载,清华大学deepseek下载(完成版下载)

文章目录 前言一、清华大学DeepSeek使用手册下载二、清华大学DeepSeek使用手册思维导图 前言 这是一篇关于清华大学deepseek使用手册pdf的介绍性文章&#xff0c;主要介绍了DeepSeek的定义、功能、使用方法以及如何通过提示语设计优化AI性能。以下是对这些核心内容的简要概述&…

Hadoop第2课(伪分布式集群的搭建)

jdk和hadoop安装包&#xff1a; hadoop-2.9.2.t......等2个文件官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 1、用XFTP发送hadoop安装包和jdk到/home/hadoop/目录下&#xff08;hadoop用户的主目录&#xff09; 2、解压jdk安装包到~目录 卸载jdk的命令&#xff1a;r…

使用Crawlee可破题js渲染采集数据

使用 Crawlee 实现自动化爬虫流程 1. Crawlee 简介 Crawlee 是一个强大的爬虫框架&#xff0c;用于快速构建和维护可靠的爬虫。它支持多种爬虫类型&#xff0c;包括基于 Cheerio 和 Playwright 的爬虫&#xff0c;能够高效处理静态和动态网页。 2. 项目目标 通过自动化脚本实…