阅读论文:Label-Free Liver Tumor Segmentation
论文标题:Label-Free Liver Tumor Segmentation
翻译:无标记的肝肿瘤分割
摘要
论文的目的:肿瘤合成,通过使用合成数据来改进医学图像分析和AI在肝脏肿瘤检测方面的性能
我们的主要贡献是合成了一种肿瘤生成器,它提供了以下五个优点:
1. 合成策略将医学知识嵌入可执行程序中,通过放射科医生和计算机科学家的协作,实现了逼真肿瘤的生成,无需手动标注成本。2. 整个训练阶段不需要标注成本,并且生成的模型在无监督异常分割方法和肿瘤合成策略方面明显优于先前的方法。3. 在合成肿瘤上训练的AI模型在真实肿瘤分割方面可以达到与使用真实肿瘤和逐像素标注训练的AI模型类似的性能,并且可以推广到具有健康肝脏的CT扫描和其他医院的扫描。4. 合成策略可以生成多种规模的肿瘤用于模型训练,包括小、中、大规模的肿瘤,因此具有检测小肿瘤和促进早期发现肝癌的潜力。5. 合成策略允许直接操纵参数,如肿瘤位置、大小、纹理、形状和密度,提供了全面的测试平台,用于评估AI模型的性能。
方法
为了定位肝脏,我们首先将预先训练好的nnUNet1应用于CT扫描。有了肝脏的大致位置,然后我们开发了一系列形态图像处理操作来合成肝脏内的真实肿瘤。
肿瘤生成包括四个步骤:(1)位置选择 (2)纹理生成 (3)形状生成 (4)后处理。
位置选择
肿瘤位置非常关键,因为肝肿瘤通常不允许任何血管(如肝静脉、门静脉和下腔静脉)通过它们。为了避免血管,首先通过阈值法对图像进行血管分割。血管分割得到血管掩膜。有了血管掩膜,人们可以检测到选定的位置是否有使肿瘤与血管相撞的风险。在提出随机位置(X,Y,Z)∈{x,y,z|L(x,y,z)=1}后,通过判断肿瘤半径r范围内是否有血管进行碰撞检测,如果∃v(x,y,z)=1,∀x∈[X−r,X+r],y∈[Y−r,Y+r],z∈[Z−r,Z+r],则存在碰撞风险,因此需要重新选择位置。该过程反复进行,直到找到没有冲突的肿瘤位置(xt,yt,zt)。
分段的血管掩膜公式如下:
其中f’(x, y, z) 是平滑后的CT扫描,F’(x,y,z)=f(x,y,z)⊗g(x,y,z;σa),通过将具有标准差σa的高斯滤波器g(x,y,z;σa)应用于原始CT扫描f(x,y,z);⊗是标准的图像过滤操作符。平滑可以有效地消除CT重建带来的噪声。阈值T被设置为略大于肝脏的平均Hounsfield单位(HU)的值。
其中L(x,y,z)是肝脏掩码(background=0,liver=1),中间那个圆圈里边一点是逐点乘法,b是超参数。
有了理想的肿瘤位置,我们就能够生成肿瘤的纹理和形状。
纹理生成
纹理生成:肝脏和肿瘤纹理的HU值(Hounsfield单位)遵循高斯分布。
-
生成高斯噪声(Gaussian Noise):首先,你生成了一个具有特定均值(µt)和与肝实质相同标准差(σp)的3D高斯噪声。这个高斯噪声模拟了肿瘤的基本密度。
-
三次样条插值:为了减少高斯噪声的锐利性,你在x、y、z方向上使用了三次样条插值,将高斯噪声进行缩放。缩放后的纹理表示为T’(x, y, z),这有助于使纹理更加平滑和逼真。
-
缩放因子η:缩放因子η决定了生成的纹理的粗糙程度。η = 1 表示无缩放,较大的η值会导致更大的颗粒感,使生成的纹理更接近真实肿瘤的外观。
-
高斯滤波器:最后,为了模拟CT扫描的成像质量,你使用了高斯滤波器g(x, y, z; σb)对纹理进行模糊处理。这一步可以模拟图像在采集和重建过程中的模糊效应。
形状生成
大多数肿瘤从中心生长并逐渐肿胀,使小肿瘤(即20毫米)接近球形。所以我们用椭球体产生类似肿瘤的形状。
-
随机生成椭球体:首先,你随机生成一个椭球体,其x、y、z方向的半轴长度从均匀分布U(0.75r,1.25r)中抽取,其中r表示肿瘤的半径。这个椭球体将用于模拟肿瘤的整体形状。
-
放置椭球体:生成的椭球体被放置在扫描体积的中心坐标(xt,yt,zt)处,这个坐标可能代表了肝脏内的某个位置。
-
弹性变形:接下来,应用弹性变形来丰富椭球体肿瘤的多样性。使用σe控制的弹性变形,这个变形可以使肿瘤的表面更接近自然生长的肿瘤,而不是简单的椭球体形状。这也有助于增强模型的稳健性和形状语义不变性。
-
高斯模糊:最后,为了使生成的肿瘤形状和周围的肝实质之间的过渡更加自然,应用高斯滤波器g(x,y,z;σc)来模糊肿瘤形状。这可以使肿瘤边缘更平滑,使其与肝脏更好地融合,我们得到模糊形状T’‘(x,y,z)=t’(x,y,z)⊗g(x,y,z;σc)。
后处理
后处理的第一步是将肿瘤放置在扫描体积 f(x, y, z) 和相应的肝脏掩膜 l(x, y, z) 上。假设肿瘤掩膜数组 t’‘(x, y, z) 和纹理数组 T’'(x, y, z) 与 f(x, y, z) 和 l(x, y, z) 具有相同的形状。通过以下方程,我们可以获得带有肿瘤的新扫描体积:
在新的带有肿瘤的掩膜中(background=0,liver=1,tumor=2),它可以通过以下方式合成:
l’(x, y, z) = l(x, y, z) + t’'(x, y, z)
放置了肿瘤后,我们采取另外两个步骤,以使生成的肿瘤对医学专业人员更加逼真。这两个步骤旨在模拟肿瘤的质量效应和包膜外观。
质量效应意味着扩张的肿瘤会将周围的组织分开。如果肿瘤足够大,它将压缩周围的血管,使它们弯曲,甚至可能导致附近肝脏的边缘凸起。在这项工作中,采用局部缩放变形来实现质量效应。它将圆形内的像素重新映射到离圆周更近的位置。对于距离γ到圆心的像素,重新映射后的像素距离γ’为:
γ’ = (1 - (1 - γ/γ max) ^ 2 · I/100 ) · γ
其中γmax是扩展圆形区域的半径,I ∈ [0, 100] 是控制扩展强度的超参数。较大的I会导致更强烈的变形。请注意,当I = 0时,重新映射将减小为恒等函数γ’ = γ。重新映射过程应用于扫描和掩膜体积。变形后的体积被命名为 f’‘(x, y, z) 和 l’'(x, y, z)。后者(肝脏/肿瘤分割标签)现在已准备好进行后续训练。
最后,我们通过提亮肿瘤边缘来模拟包膜的外观。边缘区域可以通过以下方式获得:
其中,其中 lb 和 ub 是用于从肿瘤掩膜中提取边缘的下限和上限。然后,我们增加模糊边缘区域的HU强度以模拟包膜:
其中,d 是预定义的肿瘤和其包膜之间的HU强度差,新的扫描体积 f’‘’(x, y, z) 已准备好用于训练或图灵测试。
这个 我们使用的参数如表1所示。可视化示例 样本可以在附录图8-10中找到
肝脏肿瘤的临床知识
这项工作专注于生成肝细胞癌(一种由肝细胞生长的肿瘤)。
在注射对比剂后,肝脏的临床检查过程通常分为三个阶段,包括肝动脉期(注射后30秒)、门静脉期(注射后60-70秒)和延迟期(注射后3分钟)。
通常,只有前两个阶段用于检测肝细胞癌,不同阶段肿瘤的HU(Hounsfield单位,用于测量CT图像中组织的密度)强度值分布不同。
肝动脉期平均密度为111HU(32 - 207HU),门静脉期平均为106HU(36 - 162HU)。
动脉期病变与肝脏的平均差值为26HU(范围-44~146HU)。
平均而言,肝细胞癌在门静脉期比邻近肝实质少11HU(范围从-98到61HU)。
相对较轻的肝细胞癌通常导致较小、较少的球形病变。在大多数情况下,只有一个小的肿瘤出现。而多灶病变,也就是分散的小肿瘤,只在少数情况下出现。
较严重的肝细胞癌通常呈现卫星病变,即一个大的病变被一群小病变包围。大中央病变的形状也比小病变更加不规则。
较大的肿瘤通常显示出明显的肿块效应,伴随着包膜出现,将肿瘤与肝实质分开。
总体的流程示意图如下:
在随机选择一个避开血管的位置后,我们为肿瘤生成高斯纹理和变形的椭球体形状。然后,纹理和形状被组合并放置在所选位置。此外,我们还采取了另外两个后处理步骤来使生成的肿瘤更加逼真:(1)通过局部缩放扭曲来扩大肿瘤边缘;(2)通过亮化肿瘤边缘来生成包膜。四个步骤,淡绿色,仅用于视觉图灵测试(不用于培训)。
实验
1. 数据集
使用LiTS数据集,该数据集提供了肝脏肿瘤的详细的每体素注释。肝脏肿瘤的体积范围从38mm³到349cm³,肿瘤的半径在[2, 44]mm的范围内。研究采用了5折交叉验证,遵循了Tang等人的相同数据划分方法。AI模型(例如U-Net)在包含了101个CT扫描的训练数据上进行训练,这些CT扫描具有标注的肝脏和肝脏肿瘤。
为了进行比较,还从CHAOS (20个CT扫描)、BTCV (47个CT扫描)、Pancreas-CT (38个CT扫描)以及LiTS中的健康受试者(11个CT扫描)中组装了一个包含健康肝脏的数据集,总共116个CT扫描。然后,研究在这些扫描中生成了肿瘤图像,从而产生了大量的合成肿瘤图像-标签对,用于训练AI模型。
为了训练模型,生成了五个不同大小的肿瘤级别,参数和示例可以在附录表6和图11中找到。
2. 评估指标
在这项研究中,肿瘤分割性能是通过以下指标进行评估的:
-
Dice相似系数(Dice Similarity Coefficient,DSC):用于度量生成的肿瘤分割与真实分割之间的相似度。DSC值越高,表示分割结果越接近真实情况。
-
标准化表面Dice(Normalized Surface Dice,NSD):这是一种用于评估分割结果在表面上的一致性的指标。它考虑了分割结果在肿瘤表面的匹配程度,并且具有2mm的容忍度。
此外,肿瘤检测性能是通过以下指标进行评估的:
-
敏感性(Sensitivity):用于度量模型正确检测出真实肿瘤的能力。它计算了模型正确检测到的肿瘤数量与实际存在的肿瘤数量之间的比例。
-
特异性(Specificity):用于度量模型正确排除没有肿瘤的区域的能力。它计算了模型正确排除的没有肿瘤的区域数量与实际没有肿瘤的区域数量之间的比例。
对于所有上述指标,研究团队计算了95%的置信区间(95% CIs)以进行统计分析,并使用小于0.05的p值作为定义统计显著性的截止值。这些指标和统计分析有助于评估模型的性能和结果的可信度。
3. 实施
使用了MONAI2框架来实现U-Net和Swin UN-ETR模型的代码。输入图像首先被裁剪到窗口范围[-21, 189],然后进行归一化,使其具有零均值和单位标准差。在训练过程中,从3D图像体积中随机裁剪了96×96×96大小的图像块。所有模型都进行了4,000个时期的训练,基本学习率为0.0002。每个GPU上的批次大小为两个。他们采用了线性预热策略和余弦退火学习率调度。在推断阶段,他们使用滑动窗口策略,并将重叠区域比例设置为0.75。
零均值 (Zero Mean): 这意味着对图像的每个像素值减去图像所有像素值的平均值。
单位标准差 (Unit Standard Deviation): 这意味着对图像的每个像素值除以图像所有像素值的标准差。
结果与讨论
在临床验证中使用了视觉图灵测试
这项测试使用了50份CT扫描数据,其中包括20份来自LiTS的真实肿瘤扫描,以及30份来自WORD的健康肝脏扫描,但在这些健康扫描中添加了合成的肿瘤。测试由两名具有不同经验水平的医学专业人员参与。他们可以在3D视图中检查每个样本,这意味着可以通过滚动鼠标观察连续的切片序列。
测试结果如表所示:
与最先进的方法进行比较
作者使用无标签肿瘤合成方法与其他无监督肿瘤分割方法进行比较的结果。
研究发现,作者的方法明显优于其他方法,实现了更高的分割性能,这表明了从需要大量标签的肿瘤分割范式转向无标签肿瘤分割的潜力。
对不同模型和数据的概括
作者对合成肿瘤的通用性进行了验证。他们使用了Swin UNETR模型的不同变体,并发现在LiTS数据集上,模型在真实肿瘤上的表现略优于在合成肿瘤上的表现,但两者之间没有统计学差异。此外,他们还使用来自其他数据集的数据对模型的领域泛化能力进行了评估,发现使用来自3个不同数据集的健康数据进行训练的模型在外部数据集上表现更加稳健,特别是在特异性方面表现更好。这对于临床应用非常重要,因为更高的特异性可以减少需要进行侵入性诊断程序以及相关成本的患者数量。
在小肿瘤检测中的潜力
研究强调了通过合成数据生成大量肿瘤,特别是小肿瘤,对于训练AI模型以提高癌症早期检测的效能至关重要。在真实数据集中,早期小肿瘤案例很少,因此AI模型在检测这些小肿瘤方面表现较差。通过使用合成肿瘤数据,研究人员成功地解决了真实数据中大小不平衡的问题,并且证明合成小肿瘤可以显着提高模型的检测性能。这对于及时癌症诊断具有重要意义,可以帮助提高患者的生存率。
可控鲁棒性基准测试
在医学成像领域,标准的AI评估方法通常仅关注肿瘤检测的有效性,但现有测试数据集中的标注肿瘤数量不足以代表真实情况。为了更全面地评估AI在不同大小和位置的肿瘤检测中的性能,作者使用合成肿瘤作为资源,通过调整多个维度的超参数来合成不同特征的肝脏肿瘤,包括位置、大小、形状、强度和纹理。这使得他们能够创建大量合成肿瘤来测试不同情况下的AI模型,包括失败情况。作者还指出,通过将最糟糕情况的合成肿瘤加入训练集并进行微调,可以改进AI算法的性能。最后,他们使用合成肿瘤创建了一个超出分布(o.o.d.)基准测试,以评估不同模型的鲁棒性,发现这些模型在形状、位置和纹理方面表现良好,但对极端大小和强度的肿瘤比较敏感。
关于形状生成的消融研究
设计了消融研究,重点关注形状生成和合成小肿瘤。
在两个方面评估了使用不同合成策略设置的模型:所有肿瘤分割和小肿瘤检测。
在不合成小肿瘤、不进行边缘模糊或不进行弹性变形的形状生成的情况下,性能会大大下降。
原因很简单:
(1) 在形状生成时没有弹性变形和边缘模糊步骤,生成的肿瘤可能非常不真实(即边缘锐利且形状只能是椭球)。附录图12提供了一些示例。
(2) 当训练集中没有小肿瘤(半径<5mm)时,模型缺乏对小肿瘤的泛化能力。
一些词的含义:
“预定义的平均HU强度µt” 是指事先定义的用于表示肿瘤纹理的平均Hounsfield单位(HU)值。这个平均HU值µt用于确定肿瘤的整体密度或灰度级别。在医学图像中,HU值是衡量组织密度的一种方式,通常用于CT扫描中。不同类型的组织具有不同的HU值范围,它们反映了X射线在组织中的吸收程度。
“标准差σp” 表示用于描述肿瘤纹理变化或分布的统计度量。在这里,它表示肿瘤纹理的HU值的变化或分散程度。具有较小标准差的纹理具有较一致的密度,而具有较大标准差的纹理具有更大的变化。
相关文章:
阅读论文:Label-Free Liver Tumor Segmentation
论文标题:Label-Free Liver Tumor Segmentation 翻译:无标记的肝肿瘤分割 摘要 论文的目的:肿瘤合成,通过使用合成数据来改进医学图像分析和AI在肝脏肿瘤检测方面的性能 我们的主要贡献是合成了一种肿瘤生成器,它提…...
leetcode64 最小路径和
题目 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 输入:grid [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释&a…...
金盘图书馆微信管理后台信息泄露漏洞 复现
金盘图书馆微信管理后台信息泄露漏洞 复现 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果…...
nginx实现负载均衡(三)
之前说过大部分我们用到的配置都是在http模块中配置的,这里要实现的负载均衡也是一样的,要在http模块中的http全局块中指定,这里我们先给出一个例子 demo #user nobody; worker_processes 1;#error_log logs/error.log; #error_log log…...
Android---深入理解ClassLoader的加载机制
目录 Java 中的 ClassLoader 1. APPClassLoader 系统类加载器 2. ExtClassLoader 扩展类加载器 3. BootstrapClassLoader 启动类加载器 双亲委派模式(Parents Delegation Model) Android 中的 ClassLoader 1. PathClassLoader 2. DexClassLoader 总结 一个完整的 Java…...
超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告
RPA、iPaaS、AI、低代码、BPM、流程挖掘等在帮助企业实现自动化的同时,也在构建一座座“自动化烟囱”。自动化工具尚未融为一体,协同价值没有得到释放。Gartner于2019年提出超自动化(Hyperautomation)概念,主要从技术组…...
Linux posix_spawn和fork的区别
posix_spawn和fork都是用于在Linux中创建新进程的函数,但它们的工作方式有所不同。posix_spawn它的工作方式类似于fork()后跟exec()。 fork:fork函数创建一个新的进程,该进程是调用进程的一个副本。这意味着除了必要的启动资源外,…...
聊聊分布式架构02——Http到Https
目录 HTTP通信协议 请求报文 响应报文 持久连接 状态管理 HTTPS通信协议 安全的HTTPS HTTP到HTTPS的演变 对称加密 非对称加密 混合加密机制 证书机构 SSL到底是什么 HTTPS是身披SSL外壳的HTTP HTTP通信协议 一次HTTP请求的通信流程:客户端浏览器通过…...
1024 画跳动的爱心#程序代码 #编程语言 #计算机
废话不多说 直接开干! 用到库 random time tkinter 快速镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tkinter 上代码 import random import time from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGH…...
【排序算法】堆排序详解与实现
一、堆排序的思想 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆(若不清楚什么是堆,可以看我前面的文章,有详细阐述)来进行选择数据&am…...
java Spring Boot整合jwt实现token生成
先在 pom.xml 文件中注入依赖 <!-- JWT --> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version> </dependency> <dependency><groupId>io.jsonw…...
如何使用Git和GitHub进行版本控制
如何使用Git和GitHub进行版本控制 版本控制是软件开发过程中的重要组成部分,它允许开发者跟踪和管理代码的变化,以确保团队协作顺畅,并帮助在需要时回溯到以前的代码状态。Git和GitHub是最流行的版本控制工具之一,本文将介绍如何…...
彻底解决 WordPress cURL error 28 错误
cURL 连接超时。 这种情况最普遍,这里的超时并不是完全不可连接,而是因为网络状况或其它原因数据传输缓慢,超过连接的时间限制导致传输中断引起的错误。 不论是何种原因导致连接超时,都可以通过增加超时限制来解决此问题。但 UR…...
LLM项目代码改写
背景: 最近在做代码大语言模型生成项目代码的课题。代码生成现在大部分的工作是在做即时代码生成,这个有点类似代码智能提示,只不过生成的可能是一段片段代码;然而对于整个项目代码的生成做的团队并不多,原因大致如下…...
小谈设计模式(14)—建造者模式
小谈设计模式(14)—建造者模式 专栏介绍专栏地址专栏介绍 建造者模式角色分类产品(Product)抽象建造者(Builder)具体建造者(Concrete Builder)指挥者(Director࿰…...
【kubernetes】k8s中的选主机制
leader-election选主机制 1 为什么需要leader-election? 在集群中存在某种业务场景,一批相同功能的进程同时运行,但是同一时刻,只能有一个工作,只有当正在工作的进程异常时,才会由另一个进程进行接管。这…...
学生选课系统基础版
第四章java中的集合框架 4.1:java中的集合框架概述 1.java概念与作用 现实中很多事物凑在一起都是集合 如购物车是商品的集合 军队呢 是军人的集合 学校是学生的结合 数学中的集合: 具有共同属性的事物的总体 java中的集合类呢 跟数学的集…...
redis no-appendfsync-on-rewrite
no-appendfsync-on-rewriteyes 当用户请求写入redis的时候,这部分数据只是保存在内存中,主线程并不会马上对此数据进行 aof刷盘(而是根据aof刷盘的频率由子线程进行同步),这样子不会阻塞但是会导致数据丢失no-appendfs…...
Spring Cloud Gateway2之路由详解
Spring Cloud Gateway路由 文章目录 1. 前言2. Gateway路由的基本概念3. 三种路由1. 静态路由2. 动态路由1. 利用外部存储2. API动态路由 3. 服务发现路由(自动路由)3.1. 配置方式3.2 自动路由(服务发现)原理核心源码GatewayDiscoveryClientAutoConfigur…...
阿里云RDS关系型数据库详细介绍_多版本数据库说明
阿里云RDS关系型数据库大全,关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB,阿里云百科分享阿里云RDS关系型数据库大全: 目录 阿里云RDS关系型数据库大全 …...
Vue中的数据绑定
一、v-bind单向数据绑定 单向数据绑定中,数据只能由data流向页面。 v-bind:属性名"data变量" 或简写为 :属性名"data变量" 我们修改data中的iptvalue值,页面input框中的value值改变。 而我们修改input框中的value值࿰…...
前后端分离计算机毕设项目之基于SpringBoot的旅游网站的设计与实现《内含源码+文档+部署教程》
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…...
[JAVAee]Spring拦截器
适用场景 像是页面的登录验证处理,权限校验,登录日志的处理. 实现步骤 创建⾃定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执⾏具体⽅法之前的预处理⽅法.将⾃定义拦截器加⼊ WebMvcConfigurer 的 addInterceptors ⽅法中. 下面以登录验证为例,实现拦…...
【nvm】Node Version Manager(NVM)安装配置以及使用(WIN版)
NVM 包管理工具 安装 访问NVM-Windows的GitHub页面:点击nvm-setup.exe。 根据提示进行下一步,文件位置选择自定义位置 验证安装是否成功 nvm version 。如果成功,它将显示NVM的版本号。 使用 nvm list available查看所有的可以被下载…...
【微服务】七. http客户端Feign
7.1 基于Feign远程调用 RestTimeplate方式调用存在的问题 先来看以前利用RestTemplate发起远程调用的代码: String url "http://userservice/user"order.getUserId(); User user restTemplate.getForObject(url,User.class);存在下面的问题…...
【Spring Boot 源码学习】OnWebApplicationCondition 详解
Spring Boot 源码学习系列 OnWebApplicationCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. getMatchOutcome 方法3. isWebApplication 方法3.1 isServletWebApplication 方法3.2 isReactiveWebApplication 方法3.3 isAnyWebApplication 方法 总结 引言 上篇博文带…...
力扣之二分法
今天,学习了二分法,详细内容见代码随想录 (programmercarl.com),讲得十分好。 力扣之35. 搜索插入位置 - 力扣(LeetCode)。 class Solution { public:int searchInsert(vector<int>& nums, int target) {in…...
css图形化理解--扭曲函数skew()
transform: skewX(30deg);transform: skewY(45deg);transform: skew(30deg,45deg);transform: skewX(angleX);transform: skewY(angleY);transform: skew(angleX,angleY); 是CSS中的一个2D变换方法,它用于对元素沿X轴、Y轴进行倾斜变换。其中,angle表示倾…...
八、互联网技术——物联网
文章目录 一、智慧物联案例分析二、M2M技术三、数据保护综合案例分析一、智慧物联案例分析 智能物流是一种典型的物联网应用。一个物流仓储管理系统架构如下图所示: [问题1] 图中的三层功能:仓库物品识别、网络接入、物流管理中心,分别可对应到物联网基本架构中的哪一层? …...
聊聊MySQL的聚簇索引和非聚簇索引
文章目录 1. 索引的分类1. 存储结构维度2. 功能维度3. 列数维度4. 存储方式维度5. 更新方式维度 2. 聚簇索引2.1 什么是聚簇索引2.2 聚簇索引的工作原理 3. 非聚簇索引(MySQL官方文档称为Secondary Indexes)3.1 什么是非聚簇索引3.2 非聚簇索引的工作原理…...
本校网站建设/业务多平台怎么样
B - 最少硬币问题 Description 设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。 对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。 对于给定的1≤n≤10…...
onethink wordpress/网络营销是以什么为中心
在之前的文章中,生成namespace文件是使用open62541提供的nodeset_compiler.py,根据nodeset_compiler.rst(位于open62541/doc/)里的描述,有更好的方法:使用cmake命令ua_generate_nodeset_and_datatypes来生成…...
wordpress新用户权限/关键词排名seo优化
随着智能家居技术发展越来越成熟,各种各样的智能家居系统也应运而生。从通信方式的角度去认识智能家居,供您在选购时选择最适合自己需求的技术系统,目前主流的智能家居系统通信方式有:总线、无线、电力载波和以太网。 一、基于总…...
网站后台管理页面下载/dy刷粉网站推广马上刷
春暖花开,被疫情偷走的三年在今年开学季找补回来了。多个数据反馈,居民消费意愿大幅提升。在淘特上,开工开学节点就很是明显:1月30日以来,淘特箱包品类甚至远超2022年双11,成为开年“第一爆品”。与此同时&…...
网站关键词代码怎么做/百度浏览器app
来源 :http://www.cnblogs.com/excelib/p/5150647.html 原文地址:http://www.excelib.com/article/287/show firewalld简介 Centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处: 1、…...
专业网站建设制作/百度热搜榜今日头条排名
GitHub上,一份用Python做交互式图形的资源火了。 这一工具名为Bokeh,官方介绍称,它能读取大型数据集或者流数据,以简单快速的方式为网页提供优美、高交互性能的图形。 比如,有人用它做出了这样的图: 有人…...