Camera-Related Architecture

本文详细介绍了相机数据流Pipeline,包括TimingGenerate、PlatformDataProcessor在图像处理中的作用,以及ISPPipeline的各种技术,如LensShading、Flare、Aperture等。讨论了分辨率、色彩、噪声、锐度等关键概念,并分析了它们如何影响图像质量。此外,还涉及了图像文件格式、ISO、噪声模型和LED闪光灯等相关知识点。

1.Camera数据流Pipeline

  

1) TG(Timing Generate):从sensor获取数据,并送给ISP处理.

2) Platform Data Processor: 包括平台在后端对图像数据进行resize、rotate、flip、format convert等处理.它可以同时有两个buffer输出. 

   当normal preview时,port1输出给display,port2输出给face detection或者app preview callback

   当normal capture时,port1输出大图给jpeg encoder,port2输出小图给回显和thumbnail encode.

2.ISP Pipeline

1.Lens Shading

        产生原因:镜头边沿的成像光线与镜头光轴有一个较大的夹角,沿着视场边缘光线的光圈减小,通光路径边长,边角光线成像较大,使得镜头边缘的光线随着视角的变大成像亮度急剧地下降,呈现出画面角落的影像发暗。

横轴:像素的坐标位置;

纵轴:像素的亮度;(中间亮、四周暗)通过软件参数的方式补足四周的亮度

2.Flare

        产生原因:镜片的表面反射或镜筒、反光镜组的内面多引发的反射光,到达底面后造成画面整体活一部分产生雾蒙,降低了图像的鲜锐度。镜片的镀膜及内面防反射处理的加强,可以减少一定的光斑,但被摄物体的状况并不相同,不可能完全消除。

 特殊的光斑现象:红色、绿色的点(这种问题没办法通过软件修改,只能通过优化camera模组解决)

3.Shutter

        传统相机上控制感光片有效曝光时间的一种装置,手机相机指曝光时间的长短

 4.Aperture

        光圈:光通过的有效孔径;通常是一个用来控制光线透过镜头,进入机身内感光面的光量的装置,大小决定这通过镜头进入感光元件的光线的多少;光圈大小用f值表示,手机模组使用F2.8居多,F2.4次之。光圈F值=镜头的焦距/镜头光圈的直径.

光圈越大、通光孔径越小、透光量越少

5.Focal Length

        焦距:光学系统中衡量光的聚集或发散的度量方式,指平行光从透镜的光心到光聚集的焦点的距离,照相机中,镜头就相当于凸透镜,从镜片光学中心到CMOS成像平面的距离大概就等于焦距。

6.Defect Pixel

        坏点一般是指sensor制造过程中因为单个像素的电路异常而不能正常表现感光亮度。其表现形式为全黑情况下成像中单个的白色和彩色的点或者全白情况下成像中的黑点。当坏点无法被校正的话,会影响到正常拍照的图片

 7.Flicker

        Flicker是由工频干扰引起的,交流电光源都有光强的波动,在中国交流电频率是50Hz,光强的波动就是100Hz,周期10ms。如果camera曝光时间不是10ms的整数倍,那么在不同的感光面接收到的光能量一定不一样,体现在图像上就是有明暗条纹。

8.Moire

        摩尔纹是数码相机等设备上的感光元件出现的高频干扰,会使图片出现色彩的高频率条纹,摩尔纹是差拍原理的一种表现,空间频率略有差异的条纹叠加,由于条纹间隔的差异、重合位置会逐渐偏移也会形成差拍;

        消除摩尔纹,应当使镜头分辨率远小于感光元件的空间频率或者感光器件的像素密度能够大大提高,远超过镜头分辨率。

 9.False Color

        False Color的形成除了摩尔效应之外,感光器的三原色RGB色块排列也要付出很大一部分责任。在颜色取样的同时,因为空间差而没有取样到的颜色。数码相机的影响处理引擎仍会按照bayer pattern色块的顺序排列(RGB),试图为每一个像素去分配应有的颜色。这种情况在大量色块均匀分布时是正确的处理程序。可是遇到突出部活微细构造时,这样的颜色换算往往会出现错误而产生false color。

10.Purple Fringe

        紫边一般是镜头色散与颜色插值运算之间问题导致的。蓝B、红R俩色混合误差产生的,这个问题的发生在于拍摄高反差的景物时,在明暗交界的边缘部分会出现异常的紫色。

11.Image File Format - Bayer/RGB/YUV

        Bayer pattern:sensor获得彩色图像的方法是在sensor表面覆盖只含红、绿、蓝三色的马赛克滤镜,对其输出信号经过一定的处理算法实现彩色,所以这种感光器件的排列方式称为bayer pattern,因为只记录了单个的感光信息,通常也称为raw image.

        RGB:根据三基色原理,大部分光都可以用不同分量的R、G、B三色相加混合而成,调整三色的值可以混合成黑色光和白色光之间的各种各样颜色的光。

        YUV:现代彩色影响系统中,采用彩色的sensor进行摄像,将摄像得到的彩色信号进行插值分色,分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和俩个色差信号R-Y(U),B-Y(V)。这种色彩的表示方式就是YUV色彩空间,根据YUV的采样格式可以YUV444,YUV422,YUV420。

12.Resolution

        分辨率:成像平面上1毫米间距内能分辨开的黑白相间的线条对数,单位是"线对/毫米"(lp/mm,line-pairs/mm)。受限于光学、材料和其他种种的因素,每一个镜头、每一台数位相机都有其分辨率的极限,评判分辨率方法:MTF:引进反差对比的概念来坚定镜头解像力;目测ISO12233:达到多少TV lines.

        原本充足的反差可以很容易辨识出俩条线,而当空间频率加大时,也就是线条越紧密时,反差也逐渐缩小,终于反差衰减到全部变成灰色,再也分辨不出黑白条纹时,表示镜头的解像力已经达到极限。

13.Color Error

        色差 Color error为整个ColorChecker各色系的偏移值,是评估整体色偏的重要数据参考 

 14.Black Level

        主要原因是由于电子感光元件受热而产生电子的扰动,形成暗电流。此暗电流让电子感光元件在没有外在光源的情况下,仍会累积讯号,导致拍黑色的影像结果不够黑。

        影像结果:黑阶不够黑、影像整体呈现雾状、影像产生偏色。

        解法:由sensor本身将output Raw减去对应的Black Level值;由ISP将Input Raw减去对应的Black Level值。

15.Gamma

        Gamma为了补偿数位感光元件和人眼之间对于亮度感受上的差异。数位感光元件特点:线性曝光,亮部和暗部的敏感度相同;人眼:非线性,对于暗部感受较为敏锐;影响:Gamma拉的越高,影像整体越亮,但是Noise也会被加强。

 16.Saturation(薄度、色彩浓度)

        色彩有各种不同的表示方式,常见的有RGB、Lab、HSV等Color Domain,而Saturation为HSV Domain的其中一个维度。

        HSV Color Domain的三个维度:1.H:Hue 色相,色彩在标准色环上的位置,以角度表示;2.S:Saturation 饱和度,色彩的纯度,0:灰色,100:完全饱和;3.V:Luminance 明度,色彩的亮度,0:黑色,100:白色。

        饱和度和噪点的关系很难搞

 17.ISO

        原本是传统摄像用来衡量底片感光度的单位,数值越高,感光度越强,但Noise也越明显,数位摄影也沿用此标准;ISO数值每增加一倍,感光度也增加一倍;SV为衡量ISO的单位,ISO为100时,SV=5。

         ISO与噪点的权衡

18.Sharpness(锐利度)

        主要是指影像的锐利度,影像中的高频成分越多,影像就越锐利;锐利度主要有镜头决定,镜头品质好,成像越锐利,镜头品质差,成像越模糊。

        Sharpness可以由后端影像处理来加强,但是会有以下俩个Side Effect.

        1.Over Shoot:为了加强锐利度,ISP会增加边沿的对比度,导致影像在Edge出现白边;

        2.Noise Enhance:为了加强锐利度,导致影像的Noise被当成Edge放大;

 19.Contrast

        对比度代表影像中亮(白)和暗(黑)的差异,高对比就是白的地方够亮,黑的地方够黑,一般对比比较低的情形有以下俩种情况:整体过亮:过曝/Gamma拉太高;整体过暗:曝光不足/Gamma拉太少。

      

20.Image Noise 

 噪声模型:统计学模型

 21.LED Flash

### Android Camera Raw Data Injection Implementation In the context of Android development, raw data injection (RDI) into the camera pipeline is not directly supported by standard APIs provided by the Android SDK. However, developers can achieve similar functionality through custom implementations or using specialized hardware interfaces. #### Custom Camera Application Development To implement raw data injection within an Android application: For injecting raw image data into a camera stream, one approach involves creating a custom camera application that bypasses the default camera interface and interacts with lower-level components. This requires access to native libraries and possibly modifications at the device driver level[^1]. ```java // Example pseudo-code for handling custom camera operations public class CustomCameraActivity extends AppCompatActivity { private Camera mCamera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Initialize camera object here try { injectRawData(byte[] rawData); // Hypothetical method for raw data injection } catch (Exception e) { Log.e("CustomCamera", "Failed to inject raw data"); } } private void injectRawData(byte[] data) throws Exception { // Code to interact with low-level API or drivers would go here } } ``` This code snippet demonstrates how one might structure a function call intended to perform raw data injection; however, actual implementation details depend heavily on specific requirements and available resources. #### Using Frameworks like Dagger for Dependency Management When building complex applications involving multiple modules such as those required for advanced camera features including RDI, frameworks like Dagger provide efficient dependency injection mechanisms which help manage dependencies between different parts of the system efficiently[^2]. While Dagger itself does not facilitate direct interaction with camera hardware, it plays a crucial role in organizing project architecture so that integrating third-party solutions becomes easier when necessary. --related questions-- 1. What are some common challenges faced while developing custom camera apps? 2. How do manufacturers typically enable support for raw data processing in their devices? 3. Can you recommend any open-source projects focusing on enhancing Android's camera capabilities? 4. Are there alternative methods besides modifying the kernel to gain deeper control over the camera module?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值