Camera 基础概念理解

值得一读:

Dissecting the Camera Matrix, Part 2: The Extrinsic Matrix

Dissecting the Camera Matrix, Part 3: The Intrinsic Matrix 

对应资源同步上传啦

目录

✭pose:position and orientation 位置和方位;

✭camera:the image sensor 已校准的图像传感器

 ✭camera intrinsic/extrinsic matrix

Intrinsic Matrix(内在矩阵)

Extrinsic Matrix(外在矩阵)

 ✭ camera calibarion(相机校正)Camera几何calibration作用


Camera参数包括内参intrinsics、外参extrinsics和变形系数distortion coefficients

✭pose:position and orientation 位置和方位;

✭camera:the image sensor 已校准的图像传感器

确定图像(或立体图像,图像序列)中物体姿态的具体任务为pose estimation姿态估计 

该问题可以根据图像传感器的配置和方法的选择以不同的方式解决。

可以区分三类方法:

  • 分析或几何方法:假设图像传感器(相机)已校准,并且场景中的 3D 点和图像中的 2D 点的映射是已知的。如果物体的几何形状也是已知的,则意味着物体在相机图像上的投影图像是物体姿势的众所周知的函数。一旦确定了对象上的一组控制点,通常是角点或其他特征点,就可以从一组将点的 3D 坐标与其 2D 图像坐标相关联的方程中求解姿态变换。如果点之间的对应关系未知,则确定点云相对于另一个点云的姿态的算法称为点集配准算法。
  • 遗传算法方法:如果不需要实时计算对象的姿态,则可以使用遗传算法。这种方法是稳健的,尤其是当图像未完美校准时。在这种特殊情况下,姿态代表遗传表示,目标控制点与图像的投影之间的误差是适应度函数
  • 基于学习的方法:这些方法使用基于人工学习的系统,学习从 2D 图像特征到姿势变换的映射。简而言之,这意味着必须在学习阶段向系统呈现足够大的物体图像集,以不同的姿态呈现给系统。一旦学习阶段完成,系统应该能够在给定对象图像的情况下呈现对象姿态的估计。

 ✭camera intrinsic/extrinsic matrix

Intrinsic Matrix(内在矩阵)

通过它可以将三维camera坐标转换为二维的图像坐标,此投影变化如针孔相机。

焦距(Focal Length):针孔到胶片 f=fx=fy      单位:像素pixels

Principal point Offset:

            principle axis表示和胶片垂直且通过针孔的线,与胶片的交点为principal point

Principal point偏移量:principal point相对于胶片原点的位置,取决于胶片原点的位置

Axis Skew,s:用来减少照片在投影时的变形


Extrinsic Matrix(外在矩阵)

描述camera在世界坐标系中的位置以及其所指的方向

作用:camera坐标和世界坐标之间的转换

2矩阵:左边3×3的旋转(rotation)矩阵,右边3×1位移(translation)列向量


  ✭ camera calibarion(相机校正)Camera几何calibration作用

-用来估算出camera的镜头的参数,从而修正照片变形,测量物体的尺寸;

-计算camera在场景中的位置,应用于机器人、导航系统、3D-sence reconstruction

3D世界点坐标+2D图片点坐标=估计相机参数

利用多个校准图像来获得对应的关系以求解摄像机参数

通过外参-世界坐标系点变换相机坐标系中点

通过内参-相机坐标系映射图像平面

 

  Distortion in Camera Calibration(相机校准失真)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# NDK Camera [![Build Status](https://travis-ci.org/luncliff/NdkCamera.svg?branch=master)](https://travis-ci.org/luncliff/NdkCamera) > If there is an issue with this library, please mail to [email protected] Simplified [Android Camera 2 API](https://www.youtube.com/watch?v=Bi4QjMfSOE0). Available for both Java/JNI. - API level: 24+ - NDK ### Reference - Personal Template Project: https://github.com/luncliff/Muffin - [API Reference](https://developer.android.com/ndk/reference/group/camera) - [Android Camera Overview](https://source.android.com/devices/camera) - Camera HAL3: https://source.android.com/devices/camera/camera3 - HAL Subsystem: https://source.android.com/devices/camera/camera3_requests_hal - Multi-Camera Support: https://source.android.com/devices/camera/multi-camera - Version Support: https://source.android.com/devices/camera/versioning - Android Media - https://source.android.com/devices/media/framework-hardening ## How to ### Build For **Windows** environment, latest [Android Studio](https://developer.android.com/studio/) is recommended. For **Linux/MacOS**, [Gradle 4.10.2](https://gradle.org/) will be enough. ```console $ git clone https://github.com/luncliff/NdkCamera $ cd ./NdkCamera $ gradle assemble # Build: libndk_camera.so & NdkCamera.aar ``` ### Test Connect your device and run the test with Gradle. Please reference the [test codes](./android/test/ndcam/). ```console $ gradle connectedAndroidTest # Run test ``` ### Use The following code shows working with `SurfaceView` class. ```java package dev.example; // ... import dev.ndcam.*; // Expect we already have a camera permission public class SurfaceDisplay implements SurfaceHolder.Callback { SurfaceView surfaceView; Surface surface; ndcam.Device camera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... // Load/Init library ndcam.CameraModel.Init(); surfaceView = findViewById(R.id.surfaceView); SurfaceHolder holder = surfaceView.getHolder(); holder.setFixedSize(1920, 1080); holder.setFormat(ImageFormat.YUV_420_888); holder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { // Get all devices in array form for(ndcam.Device device : ndcam.CameraModel.GetDevices()) if(device.facing() == CameraCharacteristics.LENS_FACING_BACK) camera = device; } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) { // Make a repeating caputre request with surface surface = surfaceHolder.getSurface(); camera.repeat(surface); } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { // No more capture if(camera != null) camera.stopRepeat(); } } ```
### 回答1: camera2demo是一个Android应用程序演示示例,用于演示如何使用Android相机2 API拍摄照片和录制视频。camera2demo具有用户界面,可以启用相机,选择不同的摄像头(前置或后置),调整预览尺寸,并拍摄照片或录制视频。 该示例应用程序展示了如何使用CameraManager类来获取可用的相机设备列表,并使用CameraCharacteristics类获取相机特性,如支持的预览尺寸和拍摄模式等。它还使用了TextureView来作为相机预览的界面元素,并使用了CaptureRequest和CaptureSession类来捕获照片和录制视频。 camera2demo还包括一些基本功能,如闪光灯控制,自动对焦和曝光控制。它允许用户通过点击屏幕来拍摄照片,并通过长按来录制视频。它还提供了一些额外的设置选项,如预览比例和对焦模式的调整。 使用camera2demo可以帮助开发人员学习如何使用Android相机2 API来构建自己的相机应用程序。它提供了一个简单易懂的示例,展示了相机2 API的核心概念和功能。通过阅读和理解camera2demo的源代码,开发人员可以更好地了解相机2 API的用法,并根据自己的需求进行扩展和定制。 ### 回答2: Camera2Demo是一个示例程序,用于展示Android相机API的使用方法。相机API是Android系统提供的一组功能强大的相机控制接口,它允许开发者在应用程序中直接访问设备的相机硬件,并实现各种相机功能。 Camera2Demo的主要目的是帮助开发者理解和学习如何使用相机API来实现自定义相机功能。它展示了如何打开相机、设置相机参数、捕获图像和预览以及处理回调等基本操作。通过查看和理解Camera2Demo的源代码,开发者可以学习到如何使用不同的相机功能,如自动对焦、曝光控制、白平衡调节等。 Camera2Demo中还展示了如何处理相机相关的权限请求和运行时权限申请。由于相机属于敏感权限,需要在应用程序中进行权限管理,以确保用户的个人隐私和数据安全。 除了基本的相机操作外,Camera2Demo还演示了如何实现高级的相机功能,例如拍摄连续照片、录制视频、拍摄RAW图像等。通过学习和运行Camera2Demo,开发者可以了解如何利用相机API来应对各种不同的需求和场景。 总之,Camera2Demo是一个有价值的示例程序,对于那些想要开发自定义相机功能的Android开发者来说,它提供了一个很好的起点和参考。 ### 回答3: camera2demo 是一个 Android 相机应用程序的示例代码。它是基于 Android Camera2 API 开发的,Camera2 API 是 Android 系统中用于访问和控制相机硬件功能的官方 API。相比较于过时的 Camera API,Camera2 API 提供了更丰富、更灵活的相机功能,并且性能更好。 camera2demo 的主要功能是通过调用 Camera2 API 实现相机的打开、预览、拍照和录像等操作。它展示了如何创建一个相机预览界面,如何自动对焦和曝光,如何设置不同的相机参数,以及如何捕获静态图片和录制视频等。 camera2demo 的示例代码是一个完整的 Android 应用程序,你可以直接运行在支持 Camera2 API 的设备上。通过阅读和学习这个示例代码,你可以了解和掌握 Camera2 API 的使用方法和原理,从而在自己的应用程序中实现更高级和更个性化的相机功能。 总之,camera2demo 提供了一个很好的学习资源,帮助开发者理解和使用 Android Camera2 API。通过充分利用 Camera2 API 的强大功能,开发者可以开发出更好的相机应用程序,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MengYa_DreamZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值