camera基本知识_camera 科普视频-程序员宅基地

技术标签: Multimedia  

转载自 https://blog.csdn.net/wang714818/article/details/78088424

一 Camera模组    

      虽然Camera的构成大家都知道很简单,就是镜头+感光芯片而已。不过大家也都知道光学成像是一门非常深奥且尖端的科学,这其中消费者可以拿来讨论的话题非常之多。我们现在就来谈谈摄像头,从camera的构成开始


   Camera最概念性的结构框图,就是镜头+图像传感器+DSP。如果图像传感器类型是CCD,那么在图像传感器采光后还需要一个A/D转换的过程。 下面具体介绍。

Camera结构一 图像传感器(Sensor) 

 一 感光二极管阵列 图像传感器(image sensor),这个大家都耳熟能详了,目前买个相机或手机,一般都会标注sensor的参数,人们也都知道了,sensor是相机中最重要的器件之一,没错,是之一,不是唯一。 Sensor的作用通俗点讲就等效于胶片相机的底片。两者的作用都是保存曝光时间内的光线数据,这些原始数据就含有基色/亮度等成像的全部要素。 区别在于胶片要在暗房里面慢慢用光显影液和定影液冲洗出影像,而sensor要经过数字信号处理和数据转换才能成为通用的影像格式。 大家也知道,Sensor的类型,按照工作原理可分为两类CCD和CMOS。 CCD: 电荷耦合元件 CMOS: 互补型金属氧化物半导体 这两个名字非常拗口,咱们略过,来说说他们的工作原理吧。 其实我觉得,我们能记住这些专业名词的,还是要记住。如果连名字都记不住,就去研究原理的话,总觉得好像有什么奇怪的怨念混进来了。这就好比你看上个姑娘,追的死去活来,终于追到手了,然后海誓山盟,各种美好,结果到领证登记时,登记员问你:未婚妻名字?你才拍脑袋:我艹我老婆叫什么来着…? 对!就是这种感觉。 首先要说明,图像sensor既然要保存光线,首先要做的就是能感应光线,即不同的光线照射到材料上,可以输出不同的信号电平。 CCD和CMOS就是对应两种感光二级管的类型。以此带入后,大家都将这两种感光二极管所构成的sensor,简称为CCD和CMOS。 下面是CCD和CMOS的感光二极管排列,看图也能看出来,因为感光二极管的构造不同,所以CCD和CMOS的感光阵列结构也不同。CCD的阵列,是在一根总线后加A/D转换,而CMOS在每个感光二极管旁都加入了A/D转换(红色的二极管标注)。


 大家把视线焦点聚集在阵列图的总线上,CMOS结构的阵列有水平和竖直两条传输总线,而CCD只有水平或者竖直一条传输总线。 那么大家就有疑问了,CMOS有两条总线,可以以坐标方式直接读取总线的电平来保存每个像素的电平值,而CCD只有一条总线,怎么输出数据呢? 很简单,大学学过数电吧,CCD传出数据就是在时钟信号同步下,一步一步的移位读出对应二极管的电平值。 这也就带出CCD和CMOS采集信息的不同点了。CMOS是主动式输出采集的数据信息,CCD是在同步电路控制下被动式的输出采集的数据。 至此,CCD和CMOS的大多数特性就可以解释了。 第一, CCD保存图像速度慢,不适合快速连拍。 你瞧,CCD传感器需在同步时钟的控制下以行为单位一位一位的输出信息,速度当然慢,不慢不舒服斯基。 第二, CMOS保存图像速度快,适合快速连拍。你瞧,CMOS阵列有坐标嘛,传感器采集光信号的同时就可以取出电信号,还能同时处理各单元的图像信息,速度当然比CCD快,不快不舒服斯基。 第三, CCD耗电大。本来CCD感光二极管工作就需要多个源极,所需要施加源极的电平很高(见图),加上CCD的阵列要在同步信号控制下一位一位的实施转移后读取,所以需要时钟控制电源和三组电源供电,耗电当然大了。不大不舒服斯基。 第四, CMOS耗电小。CMOS传感器经光电转换后直接产生电流或电压信号,信号读取十分简单,而且感光二极管所需的电压,直接由晶体放大输出,所以需要施加在源极的电平很小(见图)。不小不舒服斯基。另外,大家还记得上面的摄像头结构框图吗?为什么CCD传感器后面会有个A/D转换电路,而CMOS却没有?现在知道原因了吧?OK,再来说下一个话题。


 CMOS之于CCD的弱点和优势。 在几年前,大家普遍存在一种说法,就是CCD画质比CMOS好。时至今日,这个说法越来越站不住脚了,当然是CMOS传感技术在高速发展的结果。 说CMOS画质弱于CCD,其实也就是采集的数据完整性不同罢了。 

  1. CMOS是主动式输出数据,阵列上每个点都要经过两条传输总线,路程长,虽然经过了放大,但传输时的噪声引入多。 

  2. CMOS阵列的每个二极管旁边都有A/D,光电传感元件与电路之间距离很近,相互之间的光电磁干扰较为严重,放大的同时可能带入的噪声也大。 

  3. 如上一点,CMOS因为二极管旁带有A/D电路,所以同样尺寸的sensor,CMOS的二极管能受到的光线面积就小(其他的面积留给A/D电路),所以一部分光线被浪费了,受光弱于CCD的感光二极管,所以带入的一点小噪声就会被放大。 

  4. CCD传感器制作技术起步较早,技术比较成熟,采用PN结和二氧化硅隔离层隔离噪声。 不过,近年来,CMOS技术发展是一日千里,在中小尺寸传感器上,CMOS和CCD的画质区别已经很小了。CMOS可以通过改善微透镜,在硅表面上掺入杂质等来减小噪声信号。(什么是微透镜?下面慢慢介绍) 这时候,大家又有疑问了,为什么CMOS在发展,而CCD却没有技术更新了呢? 这个我只能说,CCD成本高又耗电,结构设计又复杂,谁TM闲着没事去钻研它啊。而且CCD技术起步很早,发展的已经很成熟了,可改善的余地真的不算大。 感慨一下,说起CCD和CMOS的发展,就好像猎人和海贼王一样。 猎人就是CCD啊,神作啊,可惜它是被富奸这个2B给画出来的。于是可怜的猎人Fans等了八年,还没等到主角再次登场… 

 二 微透镜和滤光层 再来,就是微透镜了。 微透镜是什么?是镜头吗?错!给你打个叉。 微透镜不是镜头,微透镜是CCD/CMOS传感器表面的一层小透镜阵列。 光线不是经由镜头,然后直接照射到CCD/CMOS的感光二极管阵列上的。在光线射到感光阵列前,还要经过传感器表层的微透镜和滤光层。 在感光二极管之上,有很多微型的透镜。这些透镜按照二极管的阵列排列,也就是每个感光二极管的上面都有附着一个微型透镜,即一个透镜对应一个像素来排列。 下图为CCD传感器的纵向结构图。


 为什么这种结构?聪明的读者已经猜到了。猜到的同学请举手,叔叔要奖励你一个轻轻的吻,不伸出舌头的那种哦~~~ 微透镜的作用:初中物理老师都会告诉你,凸透镜用来聚集透射光线的。微透镜当然是用来聚集光线的。 在阵列中,感光二极管的感光面有限,对应一格像素内的大部分面积是无效受光区域,所以要把阵列中每格二极管前的光线集中起来,射到二极管的受光面上。 滤光层的作用:注意了,不是孙燕姿的绿光,是滤光。滤光就是把色彩滤掉。保证每个二极管感受到的光是单色的。为什么要滤成单色光?把你生锈的脑袋转动起来。前面说了感光二极管只能输出不同的电平,也就是只能表示光的强度而已,没办法表示颜色信息。也就是黄色光和红色光,只要对应的亮度相同,二极管都会输出一样的电平信息。所以,聪明的开发者就在二极管阵列前面,加个滤光层,指定这个二极管感受一种颜色的光强,光线中其他的颜色就去掉。这样每个二极管的输出信号就对应为一种颜色的强度了。 这种做法的缺点是每个像素点得不到真正的信息,只能通过相邻像素的其他颜色强度,来猜测自己这一格内的其他颜色强度,再把颜色组合起来,算出真正的颜色。这就是所谓的马赛克结构。 目前市面上手机和相机传感器总数的99%是马赛克结构,也就是有先天缺点的。 最常见的马赛克结构就是RGB三个基色相错排列,如下图。相机将每个像素格的基色信息综合起来,猜出每个像素的实际颜色和强度。


 现在还有一种sensor,可以完美解决马赛克的这种先天缺点。就是适马开发的FOVEON X3传感器,其实就是每个格子的感光电路,可以感受RGB三种基色的信息,缺点是在感光阵列上要加三层滤光层,光线强度会有损失。 适马X3传感器也是被誉为最接近胶片原理的传感器,成像效果比常用的CCD/CMOS确实好很多。这个好理解嘛,因为每格像素记录的都是全部的基色,不用靠相邻像素去猜了嘛。 不过很可惜,这种传感器目前只用在适马自己的单反和专业DC上,而且卖的很贵。另外同样的尺寸下,X3传感器比较难以提高总像素数。

 

 三 传感器尺寸和画质的关系 传感器尺寸大小对于画质的影响,其实跟之前一样,就是采集的光线数据的正确性和完整性的不同。在像素相同的情况下: 1. 传感器面积越大,感光阵列的面积就越大,相邻感光电路的距离就越大,加电时产生的电磁干扰就越小。 2. 传感器面积越大,感光阵列的面积就越大,对应单个像素的透镜就能做的越大,聚集到的光线就越多,感光二极管受光后产生的输出电平就越高。假设噪声大小不变,那么更大的有用输出电平,带来更高的信噪比,转换后的信息处理时正确率就越高。 3. 为什么在光线非常好的时候,传感器尺寸大小间的差异会缩小? 因为即使传感器尺寸小,但是光线强度足够,每个感光二极管都能受到足够的光线,产生的信噪比就大,噪点也就缩小了。 这就是为什么画幅大的单反和单电,比画幅小的手机和卡片DC成像好的本质原因,当然也有镜头素质等其他原因。下图是各种画幅的大小对比。


 (小知识:32×24mm之所以被称为全画幅,是因为这个尺寸和135胶片的尺寸很接近) 好了,关于传感器就说到这儿。这里是个浅显的原理讨论,深入的半导体材料特性,驱动电路设计等不是我们关心的了。 另外,关于CCD和CMOS的优劣,被人争论的太多太频繁了。无忌有个帖子讨论的比较深入,感兴趣的话可以搜索一下。 

Camera结构二 数字信号处理(DSP) 

  一 图像信号处理的目的 你像我一样,假期宅在家里,肚子饿了想吃碗泡面,然后打开冰箱拿出泡面,这个泡面就是原始数据,是不能吃的。你要打开桶,撕开调味袋和酱袋,倒进桶中,再倒热水冲泡数分钟,然后才能吃。这个过程就叫对数据进行处理。 这时候有人大叫:我吃泡面都是直接吃干面饼的。对于这种喜欢吐槽的魂淡,我是不会理会的…… 关于图像信号的处理,我们先从需求上去探讨。 前文说过了,传感器一般为马赛克结构,阵列输出的信号,在每个像素上都只是单色的,需要用相邻像素的色彩去猜测本像素的其他色彩。 这个由传感器直接输出的,每个像素只有单色信息的数据,叫做Raw RGB数据。 而DSP的目的,就是把Raw RGB数据,去通过计算和后期加工,变成真正的RGB或YUV格式的数据。 简而言之,DSP的主要工作,就是把Raw RGB格式转换成RGB格式或者是YUV格式。


 介绍一下各种颜色的数据格式吧。 

 1. RGB数据: 通用数据格式,因为理论上任何颜色都可以用红绿蓝三种基本颜色混合而成,所以RGB格式的一个数据位由RGB(红绿蓝)三种颜色的比特位组来表示。 

   RGB格式有RGB565,RGB24,ARGB32等几种标准。 大家都知道,数据传输中,一个字节是8个比特 

    RGB565:共16比特,占两个字节。 其中5个比特表示R,6个比特表示G,剩下来5个比特表示B,所以一共可以表示的颜色数为2^16 = 65536色, 其中红色R和蓝色B可表示为32种不同值,而绿色G可以表示为64种不同; 

    RGB24:共24比特,占三个字节。 其中RGB三种颜色各种8个比特位, 所以一共可以表示的颜色数为2^24 = 1677万色,每种颜色可表示成256种不同值; 

    ARGB32:共32比特,占四个字节。 其中RGB三种颜色各占8比特,剩下来8比特表示Alpha通道值, 所以一共可以表示的颜色数为2^24 = 1677万色,每种颜色可表示成256种不同值。 但是因为加了Alpha值,所以每种颜色还可以另外显示为256种不同的透明度; 好,说到这里,大家知道了屏幕参数中6万5千色,26万色,1670万色是怎么来的了吧?

  另外RGB颜色在寄存器中的比特位顺序是BGR,所以写驱动时,定义的话是这么定义的: 

  typedef struct tagRGBTRIPLE { 

    BYTE rgbtBlue; // 蓝色分量 

    BYTE rgbtGreen; // 绿色分量 

    BYTE rgbtRed; // 红色分量 

  } RGBTRIPLE; 

  2. YUV数据: 说白了就是色差分量。大家的电视机上都有色差端口吧?色差端口传输的数据格式就是YUV422。 YUV中,Y表示亮度信号,U和V表示色差信号。以前的黑白电视,是只有Y信号而没有UV信号,所以只能表示灰度而不能表示色彩。 YUV数据和标准RGB数据互相转换公式: 

    Y = 0.299R + 0.587G + 0.114B 

    U = 0.147R - 0.289G + 0.436B 

    V = 0.615R - 0.515G - 0.100B 

    R = Y + 1.14V 

    G = Y - 0.39U - 0.58V 

    B = Y + 2.03U 

  3. Raw-RGB数据:前文所说,马赛克结构的CCD/CMOS,其感受光线后输出的原始数据只有灰度数据,因为滤光层关系每个灰度数据只表示一种颜色的强度,所以Raw-RGB数据就是传感器输出的原始图像数据,其中的颜色信息是不完整的,不通过计算插值出其他颜色信息的话,是还原不出完整图像的。 

 了解了图像处理的目的之后,我们来看看DSP的简单框图。下面一步步的来拆分。


 1.图像传感器部分:前面已经说过了,没记住的把鼠标往上面滚动,慢慢看。ASP/AFE就是感光阵列的辅助电路,控制信号抽样,感光时间长短(也就是曝光)等功能,跟模拟信号的处理相关。A/D部分前文也有说明,所以这部分带过。 最后一点最重要:图像传感器输出的就是Raw RGB原始数据。 

 2.DSP部分:基本上信号处理模块中,90%的功能由ISP完成。ISP是什么?Image Signal Processing,图像信号处理。 故名思忆就是处理图像的。ISP将由Sensor输出的原始信号处理成通用的成像数据,这些处理过的成像数据可以直接被AP处理器或者基带芯片来使用,至于这些通用的图像格式数据,是再处理还是显示还是保存,这就看应用需求了。 

 二 Pre-ISP 大家辛辛苦苦工作了一年了,准备带着家人去普吉岛度个假。难得出国嘛,总觉得不带个好点儿的相机会有遗憾。于是赶早儿带着女儿去摄影城买相机去了。 到了摄影城门口有人发传单,起手接过一张,佳能小马四,双Digic高速数字图像处理引擎,倍儿牛逼。 没走两步又有人塞了张传单,索尼A77,双Bionz图像处理引擎,忒专业了。 于是您女儿就好奇了,拽着您的衣角问起来了,把拔把拔,这个图像处理引擎,四什么东东啊?好吃吗? 回答不出来吗?不能在自己可爱的女儿面前丢脸啊。大丈夫萌大乃! 客官儿,给您沏一壶茶,您坐着,一边品茶一边听我慢慢的道来。 

 目前市面上的相机厂商都有自己的图像处理引擎,其实就是一块封装了ISP以及其他功能的芯片。这块芯片的主要作用,其实就是处理原始图像数据(Raw-RGB)。 首先啊,咱们说说这Pre-ISP,哎?您问我什么是Pre-ISP? 嘿,敢情客官您眼力好啊,问我那算是问对人儿了。 Pre-ISP部分称之为前端影像处理,是把原始图像数据处理为通用图像数据的最关键的一个部分,没有之一。各家的图像处理引擎中,最核心的也就是这个Pre-ISP的部分,对应着不同的图像数据的转换和处理方式。 其实说白了Pre-ISP就是一个调整图像的过程(PS的过程)。这个和你在电脑上用Photoshop或者光影魔术手去给你的图像拉曲线,调色调等是一样的过程。 只不过ISP是直接处理Raw-RGB数据的,这个原始数据虽然是不完整的RGB颜色数据,但是没有失真和画质损耗,处理Raw-RGB数据,所带来的画质损失是最小的。 而经过Pre-ISP处理过的数据,即RGB或者YUV数据,虽然有了完整的颜色信息,但是画质已经有了一定的损耗。如果再把这个RGB或YUV数据编码压缩成JPG格式,画面细节的损耗就更大了。 而我们一般是直接使用出片的JPG文件去更进一步的处理,在手机上或者导出到电脑上进一步修改,这就是第三次对画质进行了损坏。 图像数据在各个处理流程中的画质损耗见下图。


 所以,现在很多相机都具备直接输出原始的Raw-RGB数据的能力,也就是所谓的RAW片。直接用专用的工具打开这个RAW片,在电脑上进行加工,以减少处理中画质的损耗。这个过程其实就是摒弃了相机内置的ISP过程,而直接自己处理原始格式。嗯,高手都这么做,高手都是鄙视直出JPG的“伪”射影师的,我就在无忌上被鄙视过……千万别招惹那些摄影高手,他们会用他们丰富的经验在精神上推倒你,而且绝对不肯准备杜蕾丝的。 关于RAW片为什么处理起来对画质损失最小,我再引用其他人的一段文字吧: 

  1. RAW文件没有白平衡设置,可以任意的调整色温和白平衡来进行创造性的制作,而不会造成图像质量损失。 

  2. 可以转化成16位的图像,也就是有65536个灰度层次可以被调整,这对于JPG文件来说是一个很大的优势。当需要对阴影区或高光区进行细致调整的时候,这一点非常重要。 

 OK,再来说说Pre-ISP的重要性。 Pre-ISP是对原始图像格式的第一次处理,这是非常重要的一次处理,可以说是直接修改和优化了图像的内容,也就是直接决定了这个相机或手机的出片能力。 而Pre-ISP之后的处理,比如转换为TIFF或者JPG等,都不会对图像的内容进行修改,只是在转换过程中会产生一点画质的损失。 

 Pre-ISP所做的工作没有一个固定的流程,因为每个厂商都有各自不同的处理流程和风格,所以带入进相机,体现出来的就是各家都有显著不同的成像风格, 佳能“媚”,尼康“锐”,宾得“惹人醉”等说法,说的就是这个,当然,不同的成像风格和所使用的镜头也有很大的关系。 不过不管是什么Pre-ISP,一定有色彩插值的过程。也就是把Raw-RGB中缺失的颜色通过一定的算法给算出来的过程。 如果你是直接输出Raw片,那么在电脑上用软件打开Raw片时,软件已经做了色彩插值的计算处理了。(否则怎么能看到图像呢..) 我这里给出一个一般的ISP都有的前端处理动作: 

  1. Black Level Calibration(暗电流校正) 这个过程一般集成在sensor中,但是严格来说也属于ISP的一部分。 感光二极管,在没有光线照射时,释放电流应该为0吧?很可惜这只是理想状态。这些无受光情况下释放的电流值称之为Black Level暗电流,是噪音,需要去校正后保存进寄存器里面,作为补正系数。以后在光照情况下,才能将二极管的输出电流相应的进行加减补正。 

  2. Lens shading(镜头黑点校正) 小通光口径镜头比较严重的毛病,成像圈的外围进光量不足,所以图像四周有暗角。 所以要预先提高亮度把这个问题处理掉。 

  3. Black Point Compensation(黑点补偿) 通过扫描每个像素及其四周像素的颜色和灰度数据,侦测出纯黑的点,进行插值计算出合理的颜色及其灰度值覆盖它。 

  4. 平滑锐化 平滑+锐化,皮肤要平滑白皙,眼神要锐利凶狠化,这就是傲娇娘的基本属性。

  5. 色彩插值 这个就是前面所说的,基于马赛克sensor的ISP一定会有的步骤,把原始图像数据中每个像素缺失的颜色给计算出来,算法很复杂哦,以后再说吧。 

  6. Gamma校正:就是对图像的伽马曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。http://www.docin.com/p-69816832.html

  7. AE自动曝光补偿:通俗一点讲,就是为了画面的明暗度和细节、层次更加丰富,适当地加、减曝光量。 

  8. AWB自动白平衡补偿:就是无论环境光线如何,仍然把"白"定义为"白"的一种功能,这样可以保证色彩还原的准确性。 

  9. Color Matrix:对图像进行颜色方面的处理,通过使用颜色矩阵(ColorMatrix)来实现。从而可以达到很多特效如黑白老照片、泛黄旧照片等等,http://developer.Android.com/reference/android/graphics/ColorMatrix.html。 

  10. 饱和度/对比度/亮度调节 不知道的看Photoshop帮助文件去。 

  下图是一个CCD摄像头模块中,关于ISP的框图。可以看到Pre-ISP的流程为: 坏点侦测(黑点白点)->基色白平衡转换->Gamma值补偿->色彩插值->色彩修正->色域转换->将RGB444转换为YUV422格式输出。


 至于其他ISP的处理流程,可以参见各个camera模组的datasheet。 总之,Pre-ISP就是机器内部,对于Raw-RGB原始格式的一个PS过程。你这么理解就对了。

 三 Post-ISP 在ISP的框架中,Pre-ISP已经对原始图像数据进行过处理了,那Post-ISP是干嘛的呢? Post-ISP,即后端影像处理,其实就是做做后勤工作的,并不是上前线直接作战的。Post-ISP对于图像的直接影响并不多,它主要负责数据压缩及后端接口界面等,还包括数据传输和控制等工作。


 如上图,红色框内的控制模块就可以视为Post-ISP。 Post-ISP的作用繁杂,主要还是体现在控制上。 控制什么?当然是控制拍照时相关的电路工作状态啊。 

 基本的控制项目: 

  1. 自动曝光控制(光圈+快门控制) 

  2. 自动白平衡控制

  3. 闪烁控制(对应工频干扰) 

  4. 闪光灯控制,连拍控制,视频摄录控制 

  5. 自动聚焦控制 

  6. 变焦控制 

  7. 等等等等 

 我们来挑选大家比较关心的说说。 

 Post-ISP控制项目之一 曝光控制(光圈+快门控制) 传感器中,感光二极管加电工作的时间,就是曝光时间,也就是所谓的快门时间。 当传感器如果不加电,即使有光照射到表面,也感光二极管也不会工作。 Sensor的曝光方式有几种,全帧曝光和逐行曝光等。 

  全帧曝光:Sensor通电后,所有的感光二极管是同时开始工作的,你只要控制Sensor加电时间的长短,就能控制曝光时间了。CCD传感器因为原理的关系,只能全帧曝光。 

 逐行曝光:Sensor通电后,感光二极管是一行一行开始工作的,你必须控制是哪一行曝光,然后计算总的曝光时间。 

 下面贴一段控制逐行曝光的驱动代码,以说明快门控制的过程。(camera模组是美光的) 

 函数解释: PVOID IIC_Write16bit(WORD addr, DWORD value) 

         [函数功能] 写寄存器 

         [参数] addr:寄存器地址; 

              value:要写入到寄存器对应地址的值 

         [函数返回] NULL 

         DWORD IIC_Read16bit(WORD addr) 

         [函数功能] 读寄存器 

         [参数] addr:要读出的寄存器地址 

         [函数返回] 从对应寄存器地址读出的值 

         PWOID WaitTime_ms(DWORD waittime) 

         [函数功能] 字面意思,等待 

         [参数] waittime:等待时间,单位毫秒 

         [函数返回] NULL 

 寄存器地址解释: 

         0x09: 存储曝光时间值 

         0xf0: 存储预置动作值 

         0xc8: 存储快门状态值 

   IIC_Write16bit(0xf0, 0x0000); 

   dataTemp = IIC_Read16bit(0x09); //读取曝光时间值 

   gCurbrightness1 = dataTemp; //快门时间存入变量,后续做处理 

   WaitTime_ms(10); 

   IIC_Write16bit(0x09, dataTemp*2/7); //写入新曝光时间值为原来的2/7 

   IIC_Write16bit(0xf0, 0x0001); //将所有要新写入的寄存器地址预置为1 

   IIC_Write16bit(0xc6, 0x2225); 

   dataTemp = IIC_Read16bit(0xc8); //读取快门状态 

   gCurbrightness2 = dataTemp; //快门状态存入变量,后续做判断处理 

   WaitTime_ms(10); 

   IIC_Write16bit(0xf0, 0x0000); //将所有要新写入的寄存器地址预置为1 

   IIC_Write16bit(0x65, 0xB000); // CLOCK_ENABLING 

   IIC_Write16bit(0x65, 0xE000); // CLOCK_ENABLING 

   WaitTime_ms(600); // Wait 1 frame time 

 以上就是驱动控制快门状态的简单案例。实际中比较复杂一点的camera模组,是不会这样去直接控制快门时间长短的。Post-ISP已经内置了测光模式和光圈控制的过程,需要调试的就是一组辅助系数而已。 

 一个camera的驱动中,快门调试往往是最繁琐的,需要大工作量的去调试代码。快门控制关系到最CCD/CMOS最基本的保存光线数据的正确性,即原始图像数据的素质。如果连最基本的感光都做不到正确,还谈什么图像处理呢?原始图像数据就是一堆没法还原的垃圾了,谁也不能把它变成黄金啊。 另外的,像测光控制,因为手机的camera没有独立的测光元件和被测光路,所以都是直接用CMOS/CCD来测光的,然后再Post-ISP中调整快门+光圈+ISO的组合。用CMOS/CCD来测光,优点是可以自由选择测光点,不需要额外的测光系统,成本低,缺点是测光速度较慢,复杂光线下测光不准确等。

 Post-ISP控制项目之二 对焦控制

  大家都知道,如果摄像头素质高一点的话,一般都会带有AF功能。AF=Auto Focus,自动对焦功能。 而Post-ISP可以控制VCM(音圈对焦马达)模块的状态,即实现了对焦点的控制。 关于自动对焦,这又是一门非常精深的学问了,发展了几十年,衍生出了数百种对焦的技术。目前相机厂家的对焦方式还不尽相同。我不太了解这么精深的学问,那么,我们就来说浅显一点的吧。 目前常见自动对焦的类型分为相位检测自动对焦和反差式自动对焦两种原理,另外富士等公司也开发出大规模应用的新对焦技术了。 

   相位检测自动对焦: 多单反和高端DC采用。相位检测对焦,要在相机内部另外加一个线性传感器(只用来对焦)和分离镜头。当开始对焦时,光线首先被反光板反射到分离镜头上,这时候主CCD/CMOS是不工作的,而线性传感器是工作的。分离镜头会把光线分为两束,这两速光线经分离镜头后会重新投射到线性传感器上,如果焦点是对准的,那两束光线会聚集到线性传感器表平面,则线性传感器的感光二极管受到的光强最强。以此来做对焦的检测和预测。

   相位检测自动对焦的优点是快速,焦点准确。缺点是焦点需要经电路设计实现,不可触摸对焦,而且实现复杂,暗光线下难以合焦(拉风箱)。


 贴一段无忌的原话,来描述相位检测自动对焦的过程: 

  调焦准确时见图中(a),我们用AB来表示作为基准的一对CCD元件之间的距离。

  当调焦不准时,有两种可能性。一种是镜头焦点在被摄体之前,见图中 (b)。此时受光的两只CCD元件之间的距离短于AB;另一种情况是镜头焦点在被摄体之后,见图中(c),此时受光的两只CCD元件之间的距离长于AB, 根据受光的一对CCD元件之间的距离,就能鉴别出焦点是否准确。

  两只CCD元件所产生的电信号经过转换电路和模拟/数字转换电路,再送入照相机内的 CPU(中央处理单元),CPU按照厂家所设定的程序及根据这对CCD元件的距离与AB的差值,可计算出散焦量(即实际焦点与准确焦点之差)以及散焦方向。 

 反差式自动对焦:多手机和卡片DC采用。就是传感器通电开始工作,不断的把画面通过DSP转换后传给Post-ISP,Post-ISP就开始对不断的进行画面分析和比较了,控制对焦镜片来回移动,当检测到最佳的反差时停止移动镜片。

 优点是结构简单,焦点自由选择,可改善余地大;缺点是对焦镜片需要来回移动(拉风箱),速度慢,费电,焦点不准确。


 于是,我们知道了,相位检测自动对焦和反差自动对焦的优缺点。 手机和卡片DC,受限于体积大小和结构需要简化等因素,所以不会采用相位检测对焦。虽然这样的自动对焦准确性会降低,但也带来了体积简化成本降低的好处,而且因为手机的摄像头一般不会有长焦端,所以对焦点精度的要求并不需要那么高。 而且对焦技术还在不停的发展,未来如果出现了兼顾体积和精度的对焦技术,说不定很快就会产业化,我们拭目以待吧。 关于Post-ISP其他的功能,对于并没有对图像进行直接处理,而多和电路设计,ID设计有关,这里就略过不提了。

Camera结构三 光学镜头(Lens) 

    说到重点来了,可惜这个重点咱们要简短的说,因为我对于光学,实在是苦手一名。 相对于传感器和DSP的飞速发展,光学技术的发展已经相当成熟。 一家以消费电子为研发主体的企业,想要转型为专业相机研发企业,是非常困难的,如果不通过收购或者技术购买,想要开发出自己的光学系统,无疑可能性非常的小。 这也就是光学技术的壁垒过高,长期的技术和经验累积,对于光学公司来说是非常重要的。 你看,那些玩摄影的发烧友人,一般都会投入几倍甚至十倍与机身的金钱,去升级自己的镜头群。而数万块天朝币的镜头比比皆是,甚至是一些玩家的标配头,挂机头。足以见光学素质,对于成像的重要性。 光学特性对于一个相机或者手机来说,完全体现于镜头的光学素质。 而相比传感器来说,光学特性对于画质,完全是覆盖级别的关系。成像所需的方方面面点点滴滴,光学特性的好坏对其都会有直接影响。 然而因为过于博大和精深,我们这里不可能从透镜成像开始说起,也不可能一一介绍弥散圆,像差,锐利判定等概念,当然后面涉及的信号与系统,什么Nyquist采样定理就更无从谈起了。 当然,关于镜头的镜片数目和结构,以及镜片研磨,材料选用,透光率等,也就不说了,因为展开来说,对于消费者的认知也没多大帮助。 咱们就从功能粗浅的说说,然后再粗浅的说说的镜头对画质影响,反正咱就是个粗浅的大老爷们儿。

 一 功能性 

   镜头的规格最大程度的影响拍照的功能,以下说明可以去各大摄影论坛找教学贴来科普一下。 

   1. 焦段覆盖 焦段覆盖直接影响你的疲劳程度,也就是得走多少路。定焦么就是所谓 的变焦基本靠走。 拍风景少不了广角,拍野生动物少不了长焦。 否则风光摄影师可能会因为走远一点而跌入悬崖,而动物摄影师可能会因为走近一点被狮子吃了。 以上结论:焦段影响性命…… 

   2. 焦点 焦点直接影响视野角度,景深和透视感。 广角端入射角度大,光线强度高,景深大,透视感强。 长焦端入射角度小,光线强度低,景深小,透视感弱。 

   3. 放大倍率,物距,最近对焦距离 简而言之影响微距效果。 

   4. 光圈 光圈直接影响曝光和景深,也就是影响快门时间和透视感。 有大光圈你可以提高快门时间,减少手抖动带来的画面模糊,或者高ISO带来的画面噪点。 

   5. 特殊功能的实现 比如鱼眼镜头,移轴镜头,柔焦镜头等,实现特殊的画面效果。 这些特殊效果也可以用后期处理来实现,不过处理带来的画质损失以及不自然感就看你自己选择了。能用前端的光学性能达到的效果,就尽量不要用后期处理。

 二 MTF与画质 

   说到这里,我来问问大家,画质的评判标准是什么? 画面细节?画面纯净度?色彩还原? 呵呵,其实,这些都可以用解像力来概括,或者被解像力间接的影响到。 解像力简单的说就是量度、计算影像从清晰->模糊之间的转换点(通俗点称之为分辨率)。每一个镜头都有其分辨能力的极限,比如一个光学分辨率为500万像素的镜头,你在它的成像圈内放一个1000万像素的CMOS传感器,那你是白瞎了这块CMOS了。 简而言之嘛,镜头画质大部分和分辨率和反差有关。而MTF曲线,就是衡量一款镜头的分辨率和反差的曲线。 下面我们就来说说MTF(Modulation Transfer Function),中文名称为调制传递函数。 首先快速介绍一些概念: 正弦光栅:亮度按正弦变化的周期图形叫做“正弦光栅”;


  空间频率:单位长度(每毫米)的亮度按照正弦变化的图形的周期数,单位是线对/毫米(lines/mm); 最大亮度:设为Imax 最小亮度:设为Imin 调制度:M=(Imax-Imin)/(Imax+Imin) MTF值:设正弦光栅原本的调制度为M,而正弦光栅透过镜头后,到达成像平面的图像的调制度为M’,则MTF值= M’/M 所以,MTF的值越接近1,镜头成像素质越好(光线通过镜头后解像力完全不变); S曲线和M曲线:镜头是光中心轴的中心圆形对称结构,像场中心各个方向的MTF值是相同的。但是镜头有散性,在偏离中心的位置,沿切线方向的线条与沿径向方向的线条的MTF值是不同的!S曲线:平行于直径的线条产生的MTF曲线称为弧矢曲线,标为S (sagittal);M曲线:而将平行于切线的线条产生的MTF曲线称为子午曲线,标为M(meridional)。


  空间频率很低时,MTF值趋于一个接近于1,即镜头对大尺寸色块的反差。随着空间频率增高,MTF值逐渐下降,直到趋于0。肉眼分辨的反差极限是MTF = 0.03。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/flaoter/article/details/90116481

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法