简单说快门和闪光

本文所有图片均取自网络,感谢原作者奉献,如有不妥可联系我。

摄影中快门,光圈是最常关注的两个参数,也从一定方面反映出相机的性能。(构图之类完全是靠机身后面的头),对于具体的感光记录原理等这里不再赘述。

首先必须科普一下

1.“快门”是一个机械结构,而不是相机上那个按钮,那个按钮可以叫“快门释放按钮”,或者“快门按钮”,传统上快门是由外力控制保持关闭的,去掉外力(也就是“释放”)后就执行一次打开操作。

2.快门工作原理

由于光圈式快门基本绝迹(就是iphone拍照时“菊花一紧”的那个动画效果),这里就不说了。

一张图就说明清楚了,电子快门和帘幕式快门基本都是这个原理,假设感光元件是胶片(随时都可以好进行曝光的状态,电子快门和机械快门+CMOS最终效果和此图相同),通过快门控制,图中白色部分就是实际曝光区域。

(可以看出高速快门所记录的图像并不是“同一时刻”的,可以参考知乎此贴,有一个有趣的扭曲现象,http://www.zhihu.com/question/20899357

3.闪光的效果

闪光的目的是让一定范围内(万元的闪光可以甚至可以点亮整个体育馆)的被摄物体在极短时间(通常要关注闪光时,闪光时间总是比快门速度快很多的)内有很高的亮度

好了,下面入正题,介绍一下低速曝光时的问题

通常低速快门意味着环境亮度较差,此时要关注的问题就是曝光量和相机抖动(光线好的时候基本没这些问题),这里只关注曝光量,抖动忽略(抖动必糊片)

1.前帘同步(通常是低速曝光时的默认状态,常称为低速同步,慢速同步):快门刚释放时就闪光

特点:被摄物体在快门释放时亮度最高(曝光最足)

2.后帘同步:快门快关闭时才闪光

特点:被摄物体在宽门关闭时亮度最高

应用:

a)拍摄运动物体

这张图就能说明的问题。

前帘同步时最初的影像是最清晰的,之后的影像渐渐模糊(龙珠里goku等瞬间消失就是这个效果)

后帘同步时最初的影像是模糊的,之后的影像是清晰的,形成拖影(还是龙珠,突然出现或者高速移动时背后的拖影就是这个效果)
PS1:在光线充足时若进行低速曝光,假设不过曝,基本就是后帘同步的效果。
如此图是我本人拍摄的,红灯前半段区域,最前面的车是静止的,自然没有拖影,后面的车在减速,有拖影,最后那辆车的红灯直接拉成一条线了

PS2:运动对象清晰,其余模糊的这种效果是通过相机同步移动形成的(相对线速度为0),如下图

b)拍摄静止物体

前帘同步和后帘同步的结果是相同的,因为人物没有动,曝光信息都在同一处堆积。

此时要关注的是闪光亮度,因为所有光子都在同一处堆积,如果闪的太亮,就可能直接把人物拍的亮的不正常(主要是色温不同)。

如下图:
第一个是高速快门,背景曝光不足。
第二个低速快门,背景曝光充足(但人和背景色温明显不同)。



如下图
第一个:背景曝光不足。
第二个:三脚架,无闪光,曝光充足,色温相同(可通过非常弱的闪光补光,人脸会更亮,且更自然些)

Read more

Coroutine

从一般概念上说, 协程是特殊的函数调用: 被调用的函数可以在可控的位置被中断,然后在下一次调用时,继续从上次中断的位置继续执行。 本文主要通过Python的协程来介绍协程, 这是我唯一熟悉的一种协程实现. Classic Coroutine 下面的python代码很好的说明了协程的核心功能 def co_routine(): recv0 = yield 996 # hangs here after first coro.send assert recv0 == "Second" yield 711 # hangs here after second coro.send return def main(): coro = co_routine() # Create a new coroutine object value = coro.send(None)

By Edimetia3D

GDB with Python

这篇文章的主要应用场景是调试Python的C/C++ Extension 1. 同时使用pdb / gdb 进行调试. 通俗点说, 既可以break在 .py 文件中,也可以break在 .cc 文件中 2. 在gdb中不但可以获得常规的调试信息, 还可以获得python VM 的调试信息, 例如获得python的调用栈, 访问Python局部变量等. 这将会在调试exception时(如Segmentfalut)非常有用, 这种场景下, 定位 Python VM 正运行到哪一行代码往往可以提供一些直观的重要信息. 第一步: 编译源码以获得一些辅助数据. 我们并不真的需要使用从源码编译的Python, 但是一些调试相关的辅助文件需要从源码中获得, 包括 python-gdb.py及debug symbol等. 在 https://www.python.org/ftp/python/ 或 https://github.com/python/cpython

By Edimetia3D

Bazel Notes

这是一篇2019年左右的记录, 内容可能过时, 也不太全面 杂谈 Bazel是Google为Monorepo服务而开发的构建工具. 首先是巨大,当问题的规模变大,事情总是会变得更复杂. 而Google面对的"巨大Monorepo",应该是世间罕有的. 然后是Monorepo,这极大的影响了代码的组织风格.例如,你要写一个操作系统内核ProjectOS,还要写一个游戏ProjectGame.在传统的开发习惯中,这两个项目会组织到两个不同的Repo里,PorjectOS和ProjectGame之间无法直接相互引用,例如,你在ProjectOS里写了一个高级的数据结构,想要在Game里也使用,要么直接复制粘贴,要么是创建一个新的CommonRepo,把可公用的代码都放在Common里,然后两个项目各自引入Common作为依赖. 使用MonoRepo则不存在这个问题,Game可以直接依赖OS内的组件,按照Bazel的语法描述,就是在Game中可以直接使用@ProjectOS//path/to/package:AdvancedStruct.当然,你仍然可以选择重构一

By Edimetia3D

Unix related things

这是一篇2017年左右的记录, 仅用作分享 杂 * 在shell内能干的事,我们都可以比较简单地通过系统调用实现. * `称为反引号,^称为脱字符,常用来表示CTRL * windows的系统调用是不开放的,windows下只能直接使用windows.h里的windows API. * /dev目录下的设备是供用于程序直接使用的,主要由block,char,pipe,socket类型 * 并不是所有设备都能映射为这种形式 * /sys/device/目录称为sysfs,他下面存放了所有设备的信息.(不能直接从/dev获得任何设备信息) * udevadm info --query=all --name="/dev/sda1"可以用于查询/dev下某个设备对应的sysfs路径 权限系统 * 权限系统由两部分组成 * 文件属性:用于标注文件owner,所属组,以及权限的设定(默认只有owner和root可以修改权限设置) *

By Edimetia3D