基于多视点编码光场的全景三维重建方法
欢迎关注GZH《光场视觉》
摘要:在基于光场的一系列应用中,目标的三维重建是基础且关键的任务。普通光场只能重建单一视角而无法重建全景,并且在纹理特征匮乏的区域也无法生成准确的三维信息。针对以上问题,提出一种基于多视点编码光场的全景三维重建方法。首先,利用结构光编码向场景投射正弦模板生成像素级的相位码字以丰富场景特征,进而在多个角度独立地进行光场采集。然后,在各个光场采样视点的内部利用空间信息和角度信息求取深度值。最后,在不同的光场采样点之间由位姿引导实现三维信息融合。实验结果表明,所提方法能有效恢复物体的全景信息,而且对物体纹理特征匮乏区域的重建也更加准确。
关键词:图像处理;三维重建;光场;结构光;相位编码;点云
1引言
三维重建是计算机视觉中的一项重要任务,广泛应用于虚拟现实技术[1]、无人驾驶[2]、机器人视觉导航[3]等领域。基于多视图匹配的三维重建技术如structurefrommotion(SFM)[4]和simultaneouslocalizationandmapping(SLAM)[5]已经被用于大规模场景的稀疏重建。此类方法通过特征点匹配计算特征点的空间坐标,进而重建出物体的三维模型。然而它们面临着两方面不足:1)场景中的特征点分布稀疏,导致重建的三维模型也十分稀疏,无法描述几何细节;2)特征点的匹配计算复杂,制约三维重建的速度。
四维光场(LF)[6]同时记录光线的强度和方向,其数据高维度的优点催生了大量应用;并且随着Lytro和Raytrix等便携式光场摄像机的普及,基于光场的三维重建方法被陆续提出。光场根据数字重聚焦中的最佳剪切值[7]或极平面图像(EPI)中的最优斜率[8-9]来获取场景深度。Tao等[10]综合度量散焦线索和相关性线索两种代价获取深度值。Williem等[11]综合度量约束角熵代价和约束自适应离焦代价获取深度值。Peng等[12]认为在同一视点不同视图中的深度图包含互补信息,并提出融合不同视图实现目标重建的方法。此类方法通过精确的深度值估计实现物体重建,但深度线索依赖光场的空间和角度信息,只能在单一视角重建目标,无法恢复目标完整的全景三维信息。
全景三维重建需要从不同的视角获得场景的几何信息再进行融合,常见的方法有360°重建和720°重建。360°重建中,视点沿水平环形布置,720°重建则同时沿着水平和垂直方向环形布局。这一类方法利用场景几何与光场结构之间的关系计算位姿[13]或者利用高精度的采集设备获取位姿[14],并由位姿引导实现立体匹配。Chen等[15]使用双边一致性度量进行可靠的光场立体匹配。Zhang等[16]在此基础上提出P-SFM,结合立体匹配技术和光场光束平差技术计算光场相机位姿和场景几何形状。Vianello等[14]利用高精度采集设备获取360°环形光场,利用Hough变换计算环形EPI获取单视点深度并使用采样过程中得到的位姿实现信息融合。宋征玺等[17]在此基础上构建三维霍夫空间提取空间点轨迹实现重建。此类方法可以实现物体的全景三维重建,然而深度计算和位姿估计均依赖于表面纹理,可靠性相对较差。因此通常需要较多的数据,利用数据冗余来提高三维重建的可靠性。
针对以上问题,本文提出一种基于多视点编码光场融合的全景三维重建方法。使用光场相机环绕物体进行采样,利用光场内部的高维数据独立获取各个视点的深度值,进而将不同视点的深度值转换为点云并在全局坐标空间中融合,实现物体的全景重建。同时,在普通光场的基础上引入相位编码光场以丰富场景特征,从而提高深度值质量。所提方法具有以下优点:1)采用编码光场的相位编码代替自然场景,解决弱纹理或无纹理区域由于缺乏特征导致的深度估计不准确问题。2)采用多视点融合策略,解决普通光场只能实现单视角重建的问题,实现全景重建。同时在采样过程中获取单视点精确位姿,消除位姿计算导致的视点间匹配不准确问题。3)采用沿水平和垂直方向进行环形布局的信息采集方法,在获取物体全景信息的同时减少视点采集数。
2多视点三维重建算法
所提基于多视点编码光场的精确三维全景重建方法的总体框架如图1(a)所示,采用结构光编码技术赋予场景像素级码字特征,使用光场相机获取不同视点的编码光场,然后独立计算不同视点的深度值,最后将不同视点的信息在三维坐标空间中融合。相对于已有的三维重建方案,所提框架具有以下特点:1)在深度值估计阶段,采用一种符合结构光特性的重聚焦方法,在提高深度值精度的同时降低复杂度;2)在视点融合阶段,使用采样中的位姿进行点云融合,避免重新计算位姿引起的误差;3)提出一种基于统计的飞行像素去除方法,优化重建目标在深度不连续区域的精度。
2.1相位编码光场的获取
在各个视点采用相位编码光场进行深度值估计,采用多步相移法进行像素级编码,在减小量化误差的同时产生准确连续的码字。具体来说,使用N张同时受水平和垂直坐标调制的正弦函数模板,其中,第i张模板被定义为
式中:A表示振幅;(s,t)表示像素的坐标;T表示正弦函数周期。这些图像由光场相机采集,通过N步相移法获得包裹相位:
包裹相位φ(x,y)通过arctan函数求出,相位值分布在(-π,π)中,并在水平和竖直方向上周期性循环。通过多步相移法得到的图像,像素值在其邻域内连续且唯一。
2.2改进的重聚焦算法
通过第2.1节得到编码光场后,使用重聚焦算法进行深度估计。对于编码光场,通过四维剪切对其进行重聚焦
式中:φ表示光场图像;α表示剪切值;φα表示重聚焦之后的光场图像;(u,v)和(s,t)表示角度坐标与空间坐标。当重聚焦图像聚焦于一个特定深度值时,聚焦平面上的点所处角块的强度一致,成像最为清晰;而聚焦平面以外的散焦点则变得模糊。剪切值α反映场景的深度值,通过代价函数Cost(φα)评估深度线索,代价最小的α对应最佳深度值。
传统光场的代价曲线如图2(b)所示,受均匀纹理、复杂光照和遮挡等因素影响,场景的强度值相似或相同,代价函数出现多个最小值使α无法唯一地收敛,导致深度值估计不准确。针对上述问题,对传统重聚焦算法在光场采集和代价计算两方面进行改进,充分利用编码光场特性,在减小计算量的同时提升深度估计的精度。
在光场重采样阶段,传统数字重聚焦的精度受光场低分辨率的制约,采样像素在多个的剪切值下均保持相同。当剪切值为α0和α1时,最邻近的采样像素均为(s0,t1),产生量化误差降低视差的精度,如图3(a)所示。为解决这个问题,采用双线性插值法重新计算亚像素相位值,如图3(b)所示,将剪切值α采样下的亚像素相位值记为
式中:φα(s,t)表示空间坐标(s,t)处的相位值;n和m为亚像素与其左上方整像素点间的水平和垂直距离。普通光场使用强度作为编码信息,像素间不具有连续性,使用插值法破坏了图像的空间结构;编码光场的像素在水平和垂直方向均连续,基于双线性插值的亚像素采样方法充分利用这一特性,在不破坏光场空间结构的同时提升数字重聚焦的采样精度。
得到重采样的相位后,数字重聚焦通过代价最小化计算深度值。Tao等[10]将散焦线索和相关性线索作为代价计算场景深度。当α重新聚焦到正确的深度时,相关性线索要求光场图像中所有与(s,t)对应的像素构成一个具有最小方差的角块,同时散焦线索要求该角块的像素值与中心视图相应的像素值的差异最小。根据Cai等[18]的研究,相位编码光场对散焦线索不敏感而对相关性线索敏感。因此仅使用相关性线索定义代价函数:
式中:N表示光场的角度分辨率;φα(s,t,u,v)表示剪切值α下采样像素的相位值。仅使用相关性线索定义代价函数,在保持光场深度估计准确性的同时减小了运算量,加快了运算速度,如式(4)所示,通过计算求取最小化代价Cost(φα)的剪切值α,进一步通过文献[10]中的方法即可得到场景的深度值。
2.3多视点三维信息融合
为实现物体全景三维重建,在相位编码重聚焦求得单视点深度图的基础上,还需要融合多视点的三维信息。对测量目标在多个水平和垂直的视点进行采样得到不同视点信息,使用数字重聚焦计算各视点的深度图,将各视点深度图中的像素投射到三维坐标空间,并使用位姿匹配实现信息融合。
对于任意一张深度图,通过下式将像素(s,t)转换为空间坐标(x,y,z)进而转换为点云:
式中:z0表示像素(s,t)处的深度值;f表示相机的焦距;d表示焦点与旋转中心的距离;(s0,t0)表示深度图中心像素的坐标;dx和dy表示单一像素点在水平和竖直方向上的物理尺寸;P表示单视点的点云;∪表示空间坐标的集合;Npix表示深度图像素个数。
图4(a)中,将物体首次采样的视点作为参考系,沿水平和垂直两个方向进行采样。将采样过程中水平和垂直方向的旋转角度定义为θ1、θ2,则水平和垂直视点的位姿为
式中:Hθ表示水平视点的位姿;Vθ表示垂直视点的位姿。
在实际应用中,由于光场相机的旋转角度θ1难以测量,通常固定光场相机并使用步进电机控制的高精度旋转台对物体进行指定角度的旋转[17]实现水平视点采集。由于水平方向进行360°采集已经覆盖了目标的大部分区域,垂直方向的视点只需覆盖顶部和底部,即θ2为90°和270°两个特殊视点即可。
在获得不同视角点云位姿后,通过下式将多视点的点云融合,如图4(b)所示:
式中:Pv表示垂直视点的点云;Ph表示水平视点的点云;Pm表示主视点的点云;∪表示单视点下点云的集合;P表示融合后的点云。
在多视点点云融合过程中,不同视点的点云存在重叠部分,如图5(a)所示。这些点被视为物体表面的重复采样点,使点云重叠区域的密度大于单视点点云密度,给物体重建带来了误差。使用一种基于体素的重复点云处理方法来解决此问题,如图5(b)所示,对于源点云,建立其对应的八叉树,并将目标点云和源点云中存在于同一体素的点定义为重叠点。此时两个点云的重复点在同一体素中,使用体素下采样或者Laplace平滑[19]均可有效融合重复点云。处理后的点云,重叠区域和不重叠区域的密度保持一致,提升了重建物体的质量。
2.4飞行像素移除
为进一步提升三维重建质量,提高点云在深度不连续区域的精度,提出一种基于统计式的离群点移除策略消除飞行像素。飞行像素的产生原理如图6(a)所示,像素p3同时记录来自多条路径的光,当像素看到前景物体的边缘和非遮挡的背景物体时,采集的强度/颜色将是前景和背景强度/颜色的混合。飞行像素被视为错误的采样点,从而带来了误差。
飞行像素的强度是前景和背景的加权和,将深度图转换为点云后,飞行像素点与其他点的距离往往更远。利用这一特性,提出一种统计式离群点移除策略,这些点满足
式中:(xp,yp,zp)表示为离点p最近k个点的空间坐标;δ为所设的阈值。式(13)可以有效寻找所有与邻域的其他点距离较大的点,通过调整适合的阈值δ索引飞行像素点并移除。具体效果如图6(c)所示,该方法计算量小,且在去除离群点的同时提升了物体的边缘质量。
3.实验结果与分析
3.1实验设置
将所提算法与3种三维重建算法进行对比,分别为普通光场三维重建[10]、clusteringviewsformulti-viewstereo(CMVS)[20]、multi-viewstereo(MVS)[21]。相应地,构建了3种数据,具体的测试方法和对应的实验数据如表1所示。1)针对CMVS和MVS,构建水平360°环形光场,如图7(d)所示,相机环绕旋转轴1°等间隔均匀采样以获取场景的360°信息,一个数据集包含360张普通纹理图像。2)针对纹理光场的三维重建[10],构建720°普通光场,如图7(c)所示,该数据包含6个视点,在水平和垂直方向分别构成360°环形采集,每个视点为图7(a)所示的普通光场采集的纹理信息。光场相机焦距为43.456mm,每个视点包含7×7共49张图像,整个数据集包含294张视图。3)针对所提编码光场的三维重建,构建720°编码光场,其采样方式仍如图7(c)所示,但各视点为图7(b)所示的编码光场[22]。其光场相机参数和普通光场相同,模板使用正弦函数的周期为42,整个数据集包含294张视图。
值得注意的是,CMVS和MVS需要密集的采样视点建立视点间相关性,当视点间距大时无法进行匹配,故使用图7(c)所示的采样方法无法得到重建结果。根据Vianello等[14]和宋征玺等[17]的研究,使用图7(d)所示的环形光场并采用1°间隔采样时可取得可接受的重建效果,此时需360张采样图像,已经高于普通光场和编码光场294张视图的数据量。为在尽可能接近的数据规模上比较性能,对环形光场仅进行水平360°重建。
3.2与现有方法的精度比较
从表1可以看出,采用4种方法在3组数据集上测试重建效果及生成mesh的误差,结果如图8~10所示,其中,误差图颜色越深代表误差越大。MVS和CMVS在环形光场数据集的实验结果如图8~10(a)、(b)所示,可见MVS重建结果在边缘处具有较多噪声,而CMVS重建点云密度较稀疏。使用泊松表面重建[23]将点云重建为网格后,所得到的重建结果误差较大。同时,使用环形光场数据集进行三维重建会丢失顶部和底部信息,只能完成水平360°重建。传统光场三维重建方法和所提方法的测试结果如图8~10(c)、(d)所示,结果表明,通过不同视点求取深度值再进行融合,所得重建效果整体优于CMVS和MVS,利用更少的输入图像生成了更精确的三维信息。同时从图8~10(c)可以看出,普通光场数据集难以对弱纹理或无纹理区域进行有效重建,而从图8~10(d)可以看出,使用编码光场可以得到更好的点云,网格的重建结果也更加平滑和准确,实现了精确的全景三维重建。
为更好呈现全景三维重建效果,选取5个随机角度对生成的网格与真实值进行对比,结果如图11所示,所提方法可以获取物体的全景信息并融合,在各个角度均能观测到物体的三维信息。
3.3光场角度分辨率对结果的影响
为分析编码光场的角度分辨率对结果的影响,即重建质量随输入数据量的变化,测试角度分辨率为3×3、5×5、7×7的普通光场与编码光场所得点云的均方根误差(RMSE)[24],结果如表2所示。从表2可以看出,随着单视点光场采样角度分辨率的增加,普通光场和编码光场的RMSE不断减小,表明视点数目的增加提供了更强的约束,从而生成更准确的三维信息。同时,在相同角度分辨率的情况下,编码光场得到的点云质量优于普通光场,即光编码提供了更准确的深度线索,生成了更准确的深度值。
除了客观指标,还比较了重建mesh和真实值的误差,结果如图12~14所示。从图中可以看出:输入光场的角度分辨率改变时,普通算法受角度分辨率的影响更大;而所提算法在输入不同尺度的光场情况下,均能得到完整的信息和精确的轮廓。此外,其结果也表明所提算法的mesh质量优于普通算法,重建结果更加准确且平滑,从而验证了其有效性。
3.4重建精度影响因素分析
还探索了具体实施中不同因素对重建精度的影响,主要包括输入图片空间分辨率、旋转角精度及模板的噪声。重建误差以RMSE衡量,结果如表3所示,重建mesh的误差如图15所示。输入图像的空间分辨率影响深度值的精确性,进而影响重建结果,测试并分析了在输入分辨率为512×512、448×448、384×384时的重建效果。随着空间分辨率降低,视差和深度值精度降低,生成点云的误差增大。视点的旋转角θ1和θ2将影响点云的融合,进而降低重建质量,测试并分析了旋转角出现1°~5°误差时的重建效果。随着角度误差的增加,重建结果的误差也迅速增大。模板噪声降低深度值的准确性,降低重建质量,对相位模板加入方差为0.01、0.05、0.1的高斯噪声并测试重建效果。随着噪声增强,重建结果的RMSE略微增加。
4 结论
针对传统光场重建信息不全,在纹理匮乏和重复区域重建结果不精确等问题,提出一种基于多视点的编码光场三维重建的方法。通过相位解码、深度估计、多视点融合、飞行像素去除等一系列步骤进行优化,实现了物体的精确全景重建。实验结果表明,与现有方法相比,该方法可以在更少的输入情况下得到更加精确的重建结果,同时其在弱纹理或无纹理处重建的结果更加平滑。同时,还分析了角度分辨率、空间分辨率、模板噪声等因素对重建质量的影响。
文章来源:激光与光电子学进展 第60卷第12期
文章作者:王泽宇,向森,邓慧萍,吴谨
相关链接:http://www.opticsjournal.net/Articles/OJ46b4470ef4ff0194/Abstract
声明:转载此文目的在于传递更多信息,仅供读者学习、交流之目的。文章版权归原作者所有,如有侵权,请联系删除。
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/d7b05458d457d79190fd0fe7fc11469f.png)
基于多视点编码光场的全景三维重建方法
欢迎关注GZH《光场视觉》 摘要:在基于光场的一系列应用中,目标的三维重建是基础且关键的任务。普通光场只能重建单一视角而无法重建全景,并且在纹理特征匮乏的区域也无法生成准确的三维信息。针对以上问题,提出一种基于多视点编码…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Boot中的分布式文件系统
Spring Boot中的分布式文件系统 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Spring Boot中实现分布式文件系统的搭建和应用…...
![](https://img-blog.csdnimg.cn/img_convert/29f9b1bbcf7b97b992551b0a8d132def.jpeg)
three.js地理坐标系有哪些,和屏幕坐标系的转换。
坐标系很好理解,就是点线面体的位置,一个点是一个坐标,一条线段2个坐标,一个矩形四个坐标,一个立方体8个坐标,three.js面对的是三维空间,屏幕则是二维的,这就面临着转换问题…...
![](https://www.ngui.cc/images/no-images.jpg)
聊聊C++20的三向比较运算符 `<=>`
C20标准引入了许多新特性,其中之一是三向比较运算符 <>,也被称为太空船运算符。这个新运算符为C程序员提供了一种全新的比较对象的方式,它能有效简化比较逻辑,避免编写多个比较运算符重载的情况。 为什么需要三向比较运算符…...
![](https://img-blog.csdnimg.cn/img_convert/723a3670e4f773c32e7d02e9c2ff707d.png)
CVE-2024-0603 漏洞复现
CVE-2024-0603 源码:https://gitee.com/dazensun/zhicms 开题: CVE-2024-0603描述:ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化,从而远程…...
![](https://img-blog.csdnimg.cn/6483912241234334949c02b2f36f211d.png)
西部智慧健身小程序+华为运动健康服务
1、 应用介绍 西部智慧健身小程序为用户提供一站式全流程科学健身综合服务。用户通过登录微信小程序,可享用健康筛查、运动风险评估、体质检测评估、运动处方推送、个人运动数据监控与评估等公益服务。 2、 体验介绍西部智慧健身小程序华为运动健康服务核心体验如…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Boot中如何处理异步任务
Spring Boot中如何处理异步任务 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用中如何处理异步任务,以提升系统的性…...
![](https://img-blog.csdnimg.cn/direct/575bd20c52be460180361590bb0565c4.png)
数字化精益生产系统--RD研发管理系统
R&D研发管理系统是一种用于管理和监督科学研究和技术开发的软件系统,其设计和应用旨在提高企业研发活动的效率、质量和速度。以下是对R&D研发管理系统的功能设计:...
![](https://www.ngui.cc/images/no-images.jpg)
鱼眼相机 去畸变
目录 枕形畸变和去枕形畸变 去枕形畸变失败 枕形畸变和去枕形畸变 import cv2 import numpy as np import matplotlib.pyplot as plt# 创建一个带网格的原始图像 def create_grid(image_size512, grid_size20):image np.zeros((image_size, image_size, 3), dtypenp.uint8)…...
![](https://i-blog.csdnimg.cn/direct/08191c6d81934b48bf561ea65ab00825.png)
DC/AC电源模块:为智能家居设备提供恒定的电力供应
BOSHIDA DC/AC电源模块:为智能家居设备提供恒定的电力供应 DC/AC电源模块是一种常见的电源转换器,它将直流电源(DC)转换为交流电源(AC),为智能家居设备提供恒定的电力供应。在智能家居系统中&a…...
![](https://img-blog.csdnimg.cn/direct/dc16f224209d48209f6aeeaeddb9b94c.png)
小红书运营教程02
小红书大致会分享10篇左右。微博、抖音、以及视频剪辑等自媒体运营相关技能以及运营教程相关会陆续的进行分享。 上次分享涉及到的对比,母婴系列,或者可以说是服装类型,不需要自己过多的投入,对比知识类博主来说,自己将知识讲述出来,然后要以此账号进行变现就比较麻烦,…...
![](https://www.ngui.cc/images/no-images.jpg)
k8s自动清理节点服务
要在 Kubernetes 中实现当某个节点的 CPU 或内存使用超过 90% 时清理该节点上的服务,你可以使用以下几种方法: 自定义脚本和 cron job:编写一个脚本监控节点的资源使用情况,并在超过阈值时触发清理操作。使用 DaemonSet 运行监控…...
![](https://www.ngui.cc/images/no-images.jpg)
JS如何把年月日转为时间戳
在JavaScript中,将年月日(通常表示为一个字符串或者分别的年、月、日数字)转换为时间戳(即Unix时间戳,是自1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒)可以…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
【YOLOv5进阶】——引入注意力机制-以SE为例
声明:笔记是做项目时根据B站博主视频学习时自己编写,请勿随意转载! 一、站在巨人的肩膀上 SE模块即Squeeze-and-Excitation 模块,这是一种常用于卷积神经网络中的注意力机制!! 借鉴代码的代码链接如下&a…...
![](https://img-blog.csdnimg.cn/direct/7899016199764c57b9731588bcbeaa57.png)
【C++题解】1456. 淘淘捡西瓜
问题:1456. 淘淘捡西瓜 类型:贪心 题目描述: 地上有一排西瓜,每个西瓜都有自己的重量。淘淘有一个包,包的容量是固定的,淘淘希望尽可能在包里装更多的西瓜(当然要装整个的,不能切开…...
![](https://www.ngui.cc/images/no-images.jpg)
用Python读取Word文件并提取标题
前言 在日常工作中,我们经常需要处理Word文档,特别是从中提取关键信息,如标题、段落等。今天,我们将利用Python来实现这一功能,并为大家提供一段完整的代码示例。 准备工作 首先,你需要安装python-docx库…...
![](https://img-blog.csdnimg.cn/direct/4a1bfa94387d4b648e984bb3e138e645.png)
Windows编程上
Windows编程[上] 一、Windows API1.控制台大小设置1.1 GetStdHandle1.2 SetConsoleWindowInfo1.3 SetConsoleScreenBufferSize1.4 SetConsoleTitle1.5 封装为Innks 2.控制台字体设置以及光标调整2.1 GetConsoleCursorInfo2.2 SetConsoleCursorPosition2.3 GetCurrentConsoleFon…...
![](https://img-blog.csdnimg.cn/img_convert/4c951486df4a2894d5257dafedacfe22.png)
BiTCN-Attention一键实现回归预测+8张图+特征可视化图!注意力全家桶再更新!
声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 原理简介 数据介绍 结果展示 全家桶代码目…...
![](https://www.ngui.cc/images/no-images.jpg)
zoom缩放问题(关于ElementPlus、Echarts、Vue3draggable等组件偏移问题)
做了一个项目下来,由于整体界面偏大,采取了缩放90%,导致很多组件出现偏移问题,以下我会把我遇到的各种组件偏移问题依次进行描述解答: ElementPlus选择器下拉偏移 <template><el-select :teleported"f…...
![](https://img-blog.csdnimg.cn/direct/3f9b2ef2317b4e38a55a7577ad8ae8b6.png)
【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备
MongoDB的配置服务器 引入了分片机制之后,MongoDB启用了配置服务器(config server) 来存储元数据,这些元数据包括分片信息、权限控制信息,用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优…...
![](https://img-blog.csdnimg.cn/img_convert/04b8966be60670d4ddc6b0556685359f.png)
视频监控汇聚平台LntonCVS视频监控业务平台具体有哪些功能?
LntonCVS视频监控平台是一款基于H5技术开发的专业安防视频监控产品,旨在为安防视频监控行业提供全面的解决方案。以下是平台的主要功能和特点: 1. 统一接入管理: - 支持国内外各种品牌、协议和设备类型的监控产品统一接入管理。 - 提供标准的…...
![](https://img-blog.csdnimg.cn/direct/c92255c70fc44e24b86d1324a7ab4d95.png)
我不小心把生产的数据改错了!同事帮我用MySQL的BinLog挽回了罚款
之前在生产做修改数据的时候不小心改错了一行数据,本来以为会被通报批评,但是同事利用binlog日志查看到了之前的旧数据,并且帮我回滚了,学到了,所以写了一篇binlog的文章分享给大家。 MySQL的Binary Log(简…...
![](https://img-blog.csdnimg.cn/direct/309b08d8faf84fdab1f3a3a596f40e8a.png)
Windows系统安装NVM,实现Node.js多版本管理
目录 一、前言 二、NVM简介 三、准备工作 1、卸载Node 2、创建文件夹 四、下载NVM 五、安装NVM 六、使用NVM 1、NVM常用操作命令 2、查看NVM版本信息 3、查看Node.js版本列表; 4、下载指定版本Node.js 5、使用指定版本Node.js 6、查看已安装Node.js列…...
![](https://img-blog.csdnimg.cn/direct/32281e895325403089150a372c08464e.png)
k8s部署单节点redis
一、configmap # cat redis-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-single-confignamespace: redis data:redis.conf: |daemonize nobind 0.0.0.0port 6379tcp-backlog 511timeout 0tcp-keepalive 300pidfile /data/redis-server.pidlogfile /d…...
![](https://img-blog.csdnimg.cn/img_convert/0c50f3dc3ba564b6a4d5cb7aead24fc8.jpeg)
云微客矩阵系统:如何利用智能策略引领营销新时代?
近些年,短视频行业的风头一时无二,大量的商家和企业进驻短视频赛道,都或多或少的实现了实体门店的流量增长。虽然说现在短视频的门槛在逐步降低,但是迄今为止依旧有很多人在短视频剪辑面前望而却步。 最近在短视频营销领域&#x…...
![](https://img-blog.csdnimg.cn/direct/85f57903da42475780c72d57896e2e30.png)
嵌入式Linux系统编程 — 6.3 kill、raise、alarm、pause函数向进程发送信号
目录 1 kill函数 1.1 kill函数介绍 1.2 示例程序 2 raise函数 2.1 raise函数介绍 2.2 示例程序 3 alarm函数 3.1 alarm函数介绍 3.2 示例程序 4 pause函数 4.1 pause函数介绍 4.2 示例程序 与 kill 命令相类似, Linux 系统提供了 kill()系统调用&#…...
![](https://www.ngui.cc/images/no-images.jpg)
Swoole实践:如何使用协程构建高性能爬虫
随着互联网的普及,web爬虫已经成为了一个非常重要的工具,它可以帮助我们快速地抓取所需要的数据,从而降低数据获取成本。在爬虫的实现中,性能一直是一个重要的考虑因素。swoole是一款基于php的协程框架,它可以帮助我们…...
![](https://img-blog.csdnimg.cn/direct/f67e13f6ccc140df91c9893ed9b3607e.jpeg)
基于人脸68特征点识别的美颜算法(一) 大眼算法 C++
1、加载一张原图,并识别人脸的68个特征点 cv::Mat img cv::imread("5.jpg");// 人脸68特征点的识别函数vector<Point2f> points_vec dectectFace68(img);// 大眼效果函数Mat dst0 on_BigEye(800, img, points_vec);2、函数 vector<Point2f&g…...
![](https://img-blog.csdnimg.cn/img_convert/ee1b422e5ee09471ece83c7b9fbc49d8.jpeg)
算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在算法模型构建中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距…...
![](https://www.ngui.cc/images/no-images.jpg)
项目实战--Spring Boot大数据量报表Excel优化
一、项目场景 项目中要实现交易报表,处理大规模数据导出时,出现单个Excel文件过大导致性能下降的问题,需求是导出大概四千万条数据到Excel文件,不影响正式环境的其他查询。 二、方案 1.使用读写分离,查询操作由从库…...
![](https://www.ngui.cc/images/no-images.jpg)
C#编程技术指南:从入门到精通的全面教程
无论你是编程新手,还是想要深化.NET技能的开发者,本文都将为你提供一条清晰的学习路径,从C#基础到高级特性,每一站都配有详尽解析和实用示例,旨在帮助你建立坚实的知识体系,并激发你对C#及.NET生态的热情。…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis+定式任务实现简易版消息队列
Redis是一个开源的内存中数据结构存储系统,通常被用作数据库、缓存和消息中间件。 Redis主要将数据存储在内存中,因此读写速度非常快。 支持不同的持久化方式,可以将内存中的数据定期写入磁盘,保证数据持久性。 redis本身就有自己…...
![](https://www.ngui.cc/images/no-images.jpg)
学习在 C# 中使用 Lambda 运算符
在 C# 中,lambda 运算符 > 同时用于 lambda 表达式和表达式体成员。 1. Lambda 表达式 Lambda 表达式是一种简洁的表示匿名方法(没有名称的方法)的方法。它使用 lambda 运算符 >,可以读作“转到”。运算符的左侧指定输入参…...
![](https://www.ngui.cc/images/no-images.jpg)
数据结构和算法,单链表的实现(kotlin版)
文章目录 数据结构和算法,单链表的实现(kotlin版)b站视频链接1.定义接口,我们需要实现的方法2.定义节点,表示每个链表节点。3.push(e: E),链表尾部新增一个节点4.size(): Int,返回链表的长度5.getValue(index: Int): E…...
![](https://www.ngui.cc/images/no-images.jpg)
Jdk17是否有可能代替 Jdk8
JDK发展历史和开源 2006年SUN公司开源JDK,成立OpenJDK组织。2009年Oracle收购SUN,加快JDK发布周期。Oracle JDK与OpenJDK功能基本一致,但Oracle JDK提供更长时间的更新支持。 JDK版本特性 JDK11是长期支持版本(LTS)…...
![](https://www.ngui.cc/images/no-images.jpg)
oca和 ocp有什么区别
OCA(Oracle Certified Associate)和OCP(Oracle Certified Professional)在Oracle的认证体系中是两种不同级别的认证,它们之间存在明显的区别。以下是对两者区别的详细解释: 认证级别: OCA&…...
![](https://img-blog.csdnimg.cn/img_convert/a8e1ada6d86a2467358578577c66fc24.png)
煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答
煤矿安全大模型————矿途智护者 使用煤矿历史事故案例,事故处理报告、安全规程规章制度、技术文档、煤矿从业人员入职考试题库等数据,微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答。 本项目简介: 近年来,国家对煤矿安全生产的重视程度不断提升。为了确…...
![](https://www.ngui.cc/images/no-images.jpg)
C++中的C++中的虚析构函数的作用和重要性
在C中,虚析构函数(virtual destructor)的作用和重要性主要体现在多态和继承的上下文中。了解这一点之前,我们先简要回顾一下多态和继承的基本概念。 继承与多态 继承:允许我们定义一个基类(也称为父类或超…...
![](https://www.ngui.cc/images/no-images.jpg)
机器学习 - 文本特征处理之 TF 和 IDF
TF(Term Frequency,词频)和IDF(Inverse Document Frequency,逆文档频率)是文本处理和信息检索中的两个重要概念,常用于计算一个词在文档中的重要性。下面是详细解释: TF(…...
![](https://img-blog.csdnimg.cn/img_convert/4b2aa236ba89e2ba67fe38d2c69e9ca5.jpeg)
因为自己淋过雨所以想给嵌入式撑把伞
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!新手学嵌入式,…...
![](https://www.ngui.cc/images/no-images.jpg)
《C++20设计模式》中单例模式
文章目录 一、前言二、饿汉式1、实现 三、懒汉式1、实现 四、最后 一、前言 单例模式定义: 单例模式(Singleton Pattern)是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供全局访问点来访问这个实例。…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
前端技术(说明篇)
Introduction ##编写内容:1.前端概念梳理 2.前端技术种类 3.前端学习方式 ##编写人:贾雯爽 ##最后更新时间:2024/07/01 Overview 最近在广州粤嵌进行实习,项目名称是”基于Node实现多人聊天室“,主要内容是对前端界…...
![](https://img-blog.csdnimg.cn/direct/788d25fbb9af4d52a80adac934443570.png)
带电池监控功能的恒流直流负载组
EAK的交流和直流工业电池负载组测试仪对于测试和验证关键电力系统的能力至关重要,旨在实现最佳精度。作为一家客户至上的公司,我们继续尽我们所能应对供应链挑战,以提供出色的交货时间,大约是行业其他公司的一半。 交流负载组 我…...
![](https://www.ngui.cc/images/no-images.jpg)
关于Disruptor监听策略
Disruptor框架提供了多种等待策略,每种策略都有其适用的场景和特点。以下是这些策略的详细介绍及其适用场景: 1. BlockingWaitStrategy 特点: 使用锁和条件变量进行线程间通信,线程在等待时会进入阻塞状态,释放CPU资…...
![](https://www.ngui.cc/images/no-images.jpg)
大数据面试题之HBase(3)
HBase的预分区 HBase的热点问题 HBase的memstore冲刷条件 HBase的MVCC HBase的大合并与小合并,大合并是如何做的?为什么要大合并 既然HBase底层数据是存储在HDFS上,为什么不直接使用HDFS,而还要用HBase HBase和Phoenix的区别 HBase支…...
![](https://www.ngui.cc/images/no-images.jpg)
c#中赋值、浅拷贝和深拷贝
在 C# 编程中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是用于复制对象的两种不同方式,它们在处理对象时有着重要的区别和适用场景。 浅拷贝(Shallow Copy) 浅拷贝是指创建一个新对…...
![](https://img-blog.csdnimg.cn/direct/16082f610f604acbb07765c005643e1a.png)
旧版st7789屏幕模块 没有CS引脚的天坑 已解决!!!
今天解决了天坑一个,大家可能有的人买的是st7789屏幕模块,240x240,1.3寸的 他标注的是老版,没有CS引脚,小崽子长这样: 这熊孩子用很多通用的驱动不吃,死活不显示,网上猛搜ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/ae91aa4aa648ea768a75a1bc2bdd2d11.jpeg)
激光粒度分析仪校准步骤详解:提升测量精度的秘诀
在材料科学、环境监测、医药研发等众多领域,激光粒度分析仪以其高精度、高效率的测量性能,成为了不可或缺的测试工具。然而,为了保持其测量结果的准确性和可靠性,定期校准是不可或缺的步骤。 接下来,佰德将为您详细介…...
![](https://img-blog.csdnimg.cn/direct/af20d19c48664b3092590b11eee3869d.jpeg#pic_center)
独一无二的设计模式——单例模式(python实现)
1. 引言 大家好,今天我们来聊聊设计模式中的“独一无二”——单例模式。想象一下,我们在开发一个复杂的软件系统,需要一个全局唯一的配置管理器,或者一个统一的日志记录器;如果每次使用这些功能都要创建新的实例&…...
![](https://img-blog.csdnimg.cn/direct/44463e4399084ec58da98c726437df46.jpeg)
第二证券:可转债基础知识?想玩可转债一定要搞懂的交易规则!
可转债,全称是“可转化公司债券”,是上市公司为了融资,向社会公众所发行的一种债券,具有股票和债券的双重特点,投资者可以选择按照发行时约定的价格将债券转化成公司一般股票,也可作为债券持有到期后收取本…...
![](https://www.ngui.cc/images/no-images.jpg)
mindspore打卡机器学习正则化与优化器
机器学习正则化 这段代码实现了一个深度学习实验,目的是使用不同的正则化技术(包括dropout、批量归一化、L2正则化以及早期停止策略)来训练神经网络模型,以拟合一个带有噪声的余弦波形数据集。代码使用MindSpore框架进行编写&…...
![](https://img-blog.csdnimg.cn/direct/5e8467b8811648f186faba742b6e658c.png)
qt 开发笔记堆栈布局的应用
1.概要 画面中有一处位置,有个按钮点击后,这片位置完全换成另一个画面,这中情况特别适合用堆栈布局。 //堆栈布局的应用 #include <QStackedLayout> QStackedLayout *layout new QStackedLayout(this); layout->setCurrentIndex(…...
![](https://i-blog.csdnimg.cn/direct/ad273408fb7940b3b3b4fa477d7d0ae4.gif#pic_center)
SwiftUI 6.0(iOS 18.0)滚动视图新增的滚动阶段(Scroll Phase)监听功能趣谈
何曾几时,在 SwiftUI 开发中的秃头小码农们迫切需要一种能够读取当前滚动状态的方法。 在过去,他们往往需要借助于 UIKit 的神秘力量。不过这一切在 SwiftUI 6.0 中已成“沧海桑田”。 在本篇博文中,您将学到如下内容: 1. Scroll…...
![](https://i-blog.csdnimg.cn/direct/20e5d2d9343642c3ba2674ab42138718.png)
昇思25天学习打卡营第17天(+1)|Diffusion扩散模型
1. 学习内容复盘 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请确…...
![](https://www.ngui.cc/images/no-images.jpg)
如何深刻理解Redis的底层原理?Redis的运行机制是什么?如何优化Redis提供更高效服务
要深刻理解Redis的底层原理和运行机制,可以从以下几个方面入手: 1. 单线程模型:Redis采用单线程模型,所有的操作都在同一个线程中执行。这种设计可以减少线程切换带来的开销,从而提高性能 。 2. 虽然Redis是单线程的&…...
![](https://i-blog.csdnimg.cn/direct/a05e94db70da4f7ab859f487a6724106.png)
Astro新前端框架首次体验
Astro新前端框架首次体验 1、什么是Astro Astro是一个静态网站生成器的前端框架,它提供了一种新的开发方式和更好的性能体验,帮助开发者更快速地构建现代化的网站和应用程序。 简单来说就是:Astro这个是一个网站生成器,可以直接…...
![](https://www.ngui.cc/images/no-images.jpg)
蔚来EL8ES8在欧洲五国上市
,从蔚来官方处获悉,旗下的蔚来 EL8于近日正式在挪威、德国、荷兰、瑞典和丹麦五个欧洲国家上市。这是继蔚来登陆欧洲市场后,推出的第6款车型。其中,在德国市场,蔚来 EL8 提供两款车型,75 千瓦时电池版的售价为 94900 欧元,而 100 千瓦时电池版的售价为 103900 欧元(约 8…...
![](https://img-blog.csdnimg.cn/direct/418d456df96847f3937b9c2976b13216.png)
【微机原理及接口技术】可编程计数器/定时器8253
【微机原理及接口技术】可编程计数器/定时器8253 文章目录 【微机原理及接口技术】可编程计数器/定时器8253前言一、8253的内部结构和引脚二、8253的工作方式三、8253的编程总结 前言 本篇文章就8253芯片展开,详细介绍8253的内部结构和引脚,8253的工作方…...
![](https://img-blog.csdnimg.cn/direct/7bb0f6d5337642ba85194b02cf7cc2ac.png)
微前端(无界)入门
主应用通过props给子应用传值 父子应用通过eventBus通信 通过路由同步实现记录子应用的路由状态 主应用 main.ts: import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia import WujieVue from wujie-vue3import App from ./App.vue impo…...
![](https://www.ngui.cc/images/no-images.jpg)
在Go语言中如何实现变参函数和函数选项模式
在Go语言编程中,我们经常会遇到需要给函数传递可选参数的情况。传统的做法是定义一个结构体,将所有可选参数作为结构体字段,然后在调用函数时创建该结构体的实例并传递。这种方式虽然可行,但是当可选参数较多时,创建结构体实例的代码就会变得冗长และ不太直观。 Go语言的一个…...
![](https://www.ngui.cc/images/no-images.jpg)
每小时电量的计算sql
计算思路,把每小时的电表最大记录取出来,然后用当前小时的最大值减去上个小时的最大值即可。 使用了MYSQL8窗口函数进行计算。 SELECT b.*,b.epimp - b.lastEmimp ecValue FROM ( SELECT a.deviceId,a.ctime,a.epimp, lag(epimp) over (ORDER BY a.dev…...
![](https://img-blog.csdnimg.cn/direct/aabdfb79ce184e8590a8d6ebb197078b.png)
Vue中使用Vue-scroll做表格使得在x轴滑动
页面效果 首先 npm i vuescroll 在main.js中挂载到全局 页面代码 <template><div class"app-container"><Header :titletitle gobackgoBack><template v-slot:icon><van-icon clickgoHome classicon namewap-home-o /></templat…...