如何计算动态范围的信噪比?

2024-05-20 10:59:42 发布

您现在位置:Python中文网/ 问答频道 /正文

说到编码,我是一个绝对的初学者,所以我真的不知道该怎么做。我知道以前有人问过这个问题,但我查过之后就想不出来了。我希望有人能帮助我。现在我的最终目标是找出arri amira实际使用的动态范围。这是我们大学项目的一部分。(规格说明为14+)我拍摄的镜头范围为0,5到22个f-stops。我还有一张镜头盖开着的照片(暗框,不是100%黑色,因为有噪音)。所有帧都保存为TIFF(这是我们项目中的一个要求)。现在我首先要计算暗帧的p(噪声),对吗?信噪比=P(信号)/P(噪声)。然后将该值用作其他图像的p(噪波)

我也不知道如何计算p(噪声)。我的想法是将暗帧图像与实际上完全黑色的暗帧进行比较。也许是一个充满零的数组?我找到了包含mse值计算的代码。这符合我的想法吗? 我尝试的是:

realDarkframe= np.zeros( (1080,1920,3) )
darkframeOfAmira= cv2.imread("image.tif",1)
def snr(img1, img2):
    mse = np.mean( (img1 - img2) ** 2)
    return mse

d=snr(realDarkframe,darkframeOfAmira)
print(d)

返回565.7092896412037的值。现在我不知道那是什么意思。我也不知道如何计算p(信号),即使这是正确的,数字565.7092896412037实际上等于p(噪声)


Tags: 项目图像编码信号np噪声镜头img1
1条回答
网友
1楼 · 发布于 2024-05-20 10:59:42

测量装置(即照相机)的动态范围描述了最大和最小可测量光强度之间的比率。关于这一点,在您的实现中出现了两个问题

  1. 确定动态范围下限的暗帧图像不应为纯零。这意味着一个无限的动态范围(在SNR公式中除以零)。相反,你需要像你建议的那样捕捉一个黑暗的镜头

"I also have a shot with the lens cap on (darkframe, which is not 100% black, because there is noise)."

并将此图像用作参考。您还需要以最大强度拍摄图像(总白色-“烧焦”)

  1. 码段中的信噪比计算公式为均方误差。您应该使用wikipediasnr=P(信号)/P(噪声)=平均值(信号^2)/mean(噪声^2)中描述的公式

此代码应适用于:

darkframeOfAmira = cv2.imread("dark_image.tif",1)
brightframeOfAmira= cv2.imread("image.tif",1)
def snr(img1, img2):
    return np.mean(img1 ** 2) / (np.mean(img2 ** 2) + 1e-12)

d=snr(brightframeOfAmira,darkframeOfAmira)
print(d)

相关问题 更多 >