<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          全面了解攝像頭

          共 9402字,需瀏覽 19分鐘

           ·

          2021-05-25 16:29


          點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          本文轉(zhuǎn)自|AI算法與圖像處理

          一、攝像頭結(jié)構(gòu)和工作原理.

             拍攝景物通過(guò)鏡頭,將生成的光學(xué)圖像投射到傳感器上,然后光學(xué)圖像被轉(zhuǎn)換成電信號(hào),電信號(hào)再經(jīng)過(guò)模數(shù)轉(zhuǎn)換變?yōu)閿?shù)字信號(hào),數(shù)字信號(hào)經(jīng)過(guò)DSP加工處理,再被送到電腦中進(jìn)行處理,最終轉(zhuǎn)換成手機(jī)屏幕上能夠看到的圖像。

          數(shù)字信號(hào)處理芯片DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通過(guò)一系列復(fù)雜的數(shù)學(xué)算法運(yùn)算,對(duì)數(shù)字圖像信號(hào)參數(shù)進(jìn)行優(yōu)化處理,并把處理后的信號(hào)通過(guò)USB等接口傳到PC等設(shè)備。DSP結(jié)構(gòu)框架:

            1. ISP(image signal processor)(鏡像信號(hào)處理器)

            2. JPEG encoder(JPEG圖像解碼器)

            3. USB device controller(USB設(shè)備控制器)

              常見(jiàn)的攝像頭傳感器類(lèi)型主要有兩種,

          一種是CCD傳感器(Chagre Couled Device),即電荷耦合器

          一種是CMOS傳感器(Complementary Metal-Oxide Semiconductor)即互補(bǔ)性金屬氧化物半導(dǎo)體

          CCD的優(yōu)勢(shì)在于成像質(zhì)量好,但是制造工藝復(fù)雜,成本高昂,且耗電高。在相同分辨率下,CMOS價(jià)格比CCD便宜,但圖像質(zhì)量相比CCD來(lái)說(shuō)要低一些。CMOS影像傳感器相對(duì)CCD具有耗電低的優(yōu)勢(shì),加上隨著工藝技術(shù)的進(jìn)步,CMOS的畫(huà)質(zhì)水平也不斷地在提高,所以目前市面上的手機(jī)攝像頭都采用CMOS傳感器。

          手機(jī)攝像頭的簡(jiǎn)單結(jié)構(gòu)

          濾光片有兩大功用:

            1.濾除紅外線。濾除對(duì)可見(jiàn)光有干擾的紅外光,使成像效果更清晰。

                 2.修整進(jìn)來(lái)的光線。感光芯片由感光體(CELL)構(gòu)成,最好的光線是直射進(jìn)來(lái),但為了怕干擾到鄰近感光體,就需要對(duì)光線加以修整,因此那片濾光片不是玻璃,而是石英片,利用石英的物理偏光特性,把進(jìn)來(lái)的光線,保留直射部份,反射掉斜射部份,避免去影響旁邊的感光點(diǎn).


          二、相關(guān)參數(shù)和名詞

          1、常見(jiàn)圖像格式

              1.1 RGB格式:

              傳統(tǒng)的紅綠藍(lán)格式,比如RGB565,RGB888,其16-bit數(shù)據(jù)格式為5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼對(duì)綠色比較敏感。

              1.2 YUV格式:

              luma (Y) + chroma (UV) 格式YUV是指亮度參量和色度參量分開(kāi)表示的像素格式,而這樣分開(kāi)的好處就是不但可以避免相互干擾,還可以降低色度的采樣率而不會(huì)對(duì)圖像質(zhì)量影響太大。YUV是一個(gè)比較籠統(tǒng)地說(shuō)法,針對(duì)它的具體排列方式,可以分為很多種具體的格式。

          色度(UV)定義了顏色的兩個(gè)方面─色調(diào)與飽和度,分別用CB和CR表示。其中,Cr反映了RGB輸入信號(hào)紅色部分與RGB信號(hào)亮度值之間的差異。而Cb反映的是RGB輸入信號(hào)藍(lán)色部分與RGB信號(hào)亮度值之間的差異。

          主要的采樣格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。

              1.3 RAW data格式:

              RAW圖像就是CMOS或者CCD圖像感應(yīng)器將捕捉到的光源信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)的原始數(shù)據(jù)。RAW文件是一種記錄了數(shù)碼相機(jī)傳感器的原始信息,同時(shí)記錄了由相機(jī)拍攝所產(chǎn)生的一些元數(shù)據(jù)(Metadata,如ISO的設(shè)置、快門(mén)速度、光圈值、白平衡等)的文件。RAW是未經(jīng)處理、也未經(jīng)壓縮的格式,可以把RAW概念化為“原始圖像編碼數(shù)據(jù)”或更形象的稱(chēng)為“數(shù)字底片”。sensor的每一像素對(duì)應(yīng)一個(gè)彩色濾光片,濾光片按Bayer pattern分布。將每一個(gè)像素的數(shù)據(jù)直接輸出,即RAW RGB data

          Raw data(Raw RGB)經(jīng)過(guò)彩色插值就變成RGB.

          RAW格式圖像示例

          2. 相關(guān)技術(shù)指標(biāo)

          2.1 圖像解析度/分辨率(Resolution)

            SXGA(1280 x1024)又稱(chēng)130萬(wàn)像素

            XGA(1024 x768)又稱(chēng)80萬(wàn)像素

            SVGA(800 x600)又稱(chēng)50萬(wàn)像素

            VGA(640x480)又稱(chēng)30萬(wàn)像素(35萬(wàn)是指648X488)

            CIF(352x288) 又稱(chēng)10萬(wàn)像素

            SIF/QVGA(320x240)

            QCIF(176x144)

            QSIF/QQVGA(160x120)

          2.2 彩色深度(色彩位數(shù))

              256色灰階,有256種灰色(包括黑白)。

              15或16位彩色(高彩色):65,536種顏色。

              24位彩色(真彩色):每種原色都有256個(gè)層次,它們的組合便有256*256*256種顏色。

              32位彩色:除了24位彩色的顏色外,額外的8位是儲(chǔ)存重疊圖層的圖形資料(alpha頻道)。

          2.3 光學(xué)變焦和數(shù)碼變焦:

              光學(xué)變焦: 通過(guò)鏡頭的調(diào)整,拉近拉遠(yuǎn)所要拍攝的對(duì)象,保持像素不變和畫(huà)質(zhì)基本不變,卻可以拍到自己             理想的物像。
              數(shù)碼變焦:其實(shí)沒(méi)有什么變焦,只是從原圖片中截取出來(lái)放大,你從液晶屏幕上看到變大了,實(shí)際上畫(huà)質(zhì)并沒(méi)有本質(zhì)提高,而像素比你相機(jī)能拍攝的最大像素降低了。畫(huà)質(zhì)上說(shuō)基本是雞肋把,但是可以提供一些方便。

          2.4 圖像壓縮方式:

              JPEG/M-JPEG

              H.261/H.263

              MPEG

              H.264 

          2.5 圖像噪音:

            指的是圖像中的雜點(diǎn)干撓。表現(xiàn)為圖像中有固定的彩色雜點(diǎn)。

          2.6 自動(dòng)白平衡處理技術(shù)(auto White Balance)

                簡(jiǎn)單來(lái)說(shuō)就是:攝像機(jī)對(duì)白色物體的還原。相關(guān)概念:色溫。

          2.7 視角

            與人的眼睛成像是相成原理,簡(jiǎn)單說(shuō)就是成像范圍。

          2.8 自動(dòng)對(duì)焦:

                 自動(dòng)對(duì)焦可以分成兩大類(lèi):一類(lèi)是基于鏡頭與被拍攝目標(biāo)之間距離測(cè)量的測(cè)距自動(dòng)對(duì)焦,另一類(lèi)是基于對(duì)焦屏上成像清晰的聚焦檢測(cè)自動(dòng)對(duì)焦(清晰度算法)。

          注:變焦就是把遠(yuǎn)處的物體拉近。對(duì)焦是讓圖像清晰。

          2.9 自動(dòng)曝光和Gamma

                就是光圈快門(mén)的組合。光圈,快門(mén)速度ISOGamma即人眼對(duì)亮度的響應(yīng)曲線。


          三、高通的CAMERA部分硬件架構(gòu)


          CAMERA部分硬件架構(gòu)

          VFE:VIDEO front-end 視頻前端

          VPE:Video preprocessing 視頻預(yù)處理

          攝像頭模組中自帶了ISP(圖像信號(hào)處理器),所以,VFE和VPE有關(guān)圖像效果處理的功能都是關(guān)閉的。

          1.VFE的功能:

              1.1 通過(guò)算法提高圖像的質(zhì)量。

              1.2 提供高分辨率的圖像的AWB(自動(dòng)白平衡)/AE(自動(dòng)曝光)/AF(自動(dòng)對(duì)焦)算法處理。

              1.3 圖像衰減校正。

              1.4 低光下的噪聲濾波。

              1.5 圖像色彩效果優(yōu)化。

              1.6 皮膚顏色效果優(yōu)化。

              1.7 圖像抖動(dòng)計(jì)算。

              1.亮度適應(yīng)算法。

          2.VPE的功能:

              2.1 圖像穩(wěn)定性。

              2.2 數(shù)字對(duì)焦。

              2.3 圖像旋轉(zhuǎn)。

              2.4 Overlay。

          三、android系統(tǒng)camera基本架構(gòu)

          1.應(yīng)用層

          Camera 的應(yīng)用層在Android 上表現(xiàn)為直接調(diào)用SDK API 開(kāi)發(fā)的一個(gè)Camera 應(yīng)用APK 包。代碼在/android/packages/apps/Camera 下。主要對(duì) android.hardware.Camera(在Framework中) 類(lèi)的調(diào)用,并且實(shí)現(xiàn)Camera 應(yīng)用的業(yè)務(wù)邏輯和UI 顯示。一個(gè)Android 應(yīng)用中若要使用這個(gè)android.hardware.Camera類(lèi),需要在Manifest 文件聲明Camera 的權(quán)限,另外還 需要添加一些<uses-feature> 元素來(lái)聲明應(yīng)用中的Camera 特性,如自動(dòng)對(duì)焦等。 具體做法可如下:

          <uses-permission android:name = "android.permission.CAMERA" />

          <uses-feature android:name = "android.hardware.camera" />

          <uses-feature android:name = "android.hardware.camera.autofocus" />

          2.Framework層

          2.1 android.hardware.Camera:代碼位置/android/frameworks/base/core/java/android/hardware/Camera.java

          這部分目標(biāo)是framework.jar。這是是Android 提供給app層調(diào)用的java接口。這個(gè)類(lèi)用來(lái)連接或斷開(kāi)一個(gè)Camera 服務(wù),設(shè)置拍攝參數(shù),開(kāi)始、停止預(yù)覽,拍照等。

          2.2 android.hardware.Camera這個(gè)類(lèi)是和JNI中定義的類(lèi)是一個(gè),有些方法通過(guò)JNI的方式調(diào)用本地代碼得到,有些方法自己實(shí)現(xiàn)。 
          Camera的JAVA native調(diào)用部分(JNI):/android/frameworks/base/core/jni/android_hardware_Camera.cpp。Camera.java 承接JAVA 代碼到C++ 代碼的橋梁。編譯生成libandroid_runtime.so 。libandroid_runtime.so庫(kù)是公用的, 其中除了Camera 還有其他方面的功能。

          2.3 Camera框架的client部分:

          代碼位置:/android/frameworks/base/libs/camera/下5個(gè)文件。

          Camera.cpp

          CameraParameters.cpp

          ICamera.cpp

          ICameraClient.cpp

          ICameraService.cpp

          它們的頭文件在/android/frameworks/base/include/camera目錄下。

          這部分的內(nèi)容編譯生成libcamera_client.so 。在Camera 模塊的各個(gè)庫(kù)中,libcamera_client.so 位于核心的位置,作為Camera 框架的 Client 客戶端部分,與另外一部分內(nèi)容服務(wù)端 libcameraservice.so 通過(guò)進(jìn)程間通訊(即Binder 機(jī)制)的方式進(jìn)行通訊。

          2.4 Camera框架的service部分:

          代碼位置:/android/frameworks/base/services/camera/libcameraservice。

          這部分內(nèi)容被編譯成庫(kù)libcameraservice.so 。CameraService 是Camera 服務(wù),Camera 框架的中間層,用于鏈接CameraHardwareInterface 和Client部分 ,它通過(guò)調(diào)用實(shí)際的Camera 硬件接口來(lái)實(shí)現(xiàn)功能,即下層HAL層。

          四. 攝像頭預(yù)覽、拍照、錄像基本數(shù)據(jù)流向和處理流程以及驅(qū)動(dòng)調(diào)試

          HAl層相關(guān)代碼:(frameworks/base/services/camera/libcameraservice/CameraService.cpp)vendor/qcom/android-open/libcamera2/QualcommCameraHardware.cppvendor/qcom/proprietary/mm-camera/apps/appslib/mm_camera_interface.cvendor/qcom/proprietary/mm-camera/apps/appslib/camframe.cvendor/qcom/proprietary/mm-camera/apps/appslib/snapshot.cvendor/qcom/proprietary/mm-camera/apps/appslib/jpeg_encoder.cvendor/qcom/proprietary/mm-camera/apps/appslib/cam_frame_q.cvendor/qcom/proprietary/mm-camera/apps/appslib/cam_display.cvendor/qcom/proprietary/mm-camera/targets/vfe31/8x60/vendor/qcom/proprietary/mm-camera/targets/vfe31/common/vpe1/QualcommCameraHardware.cpp主要分為三個(gè)部分,preview,snapshot,video。它們分別用一個(gè)pthread進(jìn)行處理。另外還有auto focus功能也是用pthread的方式處理。預(yù)覽或拍照、視頻線程處理得到的數(shù)據(jù)幀都以datacallback的方式回調(diào)到上層CameraService.cpp中,進(jìn)行存儲(chǔ)或預(yù)覽等操作。以下是HAL層部分的代碼大概的調(diào)用結(jié)構(gòu)流程。


          1. 整個(gè)模塊主要巡行三個(gè)主線程:control、config及frame。

            control用來(lái)執(zhí)行總的控制,是上層控制接口。

                  config主要進(jìn)行一些配置,這個(gè)線程里面主要進(jìn)行3A的工作,另外還有一些跟效果有關(guān)的設(shè)置;

                  frame線程主要用來(lái)做幀queue的循環(huán)獲取處理。所有事件或狀態(tài)的反饋,用回調(diào)函數(shù)的方式傳回QualcommCameraHardware.cpp。

          2. 驅(qū)動(dòng)部分從設(shè)備驅(qū)動(dòng)s5k8aa.c開(kāi)始。新建平臺(tái)設(shè)備后,執(zhí)行入口函數(shù)probe時(shí),調(diào)用創(chuàng)建攝像頭設(shè)備功能函數(shù)

          int msm_camera_drv_start(struct platform_device *dev,                                          

                                          int (*sensor_probe)(const struct msm_camera_sensor_info *, 

                                                      struct msm_sensor_ctrl *))

          并將設(shè)備信息結(jié)構(gòu)體和攝像頭設(shè)備調(diào)用入口sensor_probe傳入。msm_camera_drv_start(xxx)函數(shù)在msm_camera.c中實(shí)現(xiàn)。他創(chuàng)建了提供上層調(diào)用的四個(gè)終于設(shè)備結(jié)點(diǎn):

          /dev/msm_camera/frame%d

          /dev/msm_camera/control%d

          /dev/msm_camera/config%d

          /dev/msm_camera/pic%d

          實(shí)現(xiàn)了上層庫(kù)對(duì)VFE模塊,VPE模塊,jpeg_encoder模塊和攝像頭sensor模塊驅(qū)動(dòng)的控制調(diào)用接口。在file_operations中的相應(yīng)函數(shù)中分別實(shí)現(xiàn)的是這些設(shè)備的新建初始化和IOCTL功能調(diào)用接口。

          然后這個(gè)函數(shù)還創(chuàng)建了四個(gè)工作隊(duì)列: 

          struct msm_device_queue event_q; 

          struct msm_device_queue frame_q; 

          struct msm_device_queue pict_q; 

          struct msm_device_queue vpe_q;

          event_q包括/dev/msm_camera/control%d傳入的控制信號(hào)隊(duì)列,用于將上層傳下來(lái)的控制命令(command)傳到config thread中去。

          frame_q用于對(duì)圖像幀的操作管理,預(yù)覽或錄像時(shí)幀將傳遞給DSP進(jìn)行處理。

          pict_q包含拍照幀,用于給jpeg_encoder進(jìn)行圖像編碼處理。

          vpe_q是VPE控制命令隊(duì)列。

          s5k8aa.c是相應(yīng)攝像頭設(shè)備的驅(qū)動(dòng)部分。它的功能很簡(jiǎn)單,主要實(shí)現(xiàn)sensor模塊的創(chuàng)建、初始化和控制。主要實(shí)現(xiàn)以下三個(gè)函數(shù): 

          s->s_init = ov2685_sensor_init; 

          s->s_release = ov2685_sensor_release; 

          s->s_config = ov2685_sensor_config;

          ov2685_sensor_init函數(shù):    

          主要實(shí)現(xiàn)攝像頭的上電、時(shí)鐘控制(MCLK)、設(shè)備初始化功能。    上電分為DOVDD、DVDD、AVDD、reset、PWDN幾個(gè)部分。需要按照設(shè)備要求順序操作,一般時(shí)鐘控制順序也包含在內(nèi)。    設(shè)備初始化過(guò)程是將sensor設(shè)備的所有寄存器全部初始化一遍,采用IIC方式將初始化寄存器地址和值全部發(fā)送到sensor端。完成后此時(shí)攝像頭模組才能正常工作,并將圖像通過(guò)MIPI線路傳送到CPU端。

          ov2685_sensor_config函數(shù):    

          主要實(shí)現(xiàn)對(duì)sensor的各種配置接口,相應(yīng)的有幀率配置,白平衡效果設(shè)置,曝光度設(shè)置,特效設(shè)置等等。相應(yīng)接口將配置好的寄存器列表通過(guò)IIC發(fā)送到sensor中。

          3. 攝像頭調(diào)試中的幾個(gè)問(wèn)題點(diǎn):

          1.1 是否正確上電,是否有時(shí)鐘波形輸出。    檢測(cè)輸出電壓的電壓值是否和上電時(shí)序以及MCLK是否符合sensor的要求。這部分可以用示波器和萬(wàn)用表測(cè)量。測(cè)量電壓值和上電時(shí)序以及MCLK的時(shí)鐘頻率是否正確。

          1.2 IIC讀寫(xiě)是否正常。調(diào)試CPU與ISP間的I2C通信。    檢測(cè)包括IIC地址是否正確,協(xié)議是否匹配。這部分也可以用示波器測(cè)量IIC的SDA、CLK的峰值、波形邏輯是否正確。

          1.3 正確上電并初始化以后sensor模塊是否正常工作。    這部分主要通過(guò)用示波器測(cè)量MIPI線路的數(shù)據(jù)和時(shí)鐘PIN是否正確,它的波形是否含有數(shù)據(jù),是否標(biāo)準(zhǔn)波形,峰值有沒(méi)有達(dá)到要求等。

          1.4 如果以上都正確了以后,MIPI控制器將接收到中斷,并開(kāi)始處理圖像信號(hào)。此時(shí)如果出錯(cuò),可以通過(guò)中斷信號(hào)的出錯(cuò)值查看錯(cuò)誤狀態(tài)。除CPU端是否正常初始化工作的問(wèn)題外,需要關(guān)注模組端設(shè)置的圖像格式和CPU接收的默認(rèn)圖像格式和圖像大小(SIZE)是否一致。模組中圖片格式和圖像大小通過(guò)寄存器值查看。CPU端接收?qǐng)D片格式和圖像大小在HAL部分的s5k8aa中設(shè)置, 拍照源圖像大小和預(yù)覽源圖像大小需要分別設(shè)置。

          以上部分完成后,攝像頭可以正確預(yù)覽。

           End 

          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 63
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丁香五月天av | 亚洲区无码在线播放 | 欧美AAA黄片 | 色蜜桃av | 亚洲少妇毛片 |