给定具有不同曝光剂量的N个x射线图像,我必须将它们组合成单个的,其浓缩来自N个源图像的信息。如果我的研究是正确的,那么这个问题就属于HDRI导管。
我的第一种方法是加权平均值。对于初学者,我只使用两帧。
让A
成为第一张图像,即曝光率最低的图像,因此设置为更重要以突出细节。让B
成为第二个曝光过度的图像,C
生成的图像和M
最大可能的像素值。因此,对于每个像素i
:
w [i] = A [i] / M
C = w [i] * A [i] +(1 - w [i])B [i]
应用这个想法的一个例子:
注意结果(第三张图像)如何很好地捕获两个源图像中的信息。
问题是第二张图像在物体边缘周围有不连续性(这在过度曝光的图像中是不可避免的),并且继续进行结果。仔细看......
最好的HDR软件似乎是Photomatix,所以我愚弄了它,无论我如何调整它,不连续性总是出现在结果中。
我认为我应该以某种方式忽略第二张图像的边缘,但我必须以“平滑的方式”进行。我尝试使用一个简单的阈值,但结果看起来更糟。
你有什么建议? (只欢迎开源图书馆)
答案 0 :(得分:1)
这里的问题是每个图像都有不同的曝光剂量。任何HDR算法都必须考虑到这一点。
我问过创建X射线图像的人,第二张图像的曝光剂量大约是第一张图像的曝光剂量的4.2
倍。我向Photomatix提供了错误的EV值,因为我不知道EV是以停止表示的,1停止意味着两倍的参考值。因此,将0 EV
分配给第一个图像并将+2.1 EV
分配给第二个图像,不连续性已经消失,保留所有信息。
接下来的问题是我不知道Photomatix是如何做到这一点的。所以我尝试使用Luminance HDR, aka qtpfsgui做同样的事情,这是开源的。
总而言之,必须将曝光的包围曝光的图像馈送到HDR压缩算法,该算法创建HDR图像。基本上,这是一个包含所有图像信息的浮点图像。有很多算法可以做到这一点。 Luminance HDR称之为 HDR创建模型,并提供其中两个:Debevec和Robertson。
然而,HDR图像不能直接显示在传统显示器(即监视器)上。所以我们需要将它转换为“普通”(LDR)图像,同时保留尽可能多的颜色信息。这被称为tone-mapping,并且还有各种可用的算法; Luminance称这些 Tonemap运算符并提供几个。它还选择最合适的一个。 Pattanaik操作员非常适合这些图像。
所以现在我正在阅读Luminance的代码,以便了解它并制作我自己的实现。