当前位置: 首页 > news >正文

论文阅读:Learning Lens Blur Fields

这篇文章是对镜头模糊场进行表征学习的研究,镜头的模糊场也就是镜头的 PSF 分布,镜头的 PSF 与物距,焦距,光学系统本身的像差都有关系,实际的 PSF 分布是非常复杂而且数量也很多,这篇文章提出用一个神经网络 MLP 来进行表征学习,相当于将镜头的 PSF 分布都压缩在了一个神经网络模型里面。

Abstract

光学模糊是光学镜头的固有性质,因为实际镜头都存在各种各样的像差,光学模糊与物距,焦距,入射光线的波长都有关系。光学镜头的表现可以用点扩散函数,也就是 PSF 来表示,实际镜头的 PSF 场非常复杂。这篇文章提出一种标定的方法,来构建这样一个实际光学镜头的 PSF 场,然后设计了一个高维的神经表征来学习这个 PSF 场。文章中用 MLP 来建模这个神经表征,这个镜头模糊场,可以准确地获得镜头在成像面的不同成像位置,不同对焦设置以及不同深度下的 PSF;这些不同的 PSF 都可以表示成与 sensor 有关的一个函数。这个神经网络的表征,同时考虑了镜头的离焦,衍射效应,以及各种像差,同时也考虑了特定 sensor 的性质,比如 color filters 以及与 pixel 有关的 micro lens。为了学习实际摄像模组的模糊场,文章将此形式化成一般的非盲反卷积问题,通过一批少量的实采数据构成的 focal stack,直接训练这个 MLP 网络结构。同时文章也构建了第一个与镜头模糊场相关的数据集,而且这个数据集是一个 5 维的模糊场的数据集。这套方法,可以很方便地快速迁移到不同的镜头模组上。

Introduction

一个实际的光学成像系统,需要考虑到镜头的离焦,像差,以及衍射效应等,如何精确地刻画这些性质对成像系统的影响,是一个非常大挑战,而且这个问题随着自动驾驶,以及手机摄影的兴起,也已经变得越来越重要了。

光学模糊一般是用 PSF 来刻画,PSF 也叫点扩散函数,表示的是一个理想点光源通过镜头到达 sensor 像面上的能量分布,真实光学系统的 PSF 建模是一个非常挑战的问题,因为 PSF 与很多因素包括光源,物距,焦距设置,波长等都有关系。

目前 PSF 的表示有三种方法,参数法,非参数法,以及基于几何或者傅里叶光学的模拟方法:

  • 参数法,基于理想的镜头或者成像模型来表示 PSF,比如基于高斯分布,泽尼克系数,塞德尔系数等方式,这类方法的表示能力有限
  • 非参数法,一般是通过对 sensor 像面进行一系列的采样来估计 PSF,这类方法需要通过反卷积的方法来求解出当前光学系统的 PSF,或者通过设置一个点光源,逐步扫描的方式,获取 sensor 像面上每个位置的 PSF,这类方法相对来说会更为准确,但是效率比较低
  • 模拟法,是通过将光学系统进行物理成像模拟,仿真得到光学系统的 PSF,这类方法需要真实的光学系统参数,有的时候,实际的光学设备很难获取到这些参数

上面这些方法,估计出来的 PSF 都是独立存在的,有多少个 PSF,就需要存多少个 PSF,本文的一个创新点还在于把整个 PSF 的空间分布,用一个更加紧凑的神经网络来表示。文章中用的是 MLP,一个非常经典的神经网络,神经网络的拟合能力已经是众所周知的强大,可以拟合非常连续的 PSF 分布,以及非常复杂的 PSF 的形态,为了训练这样一个 MLP, 也需要构建相应的数据集,所以文章也提出了一种高效地构建 PSF 数据集的方法,所以总得来说,文章的主要创新有两点:

  • 实际成像系统的 PSF 分布的标定与构建,文章提出了一种方法,可以对不同的成像设备,包括手机,单反都能进行 PSF 的标定与估计
  • 利用神经网络 MLP 对镜头模糊场 PSF 的分布进行拟合,形成一个更加紧凑的镜头模糊场的表示

在这里插入图片描述

Learning lens blur fields

文章整个的 pipeline 如下所示:

在这里插入图片描述

Lens Blur Field Representation

假设真实环境中有一个点光源 p ∈ R 3 \mathbf{p} \in \mathbb{R}^{3} pR3 距离镜头为 d d d,通过透视投影,点光源从三维空间投影到二维的相机平面,投影后的坐标为 x ~ ∈ R 2 \tilde{\mathbf{x}} \in \mathbb{R}^{2} x~R2,然后通过镜头的内参,最后转换到图像平面,其坐标为 x ∈ R 2 {\mathbf{x}} \in \mathbb{R}^{2} xR2,从三维空间投影到二维图像平面,与镜头的焦距 f f f,成像的物距 d d d 以及sensor 的类型 c c c 有关,dual-pixel 类型的 sensor 会有一个视差,最终的图像坐标与三维空间坐标的映射关系可以表示成如下所示:

x = invproj ( x , d , f , c ) (1) \mathbf{x} = \text{invproj}(\mathbf{x}, d, f, c) \tag{1} x=invproj(x,d,f,c)(1)

整个镜头的模糊场,表示为 PSF θ ( x , d , f , u ) \text{PSF}_{\theta}(\mathbf{x}, d, f, \mathbf{u}) PSFθ(x,d,f,u),其中 θ \theta θ 表示神经网络 MLP 的参数, PSF θ ( x , d , f , u ) \text{PSF}_{\theta}(\mathbf{x}, d, f, \mathbf{u}) PSFθ(x,d,f,u) 描述的是距离点光源 p \mathbf{p} p 在像面的投影 x \mathbf{x} x u \mathbf{u} u 的范围内的能量分布,或者说理想点光源模糊成什么样子。其中的 c c c 表示与 sensor 类型相关,或者说与 PSF 的形态相关的参数,对于普通的 Bayer 模式的 sensor, c c c 是 4,对于黑白 sensor 来说, c c c 是 1,对于带 dual-pixel 类型的 sensor 来说,需要在原来的基础上乘以 2

Continuous Image Formation

假设镜头对距离其为 d d d 的一个平面成像,如果是理想成像,那就是没有模糊的成像

I ^ ( c ) ( x , d , f ) = A ( c ) ( p ) E ( c ) ( p , f ) (2) \hat{I}^{(c)}(\mathbf{x}, d, f) = A^{(c)}(\mathbf{p}) E^{(c)} (\mathbf{p}, f) \tag{2} I^(c)(x,d,f)=A(c)(p)E(c)(p,f)(2)

其中, A ( c ) ( p ) A^{(c)}(\mathbf{p}) A(c)(p) 表示真实平面的光照性质,体现了真实的环境光照与平面材质相互作用下的光照性质, E ( c ) ( p , f ) E^{(c)} (\mathbf{p}, f) E(c)(p,f) 表示能量效率,最终实际的模糊图像可以由如下的表达式表示:

I ( c ) ( x , d , f ) = ∫ μ PSF θ ( x , d , f , u ) ⋅ I ^ ( c ) ( x − u , d , f ) d u (3) {I}^{(c)}(\mathbf{x}, d, f) = \int_{\mathbf{\mu}} \text{PSF}_{\theta}(\mathbf{x}, d, f, \mathbf{u}) \cdot \hat{I}^{(c)}(\mathbf{x}-\mathbf{u}, d, f)d\mathbf{u} \tag{3} I(c)(x,d,f)=μPSFθ(x,d,f,u)I^(c)(xu,d,f)du(3)

u \mathbf{u} u 表示 x \mathbf{x} x 的一个邻域范围。

为了能够学习这个模糊场的神经表示,可以构建如下的损失函数:

arg min ⁡ θ ∑ t , c , i ; x ∈ P ∥ I ( c ) ( x , d i , f i ) − ∑ u PSF θ ( c ) ( x , d i , f i , u ) ⋅ I ^ t ( c ) ( x − u , d i , f i ) ∥ 2 2 (4) \argmin_{\theta} \sum_{t,c,i; \mathbf{x}\in \mathcal{P}} \left \| {I}^{(c)}(\mathbf{x}, d_{i}, f_{i}) - \sum_{\mathbf{u}} \text{PSF}_{\theta}^{(c)}(\mathbf{x}, d_i, f_i, \mathbf{u}) \cdot \hat{I}_{t}^{(c)}(\mathbf{x} - \mathbf{u}, d_i, f_i) \right \|_{2}^{2} \tag{4} θargmint,c,i;xP I(c)(x,di,fi)uPSFθ(c)(x,di,fi,u)I^t(c)(xu,di,fi) 22(4)

subject to PSF θ ( c ) ≥ 0 \text{subject to} \quad \text{PSF}_{\theta}^{(c)} \ge 0 subject toPSFθ(c)0

表达式 (4) 里外面的求和表示对所有像素的通道 c c c,所有的 sensor 像素点 x \mathbf{x} x,所有的焦距 f i f_i fi 及物距 d i d_i di,其中 $ 1 \le i \le N_{I} ,以及对所有的 s e n s o r 类型, ,以及对所有的sensor 类型, ,以及对所有的sensor类型, 1 \le t \le N_{T}$,表达式内的求和,表示一个卷积的离散求和形式,是对公式(3)的一个近似,如果 d d d 是一个固定的物距,那么所表示的模糊场是一个 5 维的模糊场 ( f , t , c , x , u ) (f, t, c, \mathbf{x}, \mathbf{u}) (f,t,c,x,u),如果 d d d 也是一个变量,那就是一个 6 维的模糊场 ( d , f , t , c , x , u ) (d, f, t, c, \mathbf{x}, \mathbf{u}) (d,f,t,c,x,u)

文章中使用 MLP 来表示这样一个模糊场,为了训练这样一个 MLP,文章中是通过获取 RAW 图来进行训练,同时只对 RAW 图上能够测量的通道像素值进行卷积求和,也就是说 RAW 图会进行通道拆分,然后每个通道单独计算当前通道的 PSF,文章中用到的 MLP 有 7 层,最后一层用的是 sigmoid 激活函数,其它层的激活函数是 RELU。

为了提升计算效率,文章中也假设 PSF 在一个局部区域内可以认为是相对类似的,细微的变化几乎可以忽略不计,这样对 x \mathbf{x} x 采样的时候,可以不用采得很密,可以每个 patch 估计一个 PSF,文章中将每个 patch 的大小定义为 PSF size 的 1.5 倍。

Image Acquisition Procedure

接下来,文章介绍了如何获取有模糊图像以及没有模糊的图像以构成训练数据对,整个流程步骤如上图所示,通过透视投影,畸变,以及 shading 获得一张没有模糊的图像 I ^ ( c ) \hat{I}^{(c)} I^(c) ,同时通过拍摄屏幕获得一张模糊图像 I ( c ) {I}^{(c)} I(c),模糊图像类似通过了镜头的光学像差的退化,没有模糊的图像类似通过镜头前的真实场景,因为从真实场景到镜头成像之间,还有坐标的变换,畸变以及 shading 的影响,所以为了让这两张图像对齐,需要做预处理。

  • Homography Estimation,首先是投影矩阵 H H H 的估计,也就是单应性矩阵的估计,这一步是让没有模糊的图像与实际拍摄的图像进行坐标对齐,为了估计这样一个投影矩阵,需要进行标定,文章中使用了一组特定的 pattern,也就是两张图,一张是黑底上面有很多白色的圆点,另外一张是白底上面有很多黑色的圆点,如下图所示:

在这里插入图片描述

通过将 albedo dotgrid images 与拍摄的 dotgrid images 的圆点检测出来,然后计算这些圆点的圆心,圆心坐标在两张图像之间是不一样的,通过 RANSAC 算法计算这些匹配圆心之间的坐标转换关系,进而得到这个投影矩阵。

  • Lens Distortion Estimation,第二个需要考虑的是镜头的放大率以及镜头的畸变,为了解决镜头的放大率的影响,文章中先拍摄一组 focal stack 的图像,然后合成一张全对焦的图像,然后估计每个 out-of-focus 图像中圆点圆心与全对焦图像圆点圆心的映射关系,这个映射关系是一个尺度关系,
    S ( x ~ , d i , f i , c ) S(\tilde{\mathbf{x}}, d_i, f_i, c) S(x~,di,fi,c)。至于镜头的畸变,文章中是用一个六阶的 Brown-Conrady 模型去模拟这个径向畸变 D ( x ~ , c ) D(\tilde{\mathbf{x}}, c) D(x~,c),这个畸变模型对所有的 f i , d i f_i, d_i fi,di 都一样。

  • Radiometric Compensation,第三个要考虑的是 shading correction,文章中叫照度补偿,因为真实镜头的光照能量会呈现中间强,四周弱的分布,文章中用一张全黑图以及一张全白图来表示环境的最弱光照以及最强光照,拍摄这两张图之后,作为 I m i n , I m a x I_{min}, I_{max} Imin,Imax,然后所有图像可以认为是这两张图像的一个线性组合:

在这里插入图片描述

I ^ ( x ) = [ 1 − A ( invproj ( x , d i , f i ) ) ] I m i n ( x ) + A ( invproj ( x , d i , f i ) ) I m a x ( x ) \hat{I}(\mathbf{x}) = [1 - A(\text{invproj}(\mathbf{x}, d_i, f_i))] I_{min}(\mathbf{x}) + A(\text{invproj}(\mathbf{x}, d_i, f_i)) I_{max}(\mathbf{x}) I^(x)=[1A(invproj(x,di,fi))]Imin(x)+A(invproj(x,di,fi))Imax(x)

  • Image caputure, 前面介绍的是对 albedo 图像的预处理,albedo 图像类似理想图像,表示真实环境的光照分布,接下来是考虑实际成像,也就是实拍的图像,文章中是通过拍摄屏幕的方式来获取实际退化的图像,文章中用的是一个 32 英寸的 4K 显示屏,将镜头平行放置在屏幕前面某个距离下,然后进行拍摄,不同的距离,屏幕在镜头中的成像大小不同,近距离情况下,屏幕可以占满整个成像面,远距离情况下,屏幕只能占据像面的一部分,所以远距离情况下,需要移动镜头或者移动屏幕,以保证最终的屏幕能在整个成像面都有成像。

Results

最后是实验部分,文章对比了不同的方法,也对不同的镜头模糊场做了测试,包括仿真的 PSF,实际手机的镜头模糊场,以及实际单反的镜头模糊场。

相关文章:

论文阅读:Learning Lens Blur Fields

这篇文章是对镜头模糊场进行表征学习的研究,镜头的模糊场也就是镜头的 PSF 分布,镜头的 PSF 与物距,焦距,光学系统本身的像差都有关系,实际的 PSF 分布是非常复杂而且数量也很多,这篇文章提出用一个神经网络…...

SpringBoot整合Knife4j接口文档生成工具

一个好的项目,接口文档是非常重要的,除了能帮助前端和后端开发人员更快地协作完成开发任务,接口文档还能用来生成资源权限,对权限访问控制的实现有很大的帮助。 这篇文章介绍一下企业中常用的接口文档工具Knife4j(基于…...

爬虫(三)

1.JS逆向实战破解X-Bogus值 X-Bogus:以DFS开头,总长28位 答案是X-Bogus,因为会把负载里面所有的值打包生成X-Boogus 1.1 找X-Bogus加密位置(请求堆栈) 1.1.1 绝招加高级断点(日志断点) 日志断点看有没有X-B值 日志…...

03 动力云客项目之登录功能后端实现

1 准备工作 1.1 创建项目 使用Spring initializr初始化项目 老师讲的是3.2.0, 但小版本之间问题应该不大. 1.2 项目结构 根据阿里巴巴Java开发手册确定项目结构 1.3 分层领域模型 【参考】分层领域模型规约: • DO(Data Object)&am…...

时光峰峦文物璀璨,预防性保护筑安全

在璀璨的历史长河中,珍贵文物如同时间的印记,承载着过往的辉煌。《人文山水时光峰峦——多彩贵州历史文化展》便是这样一场文化的盛宴,汇聚了众多首次露面的宝藏。然而,文物的保存对环境要求极为苛刻,温湿度波动都可能…...

Redis面试题43

人工智能在未来会有哪些可能的发展趋势? 答:人工智能在未来将继续迎来许多可能的发展趋势,以下是一些可能的方向: 更强大的算法和模型:人工智能算法和模型将不断改进和优化,为更复杂的数据和问题提供更强大…...

Redis -- list列表

只有克服了情感的波动,才能专心致志地追求事业的成功 目录 列表 list命令 lpush lpushx rpush rpushx lrange lpop rpop lindex linsert llen lrem ltrim 阻塞命令 小结 列表 列表相当于 数组或者顺序表。 列表类型是用来存储多个有序的字符串&…...

【MATLAB】使用梯度提升树在回归预测任务中进行特征选择(深度学习的数据集处理)

1.梯度提升树在神经网络的应用 使用梯度提升树进行特征选择的好处在于可以得到特征的重要性分数,从而识别出对目标变量预测最具影响力的特征。这有助于简化模型并提高其泛化能力,减少过拟合的风险,并且可以加快模型训练和推理速度。此外&…...

神经网络 | 基于多种神经网络模型的轴承故障检测

Hi,大家好,我是半亩花海。本文主要源自《第二届全国技能大赛智能制造工程技术项目比赛试题(样题) 模块 E 工业大数据与人工智能应用》,基于给出的已知轴承状态的振动信号样本,对数据进行分析,建…...

matplot画3D图的时候报错

使用matplot画3D图的时候,报这个错。 ERROR: Could not find a version that satisfies the requirement mpl_toolkits (from versions: none) ERROR: No matching distribution found for mpl_toolkits 要使用升级命令升级matplot而不是安装 pip install --upgr…...

如何使用LNMP让网站顺利工作?

如何使用LNMP让网站顺利工作? 1. Nginx的安装和部署 2. nginxphpmysql 3. nginx php-fpm安装配置 4. Nginx配置性能优化的方法 5. 如何使用Nginx实现限制各种恶意访问...

最新AI系统ChatGPT网站H5系统源码,支持Midjourney绘画局部编辑重绘,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…...

多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测

多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测 目录 多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LSSVM卷积神经…...

使用NLTK进行自然语言处理:英文和中文示例

Natural Language Toolkit(NLTK)是一个强大的自然语言处理工具包,提供了许多有用的功能,可用于处理英文和中文文本数据。本文将介绍一些基本的NLTK用法,并提供代码示例,展示如何在英文和中文文本中应用这些…...

学习Spring的第十六天

AOP底层两种生成Proxy的方式 我来解释这两种方式 1 目标类有接口 , 调用JDK的动态代理实现 2 目标类没有接口 , 用Cglib实现 , 即生成目标类的子类 , 来实现动态代理 , 所以要求目标类不能时final修饰的 . (若有接口 , 也可用Cglib方式实现 , 需要手动配置<aop: config pr…...

学习笔记-01

学习笔记记录了我在学习官方文档过程中记的要点&#xff0c;可以参考学习。 go build *.go 文件 编译 go run *.go 执行 go mod init 生成依赖管理文件 gofmt -w *.go 格式换名称的大小写用来控制方法的可见域主方法及包命名规范 package main //注意package的命名&#xff0…...

opensatck中windows虚拟机CPU核数显示异常问题处理

文章目录 一、问题描述二、元数据信息三、以32核的实例模版为例3.1 单槽位32核3.2 双槽位32核 总结 一、问题描述 openstack创建windows虚拟机的时候&#xff0c;使用普通的实例模版会出现CPU数量和实例模版不一致的问题。需要定制元数据才可以正常显示。 帖子&#xff1a;htt…...

Camunda流程引擎数据库架构

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;数据库架构…...

Leetcode21:合并两个有序链表

一、题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[]输入&#…...

深度学习驱动下的自然语言处理进展及其应用前景

文章目录 每日一句正能量前言技术进步应用场景挑战与前景自然语言处理技术当前面临的挑战未来的发展趋势和前景 伦理和社会影响实践经验后记 每日一句正能量 一个人若想拥有聪明才智&#xff0c;便需要不断地学习积累。 前言 自然语言处理&#xff08;NLP&#xff09;是一项正…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...