将8位图像增强到16位

时间:2014-05-14 14:54:03

标签: matlab image-processing

我的目标是将8位图像增强到16位图像。换句话说,我想增加8位图像的动态范围。为此,我可以按固定场景和固定摄像头顺序拍摄8位的多个图像。为简化问题,我们假设它们是灰度图像

直觉上,我认为我可以通过

实现目标
  1. 将两个8位图像相乘

    resimage = double(img1) .* double(img2)

  2. 平均指定数量的8位图像

    resImage = mean(images,3)

  3. 假设images(:,:,i)包含i 8位图像。

    之后,我可以将结果图像设为16位。

    resImage = uint16(resImage)
    

    但在测试这些方法之前,我想知道还有另一种方法可以做到这一点 - 除了购买16位相机,或者这个主题的文献可能会更好。

    更新:正如下面的评论显示的那样,我获得了关于上面和图像堆栈上的简单平均的缺点的很好的信息,用于增强。毕竟,这可能是一个很好的研究课题。感谢大家的好评。

2 个答案:

答案 0 :(得分:3)

这个问题似乎与通过将来自多个8位曝光的信息整合到16位图像中来增加图像的动态范围有关。这与在其他领域中捕获和组合天文成像中的“图像堆栈”的实践有关。这里可以解释这种做法以及如何降低图像噪声和增强动态范围:

http://keithwiley.com/astroPhotography/imageStacking.shtml

这个想法是相同场景的连续捕获受到图像噪声的影响,并且这种噪声导致所捕获的像素值的随机变化。在最简单的情况下,这些变化可以通过求和和分频来利用,即均值平均叠加以改善其动态范围,但实用性在很大程度上取决于相机的噪声特性。

答案 1 :(得分:2)

假设没有抖动且相机稳定,您希望将多个图像相加在一起。累积一大笔金额然后除以一定金额。

请注意,要从8位源获取合理的16位图像,您需要拍摄数百张图像才能获得任何合理的结果。请注意,抖动会使边缘信息失真,并且摄像机存在一些固有的噪声级别,这可能意味着您基本上是“磨削金属”。实际上,您可能会从图像求和中获得2或3位数据,但不会再获得8位数据。要获得3位以上将需要至少64个图像(6位)来求和。然后除以8(3位),因为低位是垃圾。

经验法则是得到一个新的数据位,你需要平方(位)的图像,所以3位(8)意味着64个图像,4位是256个图像等。

这是一个关于抽样的链接:

http://electronicdesign.com/analog/understand-tradeoffs-increasing-resolution-averaging

“事实上,可以证明这种改善与平均样本数量的平方根成正比。”

请注意,SNR是对数刻度,因此将其与位等同是合理的。