首页 » 脚本文章 » DIY相机(一)libcamera库(相机曝光图像传感器调谐),相机曝光控制。

DIY相机(一)libcamera库(相机曝光图像传感器调谐),相机曝光控制。

雨夜梧桐 2024-07-24 00:37:41 脚本文章 0

扫一扫用手机浏览

文章目录 [+]

DIY相机首先是要确定使用的相机型号。
兼容树莓派,画质好一些的,目前主要有两款:一是Raspberry Pi Camera Module 3,二是Raspberry Pi HQ Camera。

下图是Raspberry Pi Camera Module 3的相关特性。
支持自动对焦和HDR等特性,视场角为75度,1200万像素。

Raspberry Pi Camera Module 3使用的是索尼imx708传感器。
此款传感器曾搭载在如OPPO Find X2等旗舰手机上。
imx708传感器的参数如下表所示:

DIY相机(一)libcamera库(相机曝光图像传感器调谐) DIY相机(一)libcamera库(相机曝光图像传感器调谐) 脚本文章
(图片来自网络侵删)

其中说一下滚动快门。
Rolling Shutter(滚动快门)是一种相机传感器工作方式,与其对立的是 Global Shutter(全局快门)。

在 Rolling Shutter 中,相机传感器会逐行地从顶部到底部逐个曝光,就像一个滚动的帘子一样。
这意味着在一次曝光过程中,不同行的像素会有微小的时间差。

DIY相机(一)libcamera库(相机曝光图像传感器调谐) DIY相机(一)libcamera库(相机曝光图像传感器调谐) 脚本文章
(图片来自网络侵删)

这种方式在拍摄运动速度较慢或相机固定时通常不会出现问题。
然而,当拍摄快速移动的物体或相机本身在移动时,Rolling Shutter 可能会导致图像中出现奇怪的扭曲效果,这被称为“滚动快门效应”。

相比之下,Global Shutter 会在同一时间瞬间曝光整个图像传感器,而不是逐行进行。
这意味着在拍摄运动物体或相机移动时,Global Shutter 不会导致扭曲效应,但相机可能会更昂贵,因为实现全局快门技术的传感器通常较复杂。

因此,在选择相机时,要考虑拍摄条件,如果你需要拍摄快速运动的物体,可能需要优先选择支持 Global Shutter 的相机。

第二款Raspberry Pi HQ Camera的优点是CMOS与镜头分离,可以根据需要搭载不同的镜头,比如长焦镜头、变焦镜头等,其使用imx477传感器。
这款camera的详细信息等我们用时,再做详细说明。
(主要是价格不菲,CMOS+镜头要小1k)。

除了考虑camera,还要考虑与树莓派的兼容性。
下表是一个不同传感器与树莓派主板和驱动的对应关系。

从表中可以看到,imx708传感器,只支持libcamera驱动,而不是之前的旧的raspicam驱动。
使用libcamera驱动,意味着我们在安装树莓派系统时,对应的Debian version要高于_Bullseye_,例如我用的就是Debian version: 12 (bookworm)系统。

拍照测试

使用bookworm系统的话,系统安装完成后,libcamera库是直接可以使用的。
树莓派也会自动连接camera。
但是首先确认/boot/config.txt文件的内容如下面的文件内容所示,尤其是camera_auto_detect=1项。
对于树莓派camera module3来说,树莓派是可以自动检测的,不需要我们手动指定dtoverlay,后续我们用树莓派HQ camera的时候,其使用imx477传感器,这时候需要我们手动指定一下dtoverlay的型号。

# For more options and information see# http://rptl.io/configtxt# Some settings may impact device functionality. See link above for details # Uncomment some or all of these to enable the optional hardware interfaces#dtparam=i2c_arm=on#dtparam=i2s=on#dtparam=spi=on # Enable audio (loads snd_bcm2835)dtparam=audio=on # Additional overlays and parameters are documented# /boot/firmware/overlays/README # Automatically load overlays for detected camerascamera_auto_detect=1 # Automatically load overlays for detected DSI displaysdisplay_auto_detect=1 # Automatically load initramfs files, if foundauto_initramfs=1 # Enable DRM VC4 V3D driverdtoverlay=vc4-kms-v3dmax_framebuffers=2 # Don't have the firmware create an initial video= setting in cmdline.txt.# Use the kernel's default instead.disable_fw_kms_setup=1 # Run in 64-bit modearm_64bit=1 # Disable compensation for displays with overscandisable_overscan=1 # Run as fast as firmware / board allowsarm_boost=1 [cm4]# Enable host mode on the 2711 built-in XHCI USB controller.# This line should be removed if the legacy DWC2 controller is required# (e.g. for USB device mode) or if USB support is not required.otg_mode=1 [all]

然后我们更新下系统

sudo apt updatesudo apt upgrade

预览camera流

直接使用libcamera-hello程序打开摄像头预览

sudo libcamera-hello -t 0

-t表示camera流持续多长时间,0表示一直持续。

拍摄照片

可以使用libcamera-jpeg命令拍摄图片。

libcamera-jpeg -o test.jpg

这个拍摄指令会显示一个5秒左右的预览串口,然后拍摄一张全像素的JPEG图像,保存为test.jpg。

另外,树莓派的libcamera驱动会针对不同的摄像头模块调用一个调谐文件,调谐文件中提供了各种参数,调用摄像头的时候,libcamera会调用调谐文件中的参数,结合算法对图像进行处理最终输出成预览画面。
由于libcamera驱动只能自动感光芯片信号,但是摄像头的最终显示效果还会受整个模块的影响,调谐文件的使用就是为了可以灵活处理不同模块的摄像头,调整提高图像质量。

在这里,我们调用系统中提供的针对imx708的调谐文件。

libcamera-jpeg -o test1.jpg --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx708.json

但是通过使用faststone软件对比,两张图片的成像并没有什么差距。
调谐文件同样适用于其他的libcamera指令。

还可以指定出图的分辨率以及预览窗口的预览时间。
-t 2000指2s的预览时间。

libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480

曝光补偿和曝光增益

树莓派的AEC/AGX算法允许程序指定曝光补偿,也就是通过设置EV数值来调整图像的亮度。
比如:

libcamera-jpeg --ev -0.5 -o darker.jpglibcamera-jpeg --ev 0 -o normal.jpglibcamera-jpeg --ev 0.5 -o brighter.jpg

我们对如下的名词进行解释:

AEC(Automatic Exposure Control)和 AGX(Automatic Gain Control)是图像处理中常用的两种自动控制算法,它们通常用于相机或摄像机系统中,以调整图像的曝光和增益,以确保在不同光照条件下获得合适的图像质量。

AEC(自动曝光控制):AEC 算法通过调整快门速度(曝光时间)来控制图像的亮度。
在低光条件下,它会增加曝光时间以提高亮度,而在高光条件下,它会减少曝光时间以避免图像过曝。
AGX(自动增益控制):AGX 算法通过调整图像的放大倍数来控制亮度。
它可以在光线较暗的情况下增加图像信号的放大程度,以提高亮度。

EV代表曝光值(Exposure Value),它是一个相机设置,用于调整照片的曝光水平。
EV值的变化会影响相机的快门速度、光圈和ISO等参数,从而改变照片的亮度和细节。

EV值是一个以对数形式表示的指标,通常以“EV +/- 数值”表示,例如+1 EV 或 -2 EV。
EV值的变化一般以1/3或1/2 EV为单位进行调整。

正的EV值表示相机会增加曝光,使图像变亮。
负的EV值表示相机会减少曝光,使图像变暗。

曝光补偿常用于情况复杂、光照条件变化或拍摄者希望在相机自动设置之外进行调整的情况。
例如,在拍摄对比度很高的场景时,你可能会使用曝光补偿来避免过曝或欠曝的情况。

我们上面3张照片通过调整EV值来实现不同的曝光等级。
下表是上面3张图片的exif信息。

点击DIY相机(一)libcamera库 - 古月居可查看全文

标签:

相关文章