Sky Watch

Computer Generated Hologram

CGH,计算机生成全息,就是可以把入射光的相位信息保存下来的东西。目前网上介绍这个东西的文章大多以论文(而且都是要钱的...)的形式出现,不利于我等民间人士访问。正好这几天由于学习上的需要写了一个二维 CGH 的程序。大家都知道光学的全息就是让物光通过一组透镜产生傅立叶变换,然后用一束参考光干涉来记录,所以在 CGH 里只要对物做傅立叶变换,然后记录变换结果就行了。具体步骤如下:

  1. 把物做成图片
  2. 对图片做 FFT,生成一组复数
  3. 把复数编码成图片并保存
要还原时只需要从生成的图片里导出频域信息,并做 FFT 逆变换。

我这个程序比较弱智,我自己写了一个读写 bmp 文件的类,只能操作 windows 格式的 24 bit bmp,编码用了类似 Lohmann 的,用开孔的位置表示相位,孔的深浅表示幅度。用法为 holo -i <inputfile> [-o <outputfile>] [-w <site width>] [-h <site height>] [-d <hole width>] [-r] 其中 `site width` 是每个孔能活动的宽度,`site height` 是孔的高度,`hole width` 是孔的宽度,`site width - hole width` 决定了相位的精度,而幅度的精度永远是 8 bit。