从图片估计焦距

我们希望给定一张照片,通过 vision 的算法估计焦距。输入图片 + 用户指定 sensor 大小(默认 36mmx24mm),输出为拍摄使用的镜头焦距。

感觉这是一个可能能够使用 machine learning 来求解的问题,大量的互联网照片是存在 EXIF 信息的,我们能够抽取一些基本的信息作为 training label。同时我们需要做不少 data cleaning 的事情,比如避免 crop/pano 相片导致错误的 label。当然这个方法也存在一个问题,厂商标注的焦距并不完全诚实,他们或多或少存在误差,然后对焦位置的不同会导致焦距并不与标称吻合(所谓的 focus breathing),比较著名的例子莫过于佳能和尼康各自的 70-200mm/2.8 这个专业性非常强的镜头了,后者在 200mm 端拍摄近处物体的时候很多人发现焦距其实不到 150mm,这样一来会给我们的 label 带来很大的问题。

剩下的问题大概就是如何获得 feature 了,这个感觉和 perspective 有一定的关系,人在判断的时候会根据物体的相对大小来做判断,但是这也意味着需要很多的先验知识,而程序很显然不具备这些知识。不知道通过一个 learning system 是否能够让它获得这些知识。

应用嘛,我发现对转接镜头或者一些没有电子接口的镜头可以提供自动的焦端估计,然后在图片处理程序(如 LR、PS)里面就可以自动的标识信息,如果准确率高的话就能自动的提供 lens profile matching。

当然,这个问题延伸一下是甚至判断镜头的型号,通过镜头产生的 aberration、distortion 和 bokeh 来反向判断镜头的厂商、型号什么的。这个可以作为老婆专业对口的面试题了,哇哈哈

Advertisements
从图片估计焦距

costco 照片打印攻略

costco 是美国批发商,不少商品据说比其他地方便宜。起初只是想见识一下 D800 输出到底如何,于是在网上搜索冲印店,似乎大家对 snapfish 评论不错,6″ 输出的价格也还好,可是更大尺寸的价格就比较邪恶了,碰巧碰到了这么个对比评测,Sam’s club 和 costco 在更大尺寸的输出上价格优势更加明显,不过这两位都是需要会员卡的,加上年费之后要看每年打印多少你可能才晓得你是否能把年费赚回来:不过看 12×18″ 打印价格,似乎能便宜一半以上,也就是说一张可以便宜 3-4$,costco 会员费用为 55$,所以如果你一年输出 20 张以上的话就能赚回来,同时加上别的商品购买着实也比别处便宜,感觉这个会员不是太亏。

costco 输出照片可以在网上提交,流程挺容易:上传,然后 order,之后选择输出尺寸和介质(如光面还是毛面),提交了之后隔一个小时就能取或者要求寄送。Seattle 南面有个 costco warehouse 过去挺方便,131/132 两班车加起来差不多 15min 一班,对我来说几乎是从门口到门口。完全可以随时提交到了周末顺便拿个照片,买点吃的东西。

下面该说如何打印自己的照片了。走到打印这个流程,其实本身已经是走过好几个“中间”步骤,每个步骤都有可能造成信息的不准确,这导致最终打印结果和现场差异挺大,其中最关键的一个无外乎色彩管理:

  • 相机捕获现场光线记录的信息颜色可能是不准确的
  • 在屏幕上编辑照片,看到的颜色与实际的颜色也是有差别的
  • 打印机接受的文件与屏幕上看到的颜色也是可能有差别的

前面的讨论我们知道,如果将颜色在专属的“绝对空间”里面表示(如 CIE 1931 色彩空间),不同设备之间的差异就可以有效的判断出来并加以“纠正”。下面是一些常用的技术:

  • 为了让相机记录的色彩能够更加精确的映射到标准空间,通常使用色卡(比如 X-rite 的 colorchecker passport),因为这个颜色在生产的时候要求准确度非常高,它可以作为一个参照物,这样通过软件我们可以自动的检测到照片中含有该 check board 的区域,对应的 RGB 值经过和标准值进行转换(或者根据当前光照和标准值进行比对获得一个相机的 profile)就可以得到较为准确的颜色
  • 屏幕的矫正通常需要一个专门的角色设备(如 Spyder 或者 X-rite 的相关产品),这部分在这篇 blog 里面已经涉及,不再赘述,通过这一步可以解决编辑照片时颜色的偏差
  • 最后打印的颜色同样需要一个专门的设备来为不同的打印机构造对应的 ICC profile,这方面没有啥经验,毕竟太专业的打印机和耗材不是非专业的 studio 能够支付得起的

通常我们使用 LR 之类的编辑软件,他们带有一个所谓的 Adobe standard profile,这是 Adobe 为不同相机型号制作的“通用” profile,据说原理差不多就是在两个极端场景下进行测量,中间进行插值,好处是这样能够提供近似的色彩,但是如果你更加 picky(根据场景,你自己的相机而不是你这一类某个别的相机),可能就不能满足你的需要了。因此严肃的颜色管理往往都从这一步开始。

使用公用的照片输出服务的时候,打印机并不在自己的控制内,所以想在这一步得到理想的输出的话,势必需要对应打印机的 ICC profile。costco 自己并未提供这方面的信息,但是他们委托这个网站制作了大部分打印设备的 ICC profile,你可以根据自己 warehouse 的位置找到对应的 printer,然后下载这个 profile,比如我喜欢毛面输出的效果,就选择了这个 profile。之后你需要做两件事情,然后再提交你的照片

  • 将下载的 ICC profile 安装到你的操作系统里面,Win 8 只需要在 explorer 右键点击文件然后安装即可
  • soft spoofing 你的照片,很多打印机不支持 jpeg 内嵌 ICC profile,为此如果输出照片的时候内嵌了 profile 或者使用了 sRGB 的话,你需要手工将照片转换成为打印机可以直接使用的色彩(如打印机默认认为 jpeg 是 sRGB,相当于要用 sRGB 里面的颜色伪装成为精确的颜色),通常这部分有两个手段,黑场补偿和 dithering(类似将一片不能表达的颜色用几种颜色很密集的打印出来形成视觉上接近的效果)

具体到最后这步上,我使用 LR 输出到 sRGB 空间,然后使用 photoshop 的 soft spoofing 即可。这次拿到的输出结果的确跟屏幕上相比很接近了。之前用自己 25$ 的打印机输出的结果真的惨不忍睹。不知道 LR 啥时候也加入这个功能,就不必两次近似了(相机 profile 到 sRGB 之后 sRGB 到打印机 profile 在 sRGB 里面的近似空间)…

题外话:美国人版权保护很诡异,据说这类打印社都要求提交照片的人声明自己有打印照片的权利,youtube 上有个 Walmart 员工讲述的条例,像 studio 拍摄的照片如果来打印都需要出示 copyright release 的文件,也就是说拍得太好很可能被 reject… 除非你有相应的 paper work。

——————
And Jacob took a stone, and set it up for a pillar.

costco 照片打印攻略

色彩管理的理论与实践

颜色是个复杂的事情,我们还是从一些简单的事实说起。

  • 可见光是波段很窄的电磁波,所以可见光本身可以用电磁波的一些物理属性来描述,如频率、辐射能量等;这时我们其实没有“颜色”这个概念
  • 人 对可见光的感知建立在三种视觉细胞上,简单的说这三个细胞不同的输出导致了我们对“颜色”不同的理解,单一的波长的可见光和混合的可见光可能能导致类似的 输出得到相近的颜色感知,不同的混合方式也可能导致相近的颜色感知,因此研究清楚了人这三种细胞的输出可能我们就知道人类感知的颜色有哪些了。我们暂时不 说这三个细胞感知的是什么“颜色”,因为会产生循环论证的感觉。
  • 这样,如果我们单看这三种细胞输出的信号所属的区域,那就是人能辨识的颜色空间,我们可以用一个 3D 的坐标来表示对 3D 来说通常使用 CIE 1931 色彩空间来 描述,这个 3D 坐标相当于是可见光波段输入的辐射在每种细胞的响应函数下积分的输出(trisiumulus)值 (X, Y, Z),通常我们会将三者值的和称为亮度(感受到的辐射功率和),之后有用的就是两个分量占的比例了(剩下的可以减出来),这样我们就得到了所谓的 CIE xyY(其中 x、y 可以看成是 X/(X+Y+Z), Y/(X+Y+Z),而 Y 表示 X+Y+Z)。以上图像就是去掉了亮度后,希望用来表示颜色的部分。
    CIE 1931 color space chromaticity diagram

    这里的颜色只是象征性的表示,因为你的显示设备会紧紧展示一些颜色而不是所有的,但是这个闭合的区域就相当于是颜色的一种 2D 的表示。

    CIE xyY
  • 那 么如果我们希望表示某种色彩,用一些简化的模型,像上面那种不是很规则的区域往往会让我们无从下手。我们可以选择以上空间的一个子空间,然后定义一些基本 色彩的位置,而所有的颜色就可以用这些基本颜色的混合生成出来,这样就会形成在以上图形中一个三角形区域,我们常说的 sRGBAdobe RGB 或者 NTSC 等等都可以看成是大小不同的几个三角形(也是三维空间在这个 2D 里面的投影)。下面是 CIE RGB。有 了范围,我们还需要比较准确的描述位置,这就需要量化,这往往通过一个 n bit 的二进制数来完成,前面讨论显示器的时候说不少廉价的显示器只是用 6bit 的面板,如果我们希望比较准确的描述 gradient 那么 bit 数越多,描述得越准确。现在 8bit应该是稍微严肃一点的和颜色打交道的人的必须的,更专业一点的都是 10bit 了。照相机的 RAW 很早就提供了 10bit 的数字化,但是一旦我们转换到类似 8bit JPG 上就会损失掉这额外的精度。

    CIE RGB
  • 需要注意的是 RGB 和亮度的关系并不是线性的,比如 sRGB 在比较暗的部分是,但是随着亮度增高 \gamma 系数接近 2.2;Adobe RGB 整个接近 2.2。
  • 颜色的表示方法并非只有 CIE、RGB 两种,另一种称为 YUV,这类里面也是使用亮度 Y 和两个色彩的分量,尤其注重的是这两个坐标对人色彩感知的一致性,那么在传输压缩过程中比起 RGB 系来说更具优势,因为就算损失了一些,可能人感知上并不是觉得很严重。比如所说的 NTSC 也叫 YIQ,也是 YUV 一系的表达方式。印刷里面用的比较多的是 CYMK
  • 显 示色彩的设备需要确定自己的色彩空间,有的能覆盖如 NTSC 或者 Adobe RGB 80% 以上的色彩的就被称为广色域显示器,当然现在多数显示器还是停留在 sRGB 这个颜色空间里,Dell U2410 的厉害之处不在于简单的 IPS 或者 8bit,而是在于同时提供了 102% 的 NTSC 覆盖率,换言之你甚至可以直接在相机里面换用 Adobe RGB 而不是 sRGB,这显示在 U2410 上很可能更合适。多数显示器大颜色覆盖率仅仅在 sRGB,那基本上是 76% 的 NTSC 覆盖率。
  • 决定一个显示器色域的因素很多,光源是很重要的一环。LCD 里面比较重要的就是 CCFLLED 了,只有特殊的 CCFL 和 LED 才能制作 wide gamut display。最极端的问题就是如何产生某些单色光,这有解决方案(激光)但是成本较高,因此多数显示器光源都转向使用较便宜的 LED 之类了。

有了这一些基础的概念,我们来看看一些复杂的情况:

  • 生产显示器的一般使用 RGB 三种颜色配色弄出来,液晶的作用在于产生不同的透光程度,将背光过滤掉一部分这样我们看到的就是一些小“像素”合并出来的明暗组合出来的颜色,可以看看这个图,解释了为什么会有偏振现象,同时估计反正也要用

    TN 屏的构造
  • 那 么显示器自己的颜色如何与我们的内容需要产生的表示关联上呢?不同设备往往工作在不同的颜色空间,比如前面说相机可能是 sRGB 也可能是 Adobe RGB,打印机是 CYMK,很可能两者的色域不完全重合,这就需要我们通过一个简单的方式描述每个设备自己的颜色,这就是所谓的 ICC profile,为了比较准确的比较颜色之间的关系,ICC profile 势必会使用 CIE XYZ/L*a*b* 之类的颜色空间,记录一些特殊颜色对应的坐标,从而将其他颜色通过插值计算出来。这样有了 ICC 做转换就容易将一个设备上的颜色转换到公用的颜色空间然后逆转换输出的设备上了。
  • 实际的显示设备很可能不能准确的表示我们想要的颜色,比如白色,矫正所做的事情就是将其与我们需要的颜色 align。那能否猜一下某些操作是在干什么呢?比如一个工作在大致 sRGB 颜色空间的屏,我们希望给定 RGB 时能正确反映我们的感知颜色,那么我们可以将对应颜色的 RGB 输出通过 sensor 读出来看看是不是 CIE xyY 里面的坐标,这样就能知道一些 landmark 上颜色偏了多少,之后的事情就像是做 LSQ fitting 一样求一个变换让这几个 landmark 的 error 最小,这个变换分解成为一些操作,如 \gamma、对比度等即可。
  • 另一个很重要的概念就是白平衡,也可以说是中灰平衡,即 neutral grey 在输出的时候保证仍然是 neutral grey。为此我们常放置一个中灰色的东西在场景里面(灰卡或者 datacolor 有个 cube),事后用这个色块上的颜色做参考我们就知道怎么调整了。比较笨的方式就是在三个坐标上使用不同的缩放系数,常见的选择可以是直接在 RGB 上做,但是感觉那个可能很不合适,更常见的估计是按照 color temperature(内含计算方法),green/tint 来做调整,这两个方向在 CIE 上可以如下表示

    色温调整

试了一下 spyder2 也能把 Win7 矫正了,不过操作稍有不同,可以参考这篇文章的步骤。Win8 也行,但是似乎软件有点问题,在矫正过程中会不停的闪烁,但是似乎比起 Win7 自动就把结果用上了。

—————–
And Rebekah lifted up her eyes, and when she saw Isaac, she lighted off the camel.

色彩管理的理论与实践