图像与像素:利用ImageJ分析荧光显微镜图像|QuPath基础教程1|24-08-08
内容概要
数字图像由像素组成,每个像素具有一个数值,通常与检测到的光线相关。相同的像素值可以通过不同的方式进行显示。在科学图像处理中,可以通过修改查找表来独立于像素值改变图像外观。
一、引言
图像由其最小的组成单位——像素构成。
像素一词来源于“pic_ture _el_ement”,在计算机系统中,每个像素仅代表一个数值。
当图像数据被显示时,像素值通常被转换成特定颜色的方块,这仅是为了让我们能够快速地获取图像内容的概览,即像素的大致值及其相互之间的位置关系。在处理和分析图像时,我们需要超越显示层面,深入到实际数据:即数值。
数据(像素值)与显示(彩色方块)之间的区分在荧光显微镜领域中尤为重要。显微镜提供的像素是对样本发出光的测量。基于这些测量,我们可以进行推断,例如更多的光可能表明特定结构或物质的存在,而了解确切的数值则允许我们进行对比和量化测量。
另一方面,彩色方块对于测量并不重要:它们只是为了视觉上的美观(图1)。
- 图像展示方式:
- (A) & (B):图像使用不同灰度的小方块来展示,每个方块代表一个像素。这是一种用于展示的惯例,使得图像可以被直观地看到。
- 像素存储方式:尽管图像在展示时使用灰度方块,但像素本身是以数字数组的形式存储的。
- 数字表示的挑战:直接查看这些数字数组对于我们来说很难直观地想象图像包含的内容。
- 图像与数据的关系:这段文字强调了图像的视觉表示与其底层数据表示之间的差异。我们习惯于通过视觉元素来理解图像,而数字数据需要通过特定的方式转换或解码才能形成我们可以识别的图像。
然而,有两个相关的事实可能会给我们带来困扰:
-
相同外观的图像可能包含不同的像素值:
- 这个观点指出,即使两幅图像在视觉上看起来几乎相同,它们在像素层面上的数据可能不同。这可能是由于多种原因造成的,例如:
- 图像使用不同的颜色深度(例如,8位与16位颜色)。
- 图像在不同的时间或条件下被获取,导致微小的差异。
- 图像经过不同的处理步骤,如压缩、调整大小或颜色校正,这些步骤可能改变了像素值。
- 这个观点指出,即使两幅图像在视觉上看起来几乎相同,它们在像素层面上的数据可能不同。这可能是由于多种原因造成的,例如:
-
外观不同的图像可能包含相同的像素值:
- 这个观点说明,两幅在视觉上明显不同的图像,可能在某些区域或某些像素上具有相同的数值。这可能是由于:
- 图像中存在不可见或不重要的区域,这些区域的像素值可能相同,但对整体视觉效果影响不大。
- 图像的某些部分可能经过了相同的处理,如滤镜或效果,导致这些区域的像素值一致。
- 图像的显示方式或观察条件(如亮度、对比度设置)可能影响我们对图像差异的感知,即使某些像素值相同。
- 这个观点说明,两幅在视觉上明显不同的图像,可能在某些区域或某些像素上具有相同的数值。这可能是由于:
这两个观点强调了图像分析中的一个重要概念:像素值与人类视觉感知之间的关系并不总是直接的。图像的外观不仅取决于像素值,还受到观察条件、图像处理方法和人类视觉系统的影响。
因此,在图像分析和处理中,理解像素值与视觉感知之间的复杂关系是非常重要的。
二、图像处理软件ImageJ与Fiji
为了处理数字图像,我们不仅需要能够处理图像的任何软件,我们更需要能够探索数据并精确控制数据处理的科学软件。
ImageJ是由Wayne Rasband在美国国立卫生研究院开发的一款为此目的设计的软件。其中的“J”代表Java,即该软件所使用的编程语言。ImageJ可从http://imagej.net免费下载,其源代码属于公共领域,便于修改和分发。此外,通过添加插件、宏或脚本来扩展其功能,使其具有极高的可定制性。[1]
这种出色的可定制性可能存在一个潜在缺点:初学者可能难以知道从何处开始,哪些可选功能真正优秀,以及在哪里能找到这些功能。
2-:Fiji
Fiji,其全称为“Fiji Is Just ImageJ”,在某种程度上解决了这个问题。
Fiji是ImageJ的一个发行版,它预装了一系列主要面向生命科学家的附加组件。Fiji还包含了自身的额外功能,如集成的自动更新和错误修复系统,以及额外的开源库,这些库使得程序员能够更轻松地实现复杂的算法。
因此,ImageJ能够执行的所有操作在Fiji中也能完成(因为Fiji内包含了完整的ImageJ),但反之则不成立(因为Fiji包含了许多额外的功能)。在本课程中,我们将使用Fiji,可从http://fiji.sc/免费下载。
如果你是Mac芯片,且遇到了我这种问题,可以参考下列解决方式。
✅解决方法:
安装成功界面如下:
2-:用户界面
ImageJ/Fiji[3]的用户界面可能需要一些时间来适应,其初始界面可能不如某些商业软件那样友好和亲切。但好消息是,一旦用户熟悉了操作方式,就能够完成许多在其他软件应用中无法实现的功能。
我们将要使用的一些界面组件如图2所示。
一开始,仅显示包含菜单、工具栏和状态栏的主窗口,其他窗口会在打开和处理图像时按需出现。如果用户在处理众多图像时意外将主窗口置于后台,可以通过按Enter键将其恢复到前台。
2-:操作技巧与提示
以下是一些不那么显而易见的操作技巧,它们可以帮助用户更轻松地使用ImageJ或Fiji:
- 通过将文件(例如从桌面、Windows资源管理器或Mac Finder)拖动到状态栏,可以快速打开文件。大多数可下载的插件也可以通过这种方式安装。
- 如果用户知道命令(包括插件)的名称,但忘记了它在菜单中的位置,可以输入Ctrl+L(或者可能只需输入L)来唤出命令查找器——可以将其视为一个列表——并开始输入名称。用户可以直接运行命令,或者选择“显示完整信息”来查找其所在的菜单。注意,一些命令可能有相似或相同的名称,在这种情况下,它们可能只能通过其所在的菜单来区分。
- ImageJ的撤销功能非常有限——在修改单个2D图像时可能可用,但在处理更多维度的数据时则不可用(参见“维度”部分)。如果你习惯了像Microsoft Word或Adobe Photoshop这样具有长撤销列表的软件,这可能会不方便。但这样做有一个合理的理由:支持撤销可能需要存储图像前版本的多个副本,这在处理大型数据集时可能会迅速耗尽所有可用内存。解决方案是在进行任何可能不想保留的处理之前,手动选择创建图像的副本。
- 有许多快捷键可供使用。尽管菜单提示需要按Ctrl键,但实际上,除非选项下方另有说明,否则并不需要。用户还可以在设置中添加更多快捷键。
- 在浏览大型图像时,可以使用滚动工具,或者按住空格键的同时点击并拖动图像。图像窗口左上角的一个小矩形图示(如图2所示)指示了当前显示的是整个图像的哪一部分。
- 工具栏中的图标提供了比看起来更多的工具和选项。双击和右键点击工具栏中的图标都可以揭示更多的可能性。
- 按下Escape键可能中止任何当前正在运行的命令的操作……但这需要命令的作者实现了此功能。因此,它可能不会产生任何效果。
三、数据及其显示
3-1:图像比较
现在我们回到数据与显示的二分法。在图3的顶部行中,可以看到四幅图像。第一对和第二对图像看起来彼此相同。
然而,实际上只有(A)和(C)在内容上是相同的。由于这些图像包含显微镜给出的原始像素值,它们可以进行分析,但是分析(B)或(D)可能会导致不可靠的结果。
因此,仅基于图3顶部行中的外观来可靠地评估这些图像之间的相似性和差异性是不可能的,但如果我们考虑下面的相应图像直方图,就会变得容易得多。
这些直方图(使用插件创建)通过一系列垂直条形图展示了图像中每个不同值的像素总数,条形图上方显示了一些额外的统计数据——如该图像中所有像素的最大值、最小值和平均值。观察直方图和下方的统计数据可以清楚地看出,只有(A)和(C)可能包含相同的值。
仅通过比较直方图是否总是可靠的方法来判断两幅图像是否完全相同?
- 直方图比较的局限性:
- 明确指出,仅通过比较直方图来判断两幅图像是否相同是不可靠的。即使两幅图像在视觉上截然不同,它们的直方图仍有可能完全相同。
- 像素重排的例子:
- 举例说明,如果你有一幅图像,然后随机重排它的像素来创建第二幅图像,直方图将保持不变,但图像本身会改变。这是因为直方图只记录了像素值的分布,而不记录像素的具体位置。
- 更微妙的差异:
- 指出即使图像在视觉上相似,也可能因为像素的不同排列而具有不同的直方图和统计数据。
- 直方图比较的优点:
- 尽管直方图比较有局限性,但它快速且是一个相当好的指导。在ImageJ中,比较直方图只需点击每幅图像然后按"H"键。
- 直方图比较的指示作用:
- 如果两幅图像的直方图不相同,至少可以明确它们不是完全相同的。这为图像差异提供了一个基本的指示。
- 总结:
- 直方图是比较图像的一种快速方法,但它不是决定性的。对于更精确的图像比较,需要采用其他方法,这些方法可能包括像素级的分析。
3-2:图像颜色映射至像素的分析
图3中图像呈现不同外观的原因在于,前三个图像并未使用相同的查找表(LUTs,有时也称为色彩映射),而在(D)中,图像已被展平。展平操作将在“通道与颜色”部分变得相关,但目前我们将重点讨论LUTs。
LUT本质上是一个表格,其中行给出了可能的像素值以及用于显示它们时应采用的颜色。在ImageJ中,对于图像的每个像素,通过在LUT中“查找”其值来确定在屏幕上绘制方块的色彩。
这意味着,当我们想要修改图像的显示方式时,可以简单地更改其LUT,同时保持所有像素值安全不变。
以“Spooked.tif”作为示例图像,在Fiji软件中探讨像素值与查找表(LUTs)。
原始状态下,每个像素应呈现某种灰度阴影(这表明相应的LUT色调沉重)。当光标在图像上移动时,屏幕顶部的状态栏将显示“value =”,其后跟随光标下像素的数值。
随后,若进入“图像”菜单选择“查找表…”(Image ▸ Lookup Tables…),并点击其他LUT,图像外观应立即更新。但将光标放置于之前相同的像素上,会发现实际像素值并未改变。
最后,若要“查看”正在使用的LUT,可选择“图像”菜单下的“颜色”然后选择“显示LUT”(Image ▸ Color ▸ Show LUT)。
这将展示一个从0到255的条形图(这个范围的含义将在阅读“类型与位深度”后更加清晰),其中显示了每个值对应的颜色。
点击“列表”(List)将展示LUT中涉及的实际数值,以及“红色”、“绿色”和“蓝色”的列。这些列提供了混合红色、绿色和蓝色光线的相对量,以得到正确的颜色(详见“通道与颜色”)。
3-3:使用不同LUT的原因
更改LUT具有多个优势。
一个简单的理由是,我们可以利用LUT使图像中的颜色与我们检测到的光波长相匹配,例如将DAPI染色显示为蓝色或GFP显示为绿色。
然而,这往往并非最佳选择,您可能更倾向于使用某种多色LUT(例如ImageJ中的“Fire”)来显示图像,尽管这种LUT在物理上没有特定意义。
这是因为人眼对于区分同一颜色的不同阴影相对不敏感,而使用许多不同的颜色呈现相同信息可以使像素值之间的差异更加明显。
3-4:修改LUT有助于信息的可视化
将一组LUT颜色替换为另一组并不是改变外观的唯一方法。
我们还可以保持相同的颜色,但更改每个颜色所对应的像素值。
例如,假设我们选择了一个灰度LUT。大多数显示器理论上可以显示256种不同的灰度阴影,因此我们可以为0到255之间的像素值分配不同的阴影,其中0对应黑色,255对应白色。
但假设我们的图像只在5到50的范围内包含有趣的信息。那么我们只使用了46种相似的灰度阴影来显示它,而没有充分利用显示器或我们的视力。
如果我们把所有值≤5的像素设为黑色,≥50的设为白色,然后将所有可用的灰度阴影分配给之间的值,那么更容易看出发生了什么。
这将充分利用我们LUT中的颜色,并给我们一个对比度提高的图像。当然,我们可以使用相同的原则应用任何其他LUT,分别用LUT中的第一和最后颜色替换黑色和白色。
3-5:调整显示范围
在ImageJ中,这种类型的LUT调整是通过命令来完成的Image ▸ Adjust ▸ Brightness/Contrast…(可以通过按Shift+C快速访问;见图[4])。
出现的头两个滚动条称为“最小值”和“最大值”,它们定义了像素被赋予LUT的第一种或最后一种颜色的阈值。修改这两个滑块中的任何一个都会自动改变“亮度”和“对比度”滑块。
图像处理中对比度调整和按钮功能使用的说明和警告
- 按钮功能解释:
- Auto:自动选择对比度设置,可能会使图像看起来更好(通过使最小值和最大值更接近)。
- Reset:重置确保最小值和最大值与图像中的实际最小和最大像素值相匹配(对于8位图像,即为0和255)。
- Set:允许用户手动输入最小值和最大值。
- Apply按钮的警告:
- 特别注意"Apply"按钮,因为它实际上会改变图像的像素值,导致信息丢失。
- 提醒用户按下"Apply"后,原始的像素值很可能无法恢复。
3-6:科学图像分析与照片编辑的区别
可以将像素值与LUT的区别想象为:像素值决定了图像的真实身份,而LUT仅仅是图像恰好穿着的“外衣”(图5)。
Figure 5通过类比阐释了图像的像素值与其显示效果之间的关系。
正如同一个人因服装和配饰的改变而看起来截然不同(A),图像的显示效果也可能因调整而与原始数据产生显著差异。
反之,不同的人可能因装扮相似而在初看之下难以区分,但细看之下仍有本质的不同(B),这同样适用于图像,其中原始像素值保持不变,而显示效果可能因不同的视觉呈现而变化。
这个类比强调了在图像分析中,不应仅凭显示效果判断,而应深入考虑图像的原始数据,以揭示其真实信息。
对于科学分析而言,至关重要的一点是,更改LUT(无论是通过切换颜色还是调整亮度/对比度),不会破坏或修改底层数据。在ImageJ中的正常对比度控制中便是如此(如果您避免点击诱人的“应用”按钮)。
然而,在只关心最终外观的其他应用中,如照片编辑,这一特性可能并不那么重要。例如,在Photoshop中调整亮度、对比度或“色阶”时,您确实会改变底层像素值——一旦更改,您无法“改回”(除非使用“撤销”命令)并期望恢复原始值。
因此,如果您在Photoshop中增强了图像,像素值可能会轻易地被更改,以至于无法再对其可靠地解释!
3-7:像素属性与像素大小
至此,您可能已经对意外更改像素值从而损害图像完整性产生了应有的警惕,因此,在尝试新操作之前,您总是会先计算直方图或其他测量数据,以检查像素值是否发生了变化。
本章最后讨论的是像素分析的另一个重要特征:像素的大小,以及因此测量或计数像素如何与实际生活中识别事物的大小和位置相关联。对于许多分析来说,尺寸的正确性是使其具有意义的关键。
在ImageJ中,像素大小可以在菜单下找到(Image ▸ Properties…),您将看到Pixel width
(像素宽度)和Pixel height
(像素高度)的值,这些值是以Unit of Length
(长度单位)来定义的。
一种有用的思考方式是将这些值视为图像包含的总视场大小的比例(见图[6])。
Figure 6展示了两个具有相同视场但不同像素数量的图像,这导致了不同的像素尺寸。
图像(A)的像素宽度和高度都是64.2微米除以600像素,等于0.107微米每像素。而图像(B)的像素宽度和高度都是64.2微米除以75像素,等于0.856微米每像素。
尽管为了显示目的,(B)被放大到与(A)相同的尺寸,但其较大的像素使其看起来更加"块状"。这说明了图像的分辨率和像素尺寸对于图像的显示效果有重要影响,即使两个图像在内容上具有相同的视场。
分辨率较低的图像(B)由于每个像素覆盖更大的实际面积,因而在放大后会显示出更明显的像素化效果,这可能会影响对图像细节的观察和分析。
例如,假设我们正在成像一个宽度为100µm的区域,且图像水平方向上有200个像素。那么我们可以将像素的’宽度’视为100/200 = 0.5µm。(PS:这也是病理AI中常用的参数)
像素高度可以以类似的方式定义和使用,通常(但不一定)与宽度相同。
3-8:像素大小与测量
了解像素大小使得尺寸测量校准成为可能。
例如,如果在图像中测量某个结构的水平长度,并发现它是10个像素长,像素大小为0.5µm,我们可以推断出其实际长度(大致)为10 × 0.5µm = 5µm。
在ImageJ中测量事物时,这种校准通常是自动进行的,因此,为了使结果合理,尺寸必须是正确的。在理想情况下,适当的像素大小会在图像获取过程中写入图像文件,并在随后读取——但这并不总是奏效,因此应始终检查属性…
。
如果ImageJ在图像文件中找不到合理的值,默认情况下,它会将每个像素的宽度和高度设定为1.0像素……这并不提供太多信息,但至少不是错误的。如果您知道更合适的值,可以手动输入。
3-9:像素大小与细节
通常情况下,如果荧光图像中的像素尺寸较大,那么我们无法观察到非常精细的细节(见图[6])。
然而,当我们考虑数百纳米的尺度时,光的衍射会使问题变得复杂,因此获取像素尺寸更小的图像并不一定能带来额外的信息——实际上可能反而成为一种阻碍。
这个问题将在后续章节中进一步探讨。
相关文章:

图像与像素:利用ImageJ分析荧光显微镜图像|QuPath基础教程1|24-08-08
内容概要 数字图像由像素组成,每个像素具有一个数值,通常与检测到的光线相关。相同的像素值可以通过不同的方式进行显示。在科学图像处理中,可以通过修改查找表来独立于像素值改变图像外观。 一、引言 图像由其最小的组成单位——像素构成。…...

Prompt Fuzzer:用于增强 GenAI 应用程序的开源工具
Prompt Fuzzer 是一个开源工具,可以评估GenAI应用程序的系统提示针对基于动态 LLM 的威胁的安全性。 Prompt Fuzzer 功能: 1. 模拟十几种类型的 GenAI 攻击。 2. 该工具会根据系统提示自动进行情境化,针对与 GenAI 应用程序相关的特定主题或行…...

Vision Pro使用GLFT 加载模型shader错误解决办法
Glft shader在vision pro上加载错误 前言相关背景解决办法 参考文章 前言 之前在Vision Pro上尝试加载Glb文件,但是加载完成后发现加载出来的Glb文件材质不正确。材质是黑色的。因此整理一下解决方案。 相关背景 使用Unity开发,Glb的加载插件为gltf F…...

Netty技术全解析:MessageToMessageCodec类深度解析
❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」 ☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 :…...
Three 【3D车模换肤】
目录 🌟前言🌟先看效果🌟实现代码🌟写在最后 🌟前言 哈喽小伙伴们,最近工作比较忙一直没有给大家更新,新的专栏 Three.js第三篇,记录一下博主学习Three.js的过程;一起来…...

语言模型简介和Ngram模型(1)
语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…...

MessageBox弹框替代系统自带的alert、confirm -- 高仿ElementUI MessageBox
MessageBox 弹框 MessageBox 的作用是替代系统自带的 alert、confirm ,仅适合展示较为简单的内容。如果需要弹出较为复杂的内容,请使用定制的弹窗。基本仿照ElementUI的同名组件。 原生,无依赖项,自适应布局,双端通用&…...
数据结构一排序算法
排序算法总结 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中…...

[Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序
一、题目描述 原题地址 二、整体思路 (1)快排 对于SELECT K问题,可以通过三路快排解决,快排可以把一个元素放至按升序排序的数组正确的位置,左边为小于该元素的元素集合,右边为大于该元素的元素集合。 三…...

【栈和队列】常见面试题
文章目录 1.[有效的括号](https://leetcode.cn/problems/valid-parentheses/description/)1.1 题目要求1.2 利用栈解决 2. [用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)2.1 题目要求2.2 用队列实现栈 3.[用栈实现队列](https://le…...

关于float浮点值二进制存储和运算精度损失的话题
1.前言 浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。 2.知识点 (1)IEEE 754标准 EEE 754标准…...

python爬虫学习记录-请求模块urllib3
(文章内容仅作学习交流使用) urllib3是一个功能强大、条理清晰,用于HTTP客户端的第三方模块 urllib3-发送网络请求 使用urllib3发送网络请求时,需要先创建PoolManager对象,并使用该对象的request方法发送请求&#…...

谷粒商城实战笔记-133~135-城业务-商品上架-远程上架接口
文章目录 一,谷粒商城实战笔记-133-城业务-商品上架-远程上架接口1,开发目标2,详细设计2.1,提前建立索引2.2,构造批量操作请求参数2.3,使用HighLevelClient调用bulk请求保存数据 二,134-商城业务…...

【React】详解 App.js 文件
文章目录 一、App.js文件的基本结构1. 引入必要的模块2. 定义根组件3. 导出根组件 二、App.js文件的详细解析1. 函数组件与类组件函数组件类组件 2. 使用CSS模块3. 组织子组件4. 管理组件状态使用useState钩子使用state对象 三、App.js文件的最佳实践1. 保持组件的简洁和模块化…...

【ML】self-supervised Learning for speech and Image
【ML】self-supervised Learning for speech and Image 1. self-supervised Learning for speech and Image1.1 自监督学习在语音处理领域的方法及其特点1.2 自监督学习在图像处理领域的方法及其特点 2. Predictive Approach2.1 特点2.2 适用场景 3. contrastive Learning4. 语…...
青岛实训day24(8/8)
一.Python环境准备 1.查看有没有python3 yum list installed |grep python yum list |grep python3 最新安装3.12可以使用源码安装 2.下载安装python3 yum -y install python3 3.查看版本 [rootpython ~]# python3 --version Python 3.6.8 4.进入编辑 [r…...
*算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
刷题记录 101. 孤岛的总面积DFSBFS 102. 沉没孤岛DFSBFS *103. 水流问题*104. 建造最大岛屿 101. 孤岛的总面积 题目地址 本题要求不与矩阵边缘相连的孤岛的总面积。先将与四个边缘相连的岛屿变为海洋,再统计剩余的孤岛的总面积。无需再标识访问过的结点ÿ…...
设计模式 由浅入深(待完结)
一、设计模式是什么? 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。 二、设计模式有哪些? 1. 观察者模式 定义对象间的一种一对多(变化&#x…...
(第34天)645、最大二叉树
目录 645、最大二叉树题目描述思路代码 645、最大二叉树 题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大…...
Python知识点:如何使用Paramiko进行SSH连接与操作
使用Paramiko进行SSH连接与操作可以分为以下几个步骤: 安装Paramiko: 首先需要安装Paramiko库,可以使用pip进行安装: pip install paramiko建立SSH连接: 使用Paramiko连接远程服务器,需要提供服务器的地址、…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...