疑问:我的手机,拍照片时候分辨率达到2500多×1700多,录视频时候确是640×480。为什么差距这么大?
关键字:动态像素,静态像素,数码相机,DC,DV,CCD工作原理,CCD结构,RGB差值补偿算法,RGB三次曝光设计
动态像素这个概念,或者说动态有效像素。我在百度上查,根本查不到权威说法。笔者削微懂了点硬件电路布线,CCD结构及其数据传输过程。觉得动态像素的概念是销售商限于通俗的要求,妥妥地忽悠了一把广大消费者。
CCD的结构(和CMOS差不多,可以一起理解) 和工作原理
CCD和CMOS感光的原理无外乎是将光信号的强弱转化成电信号的强弱,然后通过ADC转化成数字信号。CCD由光敏元件阵列(矩阵)和读出移位寄存器组成。最外层的数字接口,一般数据宽度不会超过32位。CCD上有好几百万个感光点,甚至多大1000多万个,但是这些采集到的信号只能一排一排的读出来。而最后只能通过32位的数据线传出来。
简单说,CCD分为三层,第一层是采光曾,把光线聚拢,提高采光率。第二层是分色滤镜,把白光分成RGB或者CMYK。第三层是感光层,每一个感光元件对应一个像素。
为什么要有分色层呢?因为感光元件只能感受光的强弱,不能分辨颜色,所以用滤镜把光分成三原色再感光。这样,每一个像素同一时刻只能接收一种颜色的光。但是这样,拍出来的图片不就不真实了吗?没错,但是科学家们发明了一种RGB差值补偿算法,让每一个点跟它周围的另外两种颜色的点做运算,把其他两种颜色的光也算进来,这样,每一个点都变成正常的光,显示出来也正常了。这样做,牺牲了分辨率,因为“偷”来的颜色毕竟不是在那个位置曝光得到的,所以像素数量要除以3。所以现在所谓的1600W像素的数码相机,实际上都是500W万纯粹的有效点。怪不得数码相片放大到100%大小,都是模糊的!而缩小到30%之后再看,噪点也几乎没了,图像也清晰了。这就是原因。
有一家公司制作出了4500W像素的相机,原来他是用三次曝光,分别取RGB三种颜色,然后叠加出来的,这样1500W像素的CCD感光三次,然后用差值算法,弄到4500W的尺寸,何必呢?但是人家为了跟以前那种同台竞技,也许就是懒得解释那么多。
原理说了那么多。现在大家也该清楚,没有所谓的静态像素和动态像素。相机的工作过程就是:
①曝光,采集数据,把数据通过CCD传输到高速缓存
②CPU把数据从高速缓存读出来,做RGB差值补偿处理(也可以通过专用电路完成)
③压缩成JPG,PNG,RAW格式,放到内存,然后再传出到高速缓存
④最后由高速缓存转储到SD卡。
也就是说,CCD上所有的感光点,都经过了曝光,都产生了对应的数据,207W像素就可以达到1920×1080P高清画面。
那为什么以前600万像素的数码相机,录像时候只有640×480大小的画面呢?这个原因在于当时的硬件电路和cpu处理不过来,只能少传过来一些数据,图像尺寸小一些了。现在可好,一个500万像素的IPhone4,居然就1080P录像,原因是cpu足够快,而且有硬件H264编码器协助处理图像。但是人家销售商懒得解释那么多,所以出现了动态像素的概念,起个新名词,忽悠大众。
①从性能方面讲。设想,一个1080P是207万像素,RGB方式存储,是6MB数据,但是每秒钟要处理30幅图像,这一算下来就是180MB的数据,而且要压缩成MPEG4或者H264,以前是3GP。光用CPU处理是不行的,需要硬件编解码器协助处理。以前100MHz的处理器,是根本啃不动的。现在IPhone4是1GHz处理器,还是相当给力的。H264视频编码是非常复杂的,S帧,P帧的获得是需要前后存储十几幅图像做比较的,对内存的大小和CPU性能要求非常高。酷睿i7都达不到要求,所以要有硬件解码器的支持。
②从原始数据传输方面讲。CCD和系统总线之间的数据位宽,我想对于这种小型设备而言,8位的位宽已经极其奢侈。1080P的30FPS视频流,带宽是2MB×30×3 = 180MB/s,在八位位宽下,需要频率180MHz。对于小型设备的电路板布线,180MHz已经很难做了。
③从视频存储方面讲。以前手机上的TF卡写入速度也就2MB每秒,只能录制分辨率极小的那种3gp格式视频。现在SD卡10MB每秒的很多,存储经过H264压缩的视频,速度上还是能够达到要求的。
所以,综上所述。处理速度的局限性才是录像分辨率如此之低的最根本原因。
P.S.笔者最近参与了Android平台H264硬件编码实现摄像头图像经过网络传输的项目,以及使用千兆网不压缩传输1000×1000像素30fps视频流的项目。遇到了最上面提到的问题,才写出了这篇日志。并非内什么。