Dubois 浮雕矩阵是如何计算的?

问题描述

我已阅读 Eric dubois https://www.site.uottawa.ca/~edubois/icassp01/anaglyphdubois.pdf 的论文,但不明白如何为特定的一对彩色滤光片和显示设备计算两个 3 x 3 矩阵。 dubois 在 https://www.site.uottawa.ca/~edubois/anaglyph/LeastSquaresHowToPhotoshop.pdf 提供了专为红色/青色眼镜和 CRT/等离子显示器设计的矩阵。

最令人费解的是论文中说“近似是在每个 样本位置”,这意味着计算依赖于图像,而矩阵显示为适用于任何图像。

解决方法

Sanders 和 McAllister 在 https://www.researchgate.net/publication/2852372_Producing_Anaglyphs_from_Synthetic_Images 清楚地解释了计算。 (他们创建了一个 6 x 3 矩阵,而不是两个 3 x 3 矩阵。) 我用这个 Python 脚本复制了他们的矩阵 B:-

import numpy as np
AL = np.array([[5.42327,.807004,.047325],# Left anaglyph filter
               [2.70972,.50201,.0250529],[.0000550941,.000411221,.00240686]])
AR = np.array([[.180431,1.6395,2.00309],# Right anaglyph filter
               [.448214,6.31551,1.35757],[.289201,2.3925,11.062]])
R = np.concatenate((AL,AR))
C = np.array([[11.6638,8.3959,4.65843],# CRT spectral distribution
              [7.10807,16.6845,2.45008],[.527874,3.79124,24.0604]])
Z = np.array([[0,0],[0,0]])
D = np.concatenate((np.concatenate((C,Z),1),np.concatenate((Z,C),1)))
B = np.dot(np.dot(np.linalg.inv(np.dot(R.transpose(),R)),R.transpose()),D)
N = np.diagflat([1 / sum(B[0]),1 / sum(B[1]),1 / sum(B[2])])
print(np.dot(N,B))

[[ 0.45610004  0.50048381  0.17638087 -0.0434706  -0.08793882 -0.00155529]
 [-0.04008216 -0.03782458 -0.01575895  0.37847603  0.73363998 -0.01845032]
 [-0.01521607 -0.02059714 -0.00546856 -0.07215268 -0.11296065  1.2263951 ]]