深度学习在MRI运动校正中的应用综述

运动是MRI中的主要挑战之一。由于MR信号是在频率空间中获取的,因此除了其他MR成像伪影之外,成像对象的任何运动都会导致重建图像中产生伪影。深度学习被提出用于重建过程的几个阶段的运动校正。广泛的MR采集序列、感兴趣的解剖结构和病理学以及运动模式(刚性与可变形、随机与规则)使综合解决方案变得难以可用。为了促进不同应用之间的交流,该综述详细概述了MRI中基于深度学习的运动校正方法,以及它们的常见挑战。该综述确定了基础数据使用、架构和评估策略方面的差异和协同。

来自:Deep Learning for Retrospective Motion Correction in MRI: A Comprehensive Review

目录

  • 背景
  • 数据和运动仿真
    • 大脑
    • 心脏和腹部
  • 架构
    • 基于图像的MoCo
    • 基于k空间的MoCo
  • 评价标准

运动是MRI诊断的主要挑战。尽管MRI是一种具有良好软组织对比度的非侵入性医学成像模式,但其固有的长采集时间使其比大多数其他模式更容易受到运动的影响。随着深度学习发展,已经提出了很多基于数据驱动的运动校正方法(MoCo,Motion Correction)。尽管存在关于运动伪影(motion artefacts)和经典MoCo的综述,但到目前为止,还没有对基于学习的MR运动校正方法进行综述。特别是缺少对越来越流行的MoCo + 图像重建领域的综述。

感兴趣区域、采集方案和运动类型的差异本质上影响数据驱动方法,所以需要确定基础模型和整体方法协同作用。该综述包含以下部分:

  • 背景:MR运动伪影和经典MoCo
  • 数据和运动仿真:常见的大脑和心脏模拟策略
  • 架构:基于图像和基于k空间的MoCo
  • 评价标准:图像质量、运动检测以及下游任务

背景

MR图像采集期间的相关运动包括运动器官(例如由于心脏运动或呼吸)和身体部位的有意识或无意识运动(例如由于患者不适)。当对不同的身体区域进行成像时,可以观察到不同的运动模式:

  • 对于大脑的图像,头部的运动通常被认为是随机的,由六个刚体运动参数(三个旋转分量和三个平移分量)表征,通常忽略了微小的可形变运动(比如大脑的脉动)
  • 相反,对于腹部和心脏成像,器官由于呼吸和心跳而产生的内在运动会导致准周期性模式和可变形的非刚性运动,其自由度明显更大。

无论确切的运动模式如何,成像对象的运动都会影响在频率空间(k空间)中获取的MR信号。一方面,位置的变化破坏了对所获取信号中的空间信息进行编码的能力。另一方面,物理MR信号特性受到二阶运动效应的负面影响,例如由于运动引起的磁场不均匀性或自旋效应。因此,在从频率到图像空间重构运动破坏的数据之后,可能会出现复杂的伪影,这无法在简单的过程中进行校正。图1A中大脑和腹部成像的示例性运动损坏图像说明了运动可能阻碍诊断。
fig1A

  • 图1A:大脑,腹部,心脏成像的典型运动模式,以及运动受损(motion-corrupted)和无运动(motion-free)图像的例子。对于大脑成像,通常假设随机刚体运动,这会导致伪影,这取决于确切的采集方案和运动模式。对于心脏和腹部成像,运动通常是可形变的和准周期性的。

目前已经提出了几种策略来减轻运动伪影。第一种,患者的运动可以受到物理限制,例如,仅在患者屏息期间进行腹部扫描,或在成像时使用镇静剂或全身麻醉。第二种,通过选择性地采集特定运动状态下的数据或使用高级采样模式(目前的图像采集方案已被设计为对运动更具鲁棒性)。第三种,目前已经引入了加速和并行成像方法,其优点是采集时间更短,运动事件的机会更少(MRI acceleration)。

除了这些仍然容易受到运动伪影影响的缓解策略之外,目前已经提出了另一组方法,通过明确地去除运动伪影来直接执行运动校正,并通过利用运动模式的规律性来进行补偿,以实现更好的重建。这些方法包括在图像采集过程中应用的前瞻性方法(prospective methods),以及在图像采集后在重建管道中的各个阶段应用的回顾性方法(retrospective methods)。回顾性方法必须处理运动引起的图像信息丢失,例如k空间中的数据不一致。为此,深度学习方法展示出前景,因为它们能够在缺乏完整分析模型的情况下识别复杂模式。

数据和运动仿真

大多数基于学习的MoCo方法依赖于监督训练,即依赖于具有和不具有运动伪影的配对数据。当然,即使是自监督方法也使用配对数据进行定量评估。一些研究已经获得了成对的运动破坏和无运动(GT)图像用于训练和评估。然而,获取大型配对数据集成本高昂,因此,这是运动仿真被广泛使用的原因

在模拟运动伪影时,重要的是要考虑感兴趣解剖结构的典型运动模式。下面,总结了大脑,心脏和腹部成像的常见模拟程序。

大脑

在存在运动的情况下,刚体运动的模拟遵循MRI正向模型: y = ∑ t = 1 T M t F U t x (1) y=\sum_{t=1}^{T}\textbf{M}_{t}\mathscr{F}\textbf{U}_{t}x\tag{1} y=t=1TMtFUtx(1)其中,傅里叶变换 F \mathscr{F} F,采样mask M t \textbf{M}_{t} Mt,运动变换 U t \textbf{U}_{t} Ut被应用于每个时间点 t t t的GT图像 x x x,以生成运动破坏的k空间 y y y。在刚体运动的情况下,运动变换 U t = T t R t \textbf{U}_{t}=\textbf{T}_{t}\textbf{R}_{t} Ut=TtRt,由旋转变换 R t \textbf{R}_{t} Rt和平移变换 T t \textbf{T}_{t} Tt组成。此外,线圈灵敏度或二阶运动效应可以包括在正向模型中,以将模拟扩展到特定应用。

它在数学上等效于模拟图像空间或k空间中的运动。如图2所示,图像空间中的模拟是通过旋转和平移图像并在每个时间步长用变换后的图像的傅立叶变换替换相应的k空间线来执行的。k空间中的模拟基于傅立叶变换的特性:成像对象的旋转对应于k空间中等效的旋转,平移 T \textbf{T} T对应于线性相位斜坡的乘法,这取决于平移参数 a a a和读出方向 k R O k_{RO} kRO上的k空间坐标: T ( y ) = y ⋅ e x p ( − i 2 π a k R O ) (2) \textbf{T}(y)=y\cdot exp(-i2\pi ak_{RO})\tag{2} T(y)=yexp(i2πakRO)(2)无论在哪个域进行模拟,重要的是将运动的时序与MR采集方案相匹配,以模拟真实的伪影。
fig2

  • 图2:基于每个时间步长的 x x x y y y z z z平移和旋转参数,在图像或频域中模拟刚体运动。当在图像域(1)中进行模拟时,平移和旋转参数应用于图像。当在频域(2)中模拟时,相应的k空间线被旋转并与线性相位斜坡相乘(通过箭头可视化)。对于两者,不同时间步长的k空间线被合并到一个损坏的k空间中。

心脏和腹部

( 1 ) (1) (1)可知,通过应用可变形矢量场(DVF,deformable vector field)作为运动变换 U t \textbf{U}_t Ut来实现基于图像的非刚性运动模拟。真实DVF可以通过配准参考图像来获得,例如来自不同运动状态的参考图像。如果可用,可以使用多个时间分辨重建 x t x_t xt来替换 U t x \textbf{U}_{t}x Utx,从而在没有DVF的情况下进行模拟。

与刚性运动相比,直接模拟k空间中的非刚性变形并非易事。因此,心脏和呼吸运动模拟可以在k空间中通过变化的平移来近似。为了模拟周期性运动,在 ( 2 ) (2) (2)中应用具有周期性变化的平移参数的线性相位斜坡,比如 a ( t ) ∝ s i n ( t ) a(t)∝sin(t) a(t)sin(t)。需要注意的是,这是一个非常简化的运动表示。

架构

基于图像的MoCo

基于图像的MoCo方法将受运动影响的图像作为输入,并产生经运动校正的图像作为输出,类似于图像去噪或去模糊任务,如图1B所示。这些方法的不同之处在于a.底层网络架构,b.先验信息的潜在使用,以及c.训练目标。
fig1B

  • 图1B:基于图像的MoCo的经典和对抗性训练目标的可视化。对于经典训练,例如使用voxel intensity-based损失函数 L L L将预测结果与GT图像进行比较。对于对抗性训练,训练额外的鉴别器网络以与生成器网络( L g e n L_{gen} Lgen)竞争并将预测图像与GT( L a d v L_{adv} Ladv)区分开。

对于底层网络架构
图像到图像的翻译任务可以使用卷积编码器-解码器结构,其包括用于特征编码的下采样路径,然后是用于解码提取特征的上采样路径。与U-Net一样,大多数方法使用skip连接将细节从编码器传输到解码器。此外,一些方法连续级联多个编码器-解码器结构。受transformer架构最近在其他领域取得成功的启发,后来的工作采用自注意机制来编码运动伪像的空间上下文。

先验辅助方法
可以修改所提出的架构以利用附加信息。这些现有的辅助方法通过具有共享特征提取的共享编码器和解码器处理多个输入。例如,Ghodrati等人试图通过计算由在动态图像上预训练的辅助网络提取的特征来利用时间信息。此外,动态信息可用于基于配准的方法,其中CNN用于将装仓的数据配准到公共空间中,其组合产生运动校正的输出图像。

训练目标
如图1B所示,在监督设置中的经典网络训练是通过使用基于体素强度的代价函数(即L1或L2)将网络的预测与无运动的GT图像进行比较来执行。然而,条件生成对抗网络(GANs)采用了不同的训练目标。利用鉴别器网络扩展了生成器网络,该生成器网络将运动破坏图像映射为无运动图像,鉴别器网络旨在将预测图像与GT图像区分开。除了对抗损失,其中一些方法依赖于基于体素强度的代价函数作为生成器损失来比较预测图像和GT图像。其他包括感知损失(perceptual loss)、风格迁移损失(style transfer loss)或结构相似性损失(SSIM,structural similarity loss)。除了对抗性方法,Küstner等人提出了另一种使用变分自编码器(VAE)的监督生成训练策略,该策略试图直接从图像对中学习无运动的潜在分布。

为了应对缺乏配对的无运动和损坏的数据,无监督生成模型旨在校正来自无配对数据的运动伪影。由两个GAN组成的CycleGAN架构在(Learning MRI artefact removal with unpaired data)和(Unsupervised Adversarial Correction of Rigid MR Motion Artifacts)中进行了调整。两个生成器,一个破坏无运动图像,另一个校正未配对的损坏图像。对抗性损失可以用来自另一个域的未配对图像来计算,而生成性损失是以无监督的方式在来自同一域的循环变换输入上计算的。刘等人将生成器的潜在表示分解为人工信息和内容信息,并使用从内容翻译中生成的图像来训练网络。这些方法都包括多尺度代价函数。在另一种情况下,Oh等人将运动视为概率欠采样问题,并训练生成器以消除欠采样伪影,他们试图通过组合重复的随机欠采样重建来校正运动破坏的测量Unpaired MR Motion Artifact Deep Learning Using Outlier-Rejecting Bootstrap Aggregation)。

基于k空间的MoCo

与基于图像的方法不同,MoCo还可以利用原始k空间数据的附加信息内容,与MR重建过程相互作用(见图1C)。运动感知重建管道的不同组件可以是基于学习的。在下面的部分中,概述了将经典模块和基于学习的模块结合在一起的方法,以及纯学习的方法
fig1C

  • 图1C:基于k空间的MoCo图解。
  • 将经典模块和基于学习的模块相结合的方法可以分为以下几类:1.替换基于模型重建的不同组件,该方法通过最小化损失函数 L ( θ , x ) L(θ,x) L(θ,x)在找到图像 x x x和相应的运动参数 θ θ θ之间迭代。基于学习的模块以图像初始化、损失函数或运动参数为目标。2.将经典重建与基于学习的损坏k空间测量的运动检测或基于学习的运动场 U t \textbf{U}_{t} Ut估计相结合。3.将经典的运动检测或估计与学习的展开重建相结合,该重建在去噪网络和数据一致性(DC)块之间迭代。
  • 纯粹基于学习的方法包括:4.直接旨在通过在k空间和图像空间中执行卷积或从基于学习的重建中排除运动破坏的k空间测量来校正运动伪影的方法。5.运动补偿方法,其隐式或显式地使用运动信息来实现更高质量的图像重建。一个子类方法将生成重建模型与个人的原始数据相匹配,而运动可以选择性地通过包括变形场来显式建模。

A.经典方法和基于学习的方法相结合:多种方法使用基于学习的MoCo或重建组件扩展了经典框架。可以学习基于模型的重建的一部分、运动分析或重建本身。

替换部分基于模型的重建
基于模型的MoCo算法依赖于运动参数 θ \theta θ和重建图像 x x x的联合估计。这些方法建议用基于学习的组件替换优化过程的不同部分,以实现更快的收敛和理想情况下更稳定的重建(图1C.1)。Kuzmina等人使用CNN作为自动聚焦的损失函数的一部分,其中优化基于图像质量度量。对于基于数据一致性(DC)的优化过程,CNNs或U-Nets被用于运动参数估计,作为运动校正图像的初始化,或者作为重建网络,其权重由依赖于运动参数的超网络定义。相反,Levac等人提出了一种无监督方法,使用基于分数的模型,在无运动图像上训练。所有这些方法的共同点是,网络经过预训练,并在测试时间优化期间用作即插即用组件。此外,所有这些方法都专注于刚体运动,其自由度比非刚体运动小得多。

基于学习的运动分析与经典重建
另一组方法利用了刚体运动的随机性。如图1C.2所示,他们学习受运动影响的k空间测量的检测模型,并用提取的运动时序为经典重建过程提供信息。Eichhorn等人将CNN用于k空间中的line检测,并将这些线分类标签用作基于总变化的重建过程的DC项中的权重。崔等人训练基于图像的CNN来校正运动伪影,并比较原始图像和运动校正图像的k空间,以生成受运动影响的k空间线的欠采样掩码,然后使用经典的压缩感测过程来重构欠采样的原始数据Motion artifact reduction for magnetic resonance imaging with deep learning and k-space analysis)。

在准周期运动的情况下,单个运动破坏的k空间线的假设不适用。运动补偿方法不是针对单个运动事件进行校正,而是利用运动的周期性来对欠采样数据进行更高质量的重建。这些方法学习运动估计,这些估计包含在基于模型的经典重建中。使用基于图像的配准来预测运动场,并将其集成到重建问题的前向算子中。现有的方法在注册网络的输入方面各不相同,即完整图像与图像patch,配对与分组输入。此外,运动估计网络可以进行预训练,也可以与重建问题一起进行优化。

经典运动分析与基于学习的重建
相反,运动检测和估计也可以用经典方法执行,并与学习的基于展开DC的重建相结合(图1C.3)。Rotman等人通过比较来自两个相对线圈元件的信号来检测离散运动定时,并学习展开重建,其中规则化网络分别接收在主导运动状态和剩余运动状态中获取的数据。Miller等人采用了动态图像到单个运动状态的经典时空约束配准。注册的图像被编码并转发到展开的重建中,该重建通过将可用数据分割成子集以自监督的方式进行训练。

B.纯粹基于学习的方法:与A相比,有几种方法将MoCo和图像重建结合在一个纯粹基于学习的框架中。这些可以通过其校正或补偿运动的目的来区分。

基于运动校正目的:所提出的运动校正方法明确旨在去除底层数据中的运动伪影(图1C.4)。Singh等人提出了一种由图像和k空间中的交错或交替卷积组成的网络,用于同时进行刚体MoCo和重建。这种方法被进一步发展为一种数据一致性方法。Oksuz等人提出使用CNN来学习受运动影响的k空间线的欠采样掩码,并使用递归网络重建欠采样数据(Detection and Correction of Cardiac MR Motion Artefacts during Reconstruction from K-space)。在扩展中,他们用分割网络来训练检测和重建网络,从而专门针对感兴趣的下游任务优化MoCo。

基于运动补偿目的:所提出的运动补偿方法利用发生的运动来改善重建结果,同时加快采集时间,如图1C.5所示。空间和时间卷积以级联或并行的方式应用于具有联合或分离时空内核的动态图像序列。为了利用来自相邻帧的进一步信息,Schlenper等人包括数据共享层。Terpstra等人用从预训练模型中获得的运动场扩展了隐式运动补偿重建。相反,有几种方法以端到端的方式明确地学习具有重建问题的运动模型。Huang等人将运动估计和校正模块附加到重建网络中,并用一个组合损失函数训练框架(Dynamic MRI reconstruction with end-to-end motion-guided network)。

评价标准

由于MoCo是作为实现高质量图像重建的一种手段,因此主要基于其最终结果,使用图像质量指标来评估所提出方法的性能。然而,一些人也评估中间运动估计或利用下游任务来评估。下面概述了最常见的评估策略。

图像质量
可以通过分别计算图像质量度量或专家图像质量评级来执行定量或定性图像质量评估。定量图像质量度量可以是通过与GT参考图像进行比较来评估图像质量的全参考度量,也可以是不依赖于单独的GT图像的无参考度量。由于运动伪影的可变性,没有一个单一的图像质量测量对所有可能的伪影敏感。

大多数方法使用了两种试图模仿人类视觉感知的完整参考(reference-full)指标:结构相似性指数(SSIM),用于评估结构信息的退化;峰值信噪比(PSNR),用于将像素误差与最大信号强度进行对比。不太常用的全参考指标是均方误差(MSE)、均方误差根(RMSE)、归一化均方误差、平均绝对(百分比)误差(MAE或MAPE)、归一化互信息(NMI)和视觉信息保真度(VIF)。此外,对于无参考指标(reference-free),如信噪比(SNR)、对比度噪声比(CNR)和Tenengrad,用于评估没有参考图像的图像质量。

下游任务
在某些情况下,MoCo框架不仅旨在提供高质量的重建,还能够完成进一步的下游任务。在这种情况下,下游发现可以独立评估,例如通过计算器官分割上的Dice重叠或计算T2* map上的SSIM和相对误差度量。为了评估MoCo在纵向分析中增加的统计能力,可以采用皮质表面重建和皮质厚度相关性分析等结构元素的手动质量控制。特别是在没有参考的情况下,可以分析冠状血管等小解剖特征的清晰度。在心脏成像中,可以评估心脏功能分析。此外,作为MR MoCo的一个重要最终目标,可以对运动受损和校正扫描的临床结果进行比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/43181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用dcker极简打包java.jar镜像并启动

用dcker极简打包java.jar镜像并启动 一、本地打包好jar包 二、新建文件夹,将步骤1中的jar包拷贝到文件夹下 三、同目录下新建Dockerfile ## 基础镜像,这里用的是openjdk:8 FROM openjdk:8## 将步骤一打包好的jar包 拷贝到镜像的 跟目录下[目录可以自定义…

Oracle字段长度不足位数补零

Oracle字段长度不足位数补零 有时候从数据库中取出的月份值是1&#xff0c;而不是01&#xff0c;该怎么办呢 SELECTLPAD( CODE_MONTH, 2, 0 ) FROMtb_cube_TY001 WHERECODE_BM_MEATYPE TY20 AND code_measure MYLX01 AND code_month <> ~ AND CODE_ENTITY 01A AND…

【实战】十一、看板页面及任务组页面开发(二) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十四)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

一、如果用go语言&#xff0c;为什么我们分析随机化算法的期望运行时间&#xff0c;而不是其最坏运行时间呢? 文心一言&#xff1a; 在分析算法的性能时&#xff0c;期望运行时间是一个重要的指标&#xff0c;它描述了算法在平均情况下的表现。期望运行时间考虑了所有可能的…

musl libc ldso 动态加载研究笔记:02

前言 本篇继续研究 musl libc ldso 的动态加载过程中遇到的关键性的概念&#xff1a;到底要加载ELF 文件的哪些内容到 内存 当前如果遇到 ELF 动态加载&#xff0c;当前系统需要有【文件系统】&#xff0c;并且有较大的内存&#xff0c;因为 ELF 文件是无法直接运行的&#xf…

IDEA两种方法修改生成的jar包名字

方法一&#xff1a; 直接修改pom文件中的如下部分 <artifactId>excelreport</artifactId> <version>0.0.1-SNAPSHOT</version> <name>excelreport</name> <description>excelreport</description> 修改完成后&#xff0c;点…

SpringBoot3集成Kafka

标签&#xff1a;Kafka3.Kafka-eagle3&#xff1b; 一、简介 Kafka是一个开源的分布式事件流平台&#xff0c;常被用于高性能数据管道、流分析、数据集成和关键任务应用&#xff0c;基于Zookeeper协调的处理平台&#xff0c;也是一种消息系统&#xff0c;具有更好的吞吐量、内…

跟着美团学设计模式(感处)

读了着篇文章之后发现真的是&#xff0c;你的思想&#xff0c;你的思维是真的比比你拥有什么技术要强的。 注 开闭原则 开闭原则&#xff08;Open-Closed Principle&#xff09;是面向对象设计中的基本原则之一&#xff0c;它的定义是&#xff1a;一个软件实体应该对扩展开放…

python爬虫7:实战1

python爬虫7&#xff1a;实战1 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…

carla中lka实现(二)

前言&#xff1a; 首先计算之前检测出来的车道线的中线与输入图像的中线进行计算距离&#xff0c;&#xff0c;并设置不同的阈值对于不同的方向进行相关的调整。 一、车辆中心线 一般而言将摄像头架设在车辆的正中心轴上&#xff0c;所获得的图像的中间线极为车辆的中心。 …

QGraphicsView 实例3地图浏览器

主要介绍Graphics View框架&#xff0c;实现地图的浏览、放大、缩小&#xff0c;以及显示各个位置的视图、场景和地图坐标 效果图: mapwidget.h #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QLabel> #include <QMouseEvent> #include <QGraphicsView&…

WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

文章目录 前言一、Ubuntu安装opencv库二、启动 Windows 本机的 RTSP 视频流下载解压 EasyDarwin查看本机摄像头设备开始推流 三、在ubuntu 终端编写代码创建目录及文件创建CMakeLists.txt文件启动 cmake 配置并构建 四、结果展示启动图形界面在图形界面打开终端找到 rtsp_demo运…

linux系统服务学习(二)linux下yum源配置实战

文章目录 Linux下yum源配置实战一、Linux下软件包的管理1、软件安装方式2、源码安装的配置过程3、详解源码安装的配置过程&#xff08;定制&#xff09;4、详解编译过程5、安装过程6、axel多线程下载软件源码安装7、使用软链接解决command not found8、使用环境变量解决command…

软考A计划-系统集成项目管理工程师-收尾管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

中间件(二)dubbo负载均衡介绍

一、负载均衡概述 支持轮询、随机、一致性hash和最小活跃数等。 1、轮询 ① sequences&#xff1a;内部的序列计数器 ② 服务器接口方法权重一样&#xff1a;&#xff08;sequences1&#xff09;%服务器的数量&#xff08;决定调用&#xff09;哪个服务器的服务。 ③ 服务器…

opencv直方图与模板匹配

import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 直方图 cv2.calcHist(images,channels,mask,histSize,ran…

Spring中Bean的生命周期以及Bean的单例与多例模式

一. Bean的生命周期 bean的生命周期可以表达为&#xff1a;bean的定义➡bean的初始化➡bean的使用➡bean的销毁 Bean的初始化过程 1&#xff09;通过XML、Java annotation&#xff08;注解&#xff09;以及Java Configuration&#xff08;配置类&#xff09; 等方式加载Bea…

2023+HuggingGPT: Solving AI Tasks with ChatGPT and itsFriends in Hugging Face

摘要&#xff1a; 语言是llm(例如ChatGPT)连接众多AI模型(例如hugs Face)的接口&#xff0c;用于解决复杂的AI任务。在这个概念中&#xff0c;llms作为一个控制器&#xff0c;管理和组织专家模型的合作。LLM首先根据用户请求规划任务列表&#xff0c;然后为每个任务分配专家模…

Unity 鼠标实现对物体的移动、缩放、旋转

文章目录 1. 代码2. 测试场景 1. 代码 using UnityEngine;public class ObjectManipulation : MonoBehaviour {// 缩放比例限制public float MinScale 0.2f;public float MaxScale 3.0f;// 缩放速率private float scaleRate 1f;// 新尺寸private float newScale;// 射线pri…

【Windows系统编程】03.远线程注入ShellCode

shellcode&#xff1a;本质上也是一段普通的代码&#xff0c;只不过特殊的编程手法&#xff0c;可以在任意环境下&#xff0c;不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…