1

大家早上好!我在 Blender 中创建了一个物理上精确的场景,我的目标是使用 python 研究渲染场景的辐射条件,以获得 [W/m^2] 方面的照明图。由于其高动态范围属性,我以 OpenEXR 文件格式保存图像,并且我想从“R”“G”“B”通道中的 RGB 值开始获得相对亮度图。主要问题是如何缩放来自 OpenEXR 通道的线性值以在 [0, 1] 之间获得物理上准确的值,这需要获得保持文件格式的 HDR 属性的相对亮度贴图。下面报告部分代码。

    pt = Imath.PixelType(Imath.PixelType.FLOAT)
    exrfile = exr.InputFile(filename)
    dw = exrfile.header()['dataWindow']
    size = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
    redstr = exrfile.channel('R', pt)
    red = np.fromstring(redstr, dtype = np.float32)
    red.shape = (size[1], size[0]) # Numpy arrays are (row, col)

    greenstr = exrfile.channel('G', pt)
    green = np.fromstring(greenstr, dtype = np.float32)
    green.shape = (size[1], size[0]) # Numpy arrays are (row, col)

    bluestr = exrfile.channel('B', pt)
    blue = np.fromstring(bluestr, dtype = np.float32)
    blue.shape = (size[1], size[0]) # Numpy arrays are (row, col)


    rel_luminance = 0.2126*red[:,:]+0.7152*green[:,:]+0.0722*blue[:,:] 

对于一张测试图像,得到的三个通道的最大值分别为:

最大(R) = 198.16421508789062

最大(G)= 173.5792999267578

最大(B)= 163.20120239257812

获得的值显然不在 [0, 1] 之间的范围内,而且我无法理解全局最大值来缩放通道并获得我想要的。

有人有一些提示可以解决我的问题吗?谢谢指教。

4

0 回答 0