何等强悍的神级DIY!民间高手自己动手做数码相机
- 来源:果壳网
- 作者:liyunfei
- 编辑:ChunTian
3、软件构成
3.1、数据处理
AD转换器的像素采集率可以高达2.1M像素每秒。首先,图像数据被存储在微处理器的缓冲存储器里。因为每秒2.1M的数据量对软件来说实在太过分,图像数据会存储到PLD的先进先出队列里。队列半满时触发微处理器的DRDT中断,然后微处理器一次接受一半队列的数据。队列的大小是16字节,也就是说软件的操作周期只要有像素采集率的1/8就足够。这对触发中断来说不算太快,但是仍然需要微处理器高速运行。这个项目里用了ARM7TDMI核心的快速中断请求功能(FIQ,fast interrpt request,通过编组寄存器产生低延迟中断),可惜在Cortex-M3核心中这一功能被去掉了。
当微处理器响应FIQ请求时,一些寄存器切换到FIQ的编组寄存器状态,然后FIQ例程可以直接进入/离开而省去了切换过程。为了最大化执行效率,一般来说FIQ例程是用汇编语言写的。在启用这一功能的 数据波形图 里,可以观察到8位的数据在不用存储的时候只需要0.8微秒处理,加上DMA模式下从总线写入SD卡也只用了2微秒,这样的延迟可以接受。
在每一行数据中有1094个像素,但其中有效的只有1024个。这些数据被存入内存,中断信号SYNC#在每一行数据的开始输出,用来同步第一个像素的数据。
3.2、重建图像
捕捉到的数据可以用通用的8位灰度BMP位图格式存储在MicroSD卡里,宽1024像素,长视拍摄时间而定。存储的格式是DCIMLCAMYnnnn.BMP(nnnn 是编号),和普通的数码相机几乎一样。
在使用廉价的微处理器将图像数据存入SD卡时会遇到一些困难,主要是输入的数据要在极短的时间内存进文件。这个制作中的最大数据传输率是2MB每秒。幸运的是LPC2368有一个MCI(SD/MMC卡的原生控制模式),它能提供8MB/s的数据读取和6MB/s的数据写入能力。但是这是指读写大文件时的平均速度,事实上每次读写之间都需要一些死时间用在SD卡的内部处理和文件系统上,为了避免这些浪费,一个数据缓冲器被用来在死时间中暂存数据,但是微处理器系统的内存大小是有限的,不一定有足够的空间进行缓冲。
让我们估计一下每次写数据操作所能容许的时间耗费。在这个制作里,所有32K的SRAM都用来做数据缓冲器,而程序在16K的ethernet RAM上运行。数据缓冲器分成两半,其中一块填充数据的时候另一块将数据写入闪存。 这要求在每8毫秒里写入16KB的数据,每次操作必须在下次操作之前完成 。接下来的软件技巧可以解决这个问题。
数据写入过程中最重要的延迟发生在集群分配时,在实时操作系统里这是个很大的问题,集群分配导致的死时间视情况不同可能高达数秒钟。这个制作里使用集群预分配(写入数据时用f-lseek函数申请一个比目前需要大很多的空间)来避免写入数据时进入分区表重新定位。每次写入操作都包含一个用来结束操作的集群边界条件。想象一下SD卡里的文件预先整理出一块整齐的空间给数据,这就避免了写入数据过程中大量导致延迟的未知问题。
尽管有这些用来尽可能减小死时间的方法,SD卡或多或少还有一些内部处理时间。在挑选SD卡的时候需要挑写入速度尽可能快的SD卡。我在许多牌子之间做过比较,结果发现东芝产SD卡有最小的写入延迟,也有最稳定的表现。
3.3、显示图像
由于获得的图像数据都是一维的线条,它不能像传统平面成像的二维图像一样显示。为了这个问题需要一些特别的显示模式。
其中一种是范围视图,输入的图像信号连接到Y轴,就像像示波器的输入。Y轴信号表示亮度,X轴信号表示各点在线性传感器上的位置。这个模式适于用来观察感光度和聚焦情况。不同点之间数据的差距可以用来帮助对焦,当图像聚焦时,波形图上产生许多峰谷,出现最大的峰峰值表明焦距已经对上。这是现在数码相机里自动对焦功能的原型。
另外一种是卷动视图,图像向上卷动,新扫描到的图像出现在屏幕底部。这个模式能够用来调整线分辨率。最后生成的二维图像的高宽比决定于线分辨率和物体移动的速度。卷动视图能够展现出捕捉到的2D景象,但是如果被摄物体不移动就只剩下水平的线了,所以相机或者物体之一一定要在给定的运动速度下拍摄,这样才能一边观察一边调节线分辨率。
4、使用说明
线性扫描相机的一般用途同胶片时代的狭缝相机类似。狭缝相机很容易在性能上击败线性扫描相机,它的感光颗粒直径14um,远远小于CCD中单元的直径,意味着极好的分辨率。但是玩狭缝相机意味着你要足够的取景,对焦,拍摄和冲印能力,非老鸟不能为。
相机位置
这个相机需要被固定在合适的角度,这样物体所成的像可以扫过线性传感器。比如说,但物体横向移动或者横方向特别长的话,相机最好固定在线性传感器处于垂直的位置。这个角度必须精确,否则拍出的图片会出现类似平行四边形的扭曲。
调节焦距
这个线性扫描相机由一个5向摇杆控制(上下左右和中键),向右按可以切换显示模式(范围模式或者卷动模式)。首先,输入信号的电平可以通过光圈或者增益控制(上下点击)。增益控制也可以通过左键自动调整。接下来,通过对焦环调节焦距直到信号的峰峰值最大。
调整传感器线分辨率
在卷动模式下可以调节相机匹配传感器线分辨率。调节直到屏幕上显示的是正确的高宽比。传感器线分辨率也可以通过物体移动的速度,物体离镜头的距离和焦距来计算,这略微有些误差,但数字图片是可以通过后期处理来修正的。当然如果传感器线分辨率实在太低的话,这个过程会损失一些信息。通常来说传感器线分辨率高不是坏事,就是灵敏度可能低些。传感器线分辨率影响曝光时间(灵敏度),所以输入电平的增益需要和不同的线分辨率匹配。
获得图像
中间的按钮用来开始/停止拍摄。按下按钮就可以开始记录图像。集群预分配会在0.5秒内完成,然后暂停直到松开。松开按钮时会开始记图像录,然后在任意按钮按下时停止或者直到写入数据到达了集群预分配区域的边界。预分配的大小被配置到10万行(大约100MB),但是可以根据拍摄物的尺寸改变。生成的图像文件可以在电脑上进行预处理,调节图片朝向,高宽比或者做伽玛校正。
玩家点评 (0人参与,0条评论)
热门评论
全部评论