前几期真相文章得到了读者积极的反馈,其中提问最多的就是这个公式:

首先,大家觉得这个公式太有用了。以前只能定性地评价图像质量,现在一下子就能直接算出信噪比,瞬间高大上了许多有木有。然而,杯具的现实是,95%的人都找不到相机的出厂报告,也就是说并不知道自己相机的 Gain 是多少。不知道 Gain, 那这个公式岂不就成了浮云啊!

别急,本期我们就来披露分钟测算相机增益的秘笈,大家准备好打赏哈!

01公式推导

哈哈,公式是烦人的,但也是必须的。

我们知道,当相机工作在光子散粒噪声(Shot Noise)限制区时:

相机拍到的图像,亮度是以灰度值(ADU)为单位的, 我们可以用图像分析软件(如我们用过的 Image J)计算出感兴趣区 (ROI) 的平均灰度值 Mean-ADU 和标准差 SD-ADU (即以 ADU 为单位的噪声)。

以上公式①变为:

这样,我们就可以计算出:

以上计算中,图像的标准差即代表噪声的前提是,图像区域内没有任何样品结构造成的亮度变化,否则标准差还包含这个结构信息。为此,我们可以连续拍摄两张同样场景的图像,然后把两张图像相减。相减后的图像就只包含光子散粒噪声了。如果以 SD-subtract 代表差值图像的标准差SD-image1和SD-image2代表单张图像的标准差,则以下公式成立:

因为两张图像设置完全相同,SD-image1 = SD-image2,所以:

那么,以上公式最后变为:

这样算出的 Gain 单位为 e–/ADU。

02拍摄图像

太好了,公式终于结束了。现在就来拍摄图像,通过公式⑤,我们知道只需要拍摄3张图像,就可以计算出 Gain 了。

好的,两分钟计时开始哦~

01

拍摄一张短曝光时间的黑图像 (bias 图像) 以计算offset:我们知道,对同一台相机,偏置(offset)是一个常数。方法很简单,在相机完全无信号的情况下,(如显微镜设为全部光都到目镜,或者盖上镜头盖),将曝光时间设为0, 拍摄一帧图像。

02

拍摄两张平均亮度大概在相机动态范围中间区域的图像。如果您的相机是12bit的,有4096 灰度级,那么图像的平均亮度最好在 2000 左右。这个可以通过调整曝光时间,或照明光强度来实现。当然,其实要求并不那么严格,基本要求是图像上不能有接近饱和(>4000 ADU, 此时相机失去了线性度),或太暗( <200ADU, 此时相机没有工作在光子信号限制区, 我们计算的条件不满足)的区域。如果您的相机是 14bit 的,那么灰度级是16384, 上面的值需要按比例进行调整。

03计 算

1. 首先在 Image J 中打开 bias 图像,用 Analyze>measure, 得到图像的 mean 值即为 Offset。

2. 接下来,打开另外两张图片,选择 Analyze > Measure 得到两张图片的平均灰度值;然后再用 Analyze > Summarize 就可以得到平均值 Mean-Image1, Image2

3. 计算差异图像的标准差:选择 Analyze > Image Calculator,将两张图片进行 subtract,并勾选 32-bit (float) result,得到两张图片的差值图像。

选择 Analyze > Measure 即可看到差值图像的标准差 SD-substarct:

4. 然后代入前面的公式⑤,我们就可以算出系统增益啦!(表忘了减去偏置值哦~)

以上就是两分钟快速计算相机增益的方法啦!希望对大家有所帮助。另外我们总结了一些关于 Gain 的事实。

计时结束,完美!第一次可能慢一些,第二次做应该两分钟都不用吧!

  • CCD/CMOS 相机的 Gain 是出厂设置好的,不会改变;

  • EMCCD 的 EM Gain 会随着使用老化衰减,正常使用 7~10 年左右;我们推荐每隔一段时间校准一次;

  • 根据厂家不同,Gain 有多种表示方式:有些相机只有一个 Gain ,有些有三个 Gain ,有些连续可调(如 0.5x-20x), 或 ISO100 – ISO1200 等等。以上测试,只对应当时设定的那个 Gain 有效;如果实际使用时,因为样品或成像方式变化,需要改变 Gain 的设置,对每个 Gain 都需要测量。建议在保存图像时,在文件名上反映出 Gain 的设置;

  • 同一台相机,Gain 的倍数越大,相机的满阱容量越小(更早饱和);

  • 同一台相机,在软件中调节 Gain 的设置,图像亮度会变化,但实际探测到的电子数不变,因此信噪比变化不大;

  • Binning 不影响 Gain;

  • 行行好,把测算出的 Gain 值记在小纸片上贴起来供大家使用吧!

做成像的你不能不了解的真相7-两分钟测算相机增益(Gain)的更多相关文章

  1. 做成像的你不得不了解的真相2-灵敏度和QE

    科研级相机的灵敏度由三个主要参数决定: 探测器的QE, 像元尺寸和相机噪声. 后两项我们以后再做专题讨论.这期先讲讲小编认为顶顶重要,看起来最容易理解,但是其实还有些奥妙的QE. QE-量子效率 QE ...

  2. 【ABAP系列】SAP ABAP 模拟做成像windows一样的计算器

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP 模拟做成像wind ...

  3. Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)

    版本: 2012-09-29 2013-04-23 更新有关accept()和ignore()函数的相关内容. 2013-12-02 增加有关accept()和ignore()函数的示例. 上一章我们 ...

  4. 半天做完的数据报表,YonBuilder只要十几分钟,0代码开发

    进入数字化时代,拍脑袋的决策方式显然不靠谱,一切要靠数据说话.与信息化时代相比,数字化时代的企业对数据的应用更广泛.更深入.为了应对激烈的市场竞争,企业经营决策者们对数据的依赖度越来越高,企业各个业务 ...

  5. 做了一个js的拉动遮罩层,两个图片分别显示的效果

    想做成车修好了和没修好的对比,所以需要两个图片.需要用到的知识点, 1.定位 2.mouse 的事件(代码中体现) 3.鼠标指针的移动距离算法 4.css中,cursor的应用 好了,废话不多说 ,直 ...

  6. VWAP算法(成交量加权平均价)

    算法交易其实主要是用在基金公司.券商量化比较多.例如我已经选好股,要大量买入,但是单凭交易员的操作海量单而且要完成买入100万股这些的操作是有点的困难的.那么这时候怎样解决拆单,防止冲击成本的问题呢? ...

  7. time wait 整理

    目录 状态转换图 1.谁会进入time wait状态: 主动发起断开连接的一方调用close()函数发送FIN并进入FIN WAIT 1状态,当收到对面反馈的ack之后会进入FIN WAIT2状态.之 ...

  8. OpenGL中glRotatef()函数究竟对矩阵做了什么

    OpenGL中glRotatef()函数究竟对矩阵做了什么 我们知道OpenGL中维持着两套矩阵,一个是模型视图矩阵(model view matrix),另一个是投影矩阵(projection ma ...

  9. wpf做的3d滑动gallery

    原文:wpf做的3d滑动gallery wpf做的3d滑动gallery 随着iphone\ipad的流行及热捧,现在做移动产品不管是什么平台的,领导总想做成像ios系统的样子.自从微软发布了wind ...

随机推荐

  1. Tensorflow学习教程------过拟合

    Tensorflow学习教程------过拟合   回归:过拟合情况 / 分类过拟合 防止过拟合的方法有三种: 1 增加数据集 2 添加正则项 3 Dropout,意思就是训练的时候隐层神经元每次随机 ...

  2. 10. react 基础 ref 的使用 及 React 16 的生命周期函数 及 生命周期函数使用场景

    一. ref 的使用 ( 直接获取 DOM 元素 ) 在 input 标签上 可以使用 ref 属性 获取当前DOM节点 eg: import React , { Component, Fragmen ...

  3. git push的时候.gitignore不起作用的解决方法

    问题的原因 这是因为在你添加.gitignore之前已经进行过push操作,有些文件已经纳入版本管理了. 解决方法 我们就应该先把本地缓存删除,然后再进行git的push,这样就不会出现忽略的文件了. ...

  4. 阿里巴巴的26款Java开源项目,赶紧戳…

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  5. mysql float 这个大坑

    以后高精度的数据不要用这个字段  今天同事反应 应该是17390.7的数据 结果展示17390.6992  找了半天问题在哪 后来决定先不管  手动现在数据库改数据 结果手动改也改不过来  于是能确定 ...

  6. re模块2

    # 元字符+,*遇到?后就会变为贪婪匹配 print(re.findall('abc+?','abcccccc')) #['abc'] print(re.findall('abc*?','abcccc ...

  7. 5)添加一个tab

    1)还是按照(4)的代码:2) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ ...

  8. vi粘贴代码后格式混乱的问题

    最近在远程终端使用vi发现从其他地方复制代码的后,粘贴到vi里面出现格式变乱的问题. 主要是因为终端通常无法区分输入是来自用户输入还是来自粘贴,所以终端也不能通知 vim 输入来自何处.在 vim 里 ...

  9. UML-架构分析-架构原则

    1.高内聚 2.低耦合 3.防止变异(间接性等) 4.关注点分离 方法1: 事物模块化,封装到单独的子系统中 方法2: 装饰者模式 方法3: 面向方面(AOP)

  10. JS获取当前时间往后一天的时间

    (图片来自W3school) let myDate = new Date(); myDate.setDate(myDate.getDate() + 1); let year = myDate.getF ...