python - 两个稀疏数据集的插值结果(图像匹配)
问题描述
我有两组来自两个不同相机系统 A 和 B 的颜色图表的曝光包围图像。每个数据集在给定的曝光下,从颜色图表上的补丁中为我提供 24 个 RGB 元组。
我想通过这两个数据集的插值通过 3 维变换将相机 B 与相机 A 匹配。这基本上是创建查找表的过程。对现有图像进行解析和应用 LUT 的方法有很好的记录,但我找不到关于如何在给定两个不同数据集的情况下分析创建 LUT 的良好资源。我知道答案涉及通过稀疏数据集进行插值,并且可能涉及三线性插值之类的东西,但我不确定实际执行情况。
例如,以三线性插值为例,它需要 8 个角,但是在将图像 A 与图像 B 匹配的情况下,这 8 个角由什么组成?在所有维度上最接近给定像素的命中?在无序数据集中搜索接近值似乎代价高昂且不正确。
总的来说,我正在寻找一些关于如何将两个图像与我获得的数据集进行匹配的建议,特别是 3d 转换。首选工具是 Python,但它可以是任何非专有工具。
解决方案
首先,您需要建立对应关系,即关联两个图像中相同颜色的补丁(对此有很多话要说,但不在此答案的范围内)。并获得 RGB 颜色值(最好通过对补丁进行平均以减少随机波动)。
现在你有一组 N 对 RGB 三元组,你想拟合一个数学模型,
RGB' = f(RGB)
(f
是向量参数的向量函数)。
首先,您应该尝试仿射模型,
RGB' = A RGB + RGB0
其中A
是一个 3x3 矩阵和RGB0
一个常数向量。请注意,在仿射情况下,方程是独立的,例如
R' = Ar RGB + R0
G' = Ag RGB + G0
B' = Ab RGB + B0
其中Ar
, Ag
,Ab
是向量。
有十二个未知系数,所以你需要N≥4
。如果N>4
,您可以诉诸最小二乘拟合,在线性情况下也很容易。
如果仿射模型不足,您可以尝试使用多项式模型,例如二次模型(需要N≥10
)。
推荐阅读
- java - 在表格列表视图中添加标题
- c# - C# 自动初始化变量?
- docker - 将 Go-Micro 与 docker-compose 一起使用时出错
- swift - 我可以将 ~/Library/Developer 移动到外部驱动器吗?
- react-native - 在 Web 上的 React Native 中单击时文本输入周围的边框
- java - 使用 OAuth2 的 API 网关的客户端凭据
- flutter - 如何在所有页面中显示当前播放的视频,例如 udemy in flutter?
- reactjs - 使用 dockerised 前端和 dockerise 后端图像部署应用程序
- android - 在 .gradlew 命令行构建中找不到 dokka?
- time-complexity - 对于代码中的多个参数,O(M+N) 比 O(2N) 更正确的混淆