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

ImageJ用户手册——第二部分(ImageJ操作)

ImageJ用户手册-第二部分

  • ImageJ的使用
    • 4. 使用键盘快捷键
    • 5. 查找命令
    • 6. 撤消和重做
    • 7. 图像类型和格式
      • 原生格式
      • 非原生格式
    • 8. 堆栈、虚拟堆栈、超堆栈
      • Stacks(堆栈)
      • Virtual Stacks(虚拟堆栈)
      • Hyperstacks(超堆栈)
    • 9. 彩色图像
      • 伪彩色图像
      • 真彩色图像
        • 颜色空间和颜色分离
        • 传送颜色信息
      • 彩色合成图像
    • 10. 选区
      • 10.1 操作选区
      • 10.2 组合选区
      • 10.3 具有亚像素坐标的选区
        • 插值选区
    • 11. 套印
    • 12. 3D卷积
      • 3D Filters
      • 3D Object Counter
      • 3D Viewer
      • Simple Neurite Tracer
      • TrakEM2
    • 13. 设置和首选项

ImageJ的使用

这部分介绍了ImageJ的一些基本知识,以便用户更有效地使用该软件。它还介绍了本手册中使用的一些重要术语和概念。如果您已经有效地使用了该程序,并且熟悉诸如Virtual Stacks, Hyperstacks, Pseudocolor Images, Color Composite Images or Composite Selections

4. 使用键盘快捷键

当你使用ImageJ时,你会学到越来越多的快捷键,因为(几乎)所有的快捷键都列在ImageJ菜单中。同样,在本指南中,每个命令的名称上都列出了快捷键(两边用方括号括起来)。
请注意,这些键绑定的表示法是区分大小写的,即没有明确提及时便使用Shift修饰符(例如大写A表示Shift+a),并默认选中“编辑>选项>其他”中的快捷键需要Ctrl键。

修饰符有Shift、Ctrl和Alt三种。

5. 查找命令

浏览ImageJ命令、宏和插件的大量列表可能相当麻烦。通过其内置的命令查找器/启动器,ImageJ提供了一种快速替代方案,使您能够极其快速地检索命令:Plugins>Utilities>Find Commands. . .。

此外,ImageJ还提供了一个查找功能,用于查找计算机上的宏指令、脚本和插件源文件:Plugins>Utilities>Search. . .。由于大多数IJ源文件都包含间接注释,因此您可以使用此实用程序来检索不仅与图像处理例程相关的文件,还与实际上下文(如放射图、细胞或组织学)相关的文件。事实上,ImageJ源文件包含详细的注释,这些注释对想要了解更多ImageJ例程和算法的开发人员和普通用户都很有用。

6. 撤消和重做

您可能会注意到的第一件事:ImageJ没有大的undo/redo缓冲区。撤消(编辑>撤消)当前仅限于最近的图像编辑/过滤操作。随着时间的推移,您会意识到这对于最大限度地减少内存开销是必要的。尽管如此,对于IJ 1.45及更高版本,在大多数情况下,Undo是可撤消的,并且如果在Edit>Options>Memory & Threads. . . 选中“Keep multiple undo buffers(保留多个撤消缓冲区)”,则可以应用于多个图像。

如果您无法从错误中恢复,您可以始终使用 File>Revert 将图像重置为其上次保存的状态。对于选择,Edit>Selection>Restore Selection 可用于恢复任何错误选择。

在ImageJ中,相当于“redo”的是 Process>Repeat 命令,它会重新运行以前使用的命令。

7. 图像类型和格式

数字图像是像素强度值的二维网格,图像的宽度和高度由x(行)和y(列)方向上的像素数量定义。因此,像素(图片元素)是图像中最小的单一成分,具有介于黑色和白色之间的数值——像素强度。该范围的特征,即图像中可能存在的唯一强度(亮度)值的数量,被定义为图像的位深度,并指定强度编码的精度水平。例如:2位图像有2的2次方=4个色调:00(黑色)、01(灰色)、10(灰色)和11(白色)。4位图像具有2的4次方=16个色调,范围从0000(0)到1111(16)等。就每像素比特数(bpp)而言,ImageJ处理的最常见的图像类型(图像>类型)有:

  1. 8–bit:可以显示256个灰度级的图像(仅限整数)
  2. 16–bit:可以显示65536个灰度级的图像(仅限整数)
  3. 32–bit:可以显示4294967296灰度级(实数)的图像。在32位图像中,像素由浮点值描述,可以具有任何强度值,包括NaN(非数字)。
  4. RGB Color:彩色图像,可在红色、绿色和蓝色通道中显示256个值。这些是24位图像。RGB彩色图像也可以是32位彩色图像(24位彩色图像,带有额外的8位编码alpha混合值,即透明度)。

原生格式

ImageJ以本地方式(即不需要第三方插件)打开以下格式:TIFF, GIF, JPEG, PNG, DICOM, BMP, PGM 和 FITS。

  1. TIFF:(标记图像文件格式)是ImageJ的“默认”格式(参见File>Save)。图像可以是1位、8位、16位(无符号)、32位(实数)或RGB颜色。具有多个相同类型和大小的TIFF文件将作为Stacks或Hyperstacks打开。ImageJ通过LZW、PackBits和ZIP(Deflate/Ampure)压缩方案打开无损压缩的TIFF文件。此外,TIFF文件可以打开并保存为ZIP压缩包。当ImageJ在调试模式下运行时,Tiff标签和导入文件所需的信息(图像数量、第一个图像的偏移量、图像之间的间隙)将打印到日志窗口(Edit>Options>Misc. . . )。
  2. DICOM:(医学数字成像与通信)是医学影像学界流行的标准。ImageJ仅支持未压缩的DICOM文件。包含多个图像的DICOM文件以Stacks形式打开。 Image>Show Info. . .显示DICOM的标题信息。可以使用File>Import>Image Sequence. . . 打开DICOM序列。或者将文件夹拖放到 ImageJ 窗口上。导入的序列按图像编号而不是文件名进行排序,当DICOM图像以TIFF格式保存时,将保留标签。ImageJ支持自定义DICOM字典。
  3. FITS:(灵活的图像传输系统)是天文界用于数据交换和档案存储的格式。Image>Show Info. . .显示FITS的标题信息。更多信息见here。
  4. PGM(便携式灰度图)PBM(便携式位图)PPM(便携式像素图):使用ASCII标头的简单图像格式。更多信息见here。
  5. AVI(音频、视频转换):是一种容器格式,可以包含以多种不同方式编码的数据。ImageJ仅支持未压缩的AVI、各种YUV 4:2:2压缩格式以及PNG或JPEG编码的单个帧。请注意,大多数MJPG(运动JPEG)格式无法正确读取。尝试以其他格式打开AVI将失败。

非原生格式

打开文件时,ImageJ首先检查它是否可以以原生方式处理该格式。如果ImageJ无法识别文件的类型,它会使用HandleExtraFileTypes(与ImageJ捆绑的插件)调用适当的读取器插件。如果失败,它会尝试使用 OME Bio-Formats library(如果存在)打开文件,这是一个出色的插件,支持显微镜中使用的一百多种最常见的文件格式。如果仍然无法打开文件,则会显示一条错误消息。

因为这两个插件都在积极开发中,所以保持它们的更新是很重要的。

此外,ImageJ网站列出了60多个插件,这些插件可以识别更“奇异”的文件格式。ImageJ文档门户还维护ImageJ支持的文件格式列表(有些过时)。

8. 堆栈、虚拟堆栈、超堆栈

Stacks(堆栈)

ImageJ可以在单个窗口中显示多个空间或时间相关的图像。这些图像集被称为堆栈。构成堆栈的图像称为切片。在堆栈中,像素(表示位图图像中的2D图像数据)变为体素(体积像素),即在三维空间中的规则网格上的强度值。

堆栈中的所有切片必须具有相同的大小和位深度。滚动条提供了在切片中移动的能力,滑块前面有一个播放/暂停图标,可用于启动/停止堆栈动画。右键单击此图标将运行“动画选项”对话框。

作为一种选择,大多数ImageJ过滤器将处理堆栈中的所有切片。ImageJ将多图像TIFF文件作为堆栈打开,并将堆栈保存为多图像TIFF。File>Import>Raw. . .命令打开其他多图像、未压缩的文件。图像文件夹可以作为堆栈打开,方法是将文件夹拖放到“ImageJ”窗口,或选择 File>Import>Image Sequence. . .。要创建新堆栈,只需选择 File>New>Image. . . 并将切片字段设置为大于1的值。Image>Stacks>submenu 包含用于常见堆栈操作的命令。

Virtual Stacks(虚拟堆栈)

虚拟堆栈驻留在磁盘上(而不是驻留在RAM上),是加载不适合RAM的图像序列的唯一方法。在使用虚拟堆栈时,需要记住以下几点:

  • 虚拟堆栈是只读的,因此在切换到其他切片时,对像素数据所做的更改不会保存。你可以通过使用宏指令来解决这个问题。或Process>Batch>Virtual Stack. . . 命令.
  • 使用Image>Crop等命令很容易耗尽内存,因为任何由不生成虚拟堆栈的命令生成的堆栈都将驻留在RAM中。
  • TIFF虚拟堆栈的访问速度通常比JPEG虚拟堆栈更快。通过将JPEG图像作为虚拟堆栈打开,并使用 File>Save As>Image Sequence. . . 以TIFF格式保存,可以将JPEG序列转换为TIFF。

ImageJ将“(V)”附加到虚拟堆栈和超堆栈的窗口标题。File>Import>submenu 中的几个内置ImageJ命令能够打开虚拟堆栈,即: TIFF Virtual Stack. . . , Image Sequence. . . , Raw. . . , Stack From List. . . , AVI. . .。此外,TIFF堆栈可以通过拖放作为虚拟堆栈打开。

Hyperstacks(超堆栈)

Hyperstacks是多维图像,将图像堆栈扩展到四(4D)或五(5D)维度:x(宽度)、y(高度)、z(切片)、c(通道或波长)和t(时间帧)。Hyperstacks显示在一个带有三个标记滚动条的窗口中。与Stacks中的滚动条类似,帧滑块(t)有一个播放/暂停图标。

9. 彩色图像

ImageJ主要通过三种方式处理颜色:伪彩色图像、RGB图像、RGB/HSB堆栈和合成图像。

伪彩色图像

伪彩色(或索引彩色)图像是通过查找表或LUT分配颜色的单通道灰度图像(8、16或32位)。LUT实际上是一个预定义的灰色值表,具有匹配的红色、绿色和蓝色值,因此灰色阴影显示为彩色像素。因此,伪彩色图像中的颜色差异反映了物体的强度差异,而不是已经成像的样本的颜色差异。

8位索引彩色图像(如GIF)是伪彩色图像的一种特殊情况,因为它们的查找表与图像一起存储在文件中。这些图像被限制为256种颜色(24位RGB图像允许1670万种颜色),同时文件大小也较小。通过颜色量化算法将真实颜色值减少到256调色板。ImageJ使用Heckbert的中值剪切颜色量化算法,在大多数情况下,该算法允许索引的彩色图像看起来与24位原始图像几乎相同。

真彩色图像

如图像类型和格式中所述,诸如RGB图像之类的真彩色图像反映真实的颜色,即,RGB图像中的绿色反映样本中的绿色。彩色图像通常由彩色CCD相机产生,其中滤色器阵列(贝尔蒙版)放置在图像传感器上。

颜色空间和颜色分离

颜色空间描述图像处理设备处理的色域。因为人类的视觉是三色的,所以大多数颜色模型用三个值来表示颜色。从数学上讲,这些值(颜色分量)形成了一个三维空间,如RGB、HSB、CIE Lab或YUV颜色空间。

RGB(红、绿、蓝)是最常用的颜色空间。然而,在处理颜色信息时,诸如HSB(色调、饱和度、亮度)之类的其他替代方案提供了显著的优势。在HSB颜色空间中,Hue描述了纯色的属性,因此可以区分颜色。饱和度(有时称为“纯度”或“活力”)是颜色阴影的特征,即在纯色中添加了多少白色。亮度(也称为Value–HSV系统)描述颜色的整体亮度。在数字成像处理方面,使用HSB系统而不是传统的RGB通常是有利的:例如,由于HSB图像的亮度分量对应于该图像的灰度版本,因此在需要灰度图像的例程中仅处理亮度通道是一个显著的计算增益。

在ImageJ中,使用 Image>Type>submenu 执行图像类型之间的转换。HSB、RGB、CIE Lab和YUV颜色空间的分割可以通过Image>Adjust>Color Threshold. . .命令。使用Gabriel Landini的颜色反卷积插件也可以分离颜色成分(特别适用于组织化学染色的定量)。此外,还可以从ImageJ网站上获得其他几个与颜色处理相关的插件。

传送颜色信息

人们看到的颜色变化很大。事实上,流行的短语“一幅画抵万字”可能不适用于某些彩色图像,特别是那些不遵循彩色通用设计基本原则的图像。引用Okabe和Kei Ito的话:

	色盲的人可以识别各种各样的颜色。但某些颜色范围很难区分。色盲的发生频率相当高。每12名高加索人中就有1人(8%)、每20名亚洲人中就有一人(5%)和每25名非洲人中就有1%(4%)是所谓的“红-绿”色盲。观众和读者中总是有色盲。一个有250人的房间里应该有10个以上的色盲(假设50%的男性和50%的女性)。你提交的论文很有可能会交给色盲评审员。假设你的论文将由三名白人男性进行审查(考虑到目前的科学人口,这是不太可能的),他们中至少有一人是色盲的概率高达22%!

彩色通用设计定义的一个实用点是在红-绿覆盖层中使用品红色。品红色是红色和蓝色的相等混合物。难以识别红色成分的色盲者可以很容易地识别蓝色色调。双阳性区域变为白色,这对于色盲来说很容易区分。在ImageJ中,使用Image>Color>Merge Channels. . . 可以很容易地实现这一点,或使用ImageJ宏指令。

彩色合成图像

在合成图像中,颜色是通过通道处理的。与普通RGB图像相比,这种类型的图像的优势在于:

  1. 每个通道都与其他通道分开,可以使用“通道”工具(Image>Color>Channels tool…)打开和关闭。该特征允许例如在对多个通道进行可视化的同时对特定通道进行测量。
  2. 通道可以是8位、16位或32位,并且可以与任何查找表一起显示。
  3. 可以合并或分离3个以上的通道。

10. 选区

选区(感兴趣的区域,ROI)通常使用工具栏工具创建。尽管ImageJ可以同时显示多个ROI,但一次只能激活一个选择。在区域选择的情况下,可以测量(Analyze>Measure…)、绘制(Edit>Draw)、填充(Edit>Fill)或过滤(Process>Filters>submenu)选择。此外,还可以保存多个ROI作为非破坏性覆盖层。

选区最初可以用九种ImageJ默认颜色(红色、绿色、蓝色、品红色、青色、黄色、橙色、黑色和白色)中的一种勾勒出来。创建后,可以使用 Edit>Selection>Properties. . . 对选择进行轮廓绘制或使用任何其他颜色绘制。选区颜色可以在Edit>Options>Colors. . .中更改,通过双击“点工具”,或使用热键

10.1 操作选区

在定义或绘制选区时有用的大多数命令都可以在Edit>Selection>submenu中使用,并在ROI操作中进行汇总。下面列出了涉及选区的最常见操作:

  • Adjusting(调整):可以使用笔刷选择工具调整区域选择。此外,使用“多边形选择工具”和“分段线选择工具”创建的选择的顶点可以通过Alt/Shift单击进行调整。
  • Deleting(删除):选择任何选区工具并在选区之外单击,或使用Edit>Selection>Select None
  • Managing(编辑):通过激活目标窗口并运行Edit>Selection>Restore Selection,可以将选区从一个图像窗口转移到另一个图像窗口。或者,通过nalyze>Tools>Synchronize Windows在多个图像之间创建选区。多项选择可以存储为套印格式或ROI Manager列表(Analyze>Tools>ROI Manager. . .)。
  • Moving(移动):只要光标在选区范围内并且已更改为鼠标箭头,就可以通过单击和拖动来移动选区。状态栏显示正在移动的选区的左上角坐标(或非矩形选择的边界矩形)。要移动选区内容,而不是选区,请单击Edit<Copy、Edit<Paste,然后在选区内容内单击并拖动。
  • Nudging(微调):可以使用箭头键在任何方向上一次“微调”一个像素。请注意,在没有选区的情况下,上下键可放大和缩小图像。
  • Resizing(变换):笔刷选择工具可用于对ROI轮廓进行精细调整。通过在使用箭头键的同时按住Alt键,大多数ROI可以一次调整一个像素的大小。通常,通过拖动其中一个选择处理程序来调整选择的大小。拖动时,按住Ctrl键可围绕其中心调整选区的大小,按住Alt键可强制固定的纵横比,按住Shift键可强制1:1的纵横比。

10.2 组合选区

复合选区是包含一个以上像素簇的非连续ROI和/或包含内部空穴的ROI。复合ROI通常由“笔刷选区工具”(Brush Selection Tool)创建,但也可以使用任何其他使用关键点修改器的选区工具来定义。以下修改器键可用于创建组合选区:

  • 在按Shift键的同时在当前选区范围之外绘制将创建新选区。要添加非正方形矩形或椭圆,必须在添加所选内容后释放Shift键
  • 在按下Alt键的同时在当前选区内绘制会创建一个孔,从ROI中删除内容

请注意,某些操作可能无法在复杂的ROI上正确执行。在这些情况下,使用Edit>Selection>Enlarge. . .将复合ROI转换为多边形可能很有用。

10.3 具有亚像素坐标的选区

在ImageJ 1.46,可以以亚像素精度定义选区,超出图像的标称像素分辨率:浮点选区。如果Edit>Options>Profile Plot Options中的“亚像素分辨率”复选框处于激活状态,则会使用浮点坐标创建线条选区。可以使用Edit>Selection>Interpolate命令对预先存在的选区的亚像素坐标进行插值。插值点在放大1200%或更大的图像上创建的小选区上很容易被注意到。

插值选区

以(左)或不以(中)亚像素精度绘制的ROI。对于线条选区(请参见线条选区工具),可以通过激活亚像素分辨率复选框,在Edit>Options>Profile Plot Options 中启用此选项。可以使用Edit>Selection>Interpolate对区域选择的像素坐标进行插值。

11. 套印

套印是在图像叠加上“覆盖”像素数据的非结构选区,是ImageJ中无损图像处理的核心。在某种程度上,您可以将图像覆盖视为一个不可见的ROI管理器,在其中添加选区,从而使ROI处于“保留”状态。ImageJ2中对多个不同选区的概念进行了显著改进,因此如果多个ROI在您的工作流程中很重要,我们敦促您下载IJ2。

重要的是,图层选区是由数学定义的路径组成的矢量图形(而不是由像素定义对象的光栅图形),并且不受缩放的影响,即不变得像素化。大多数与涂层相关的命令都列在Image>Overlay和ROI管理器窗口(Analyze>Tools>ROI Manager)中。涂层选区的外观可以使用Image>Overlay>Overlay Options/Labels进行调整。

涂层保存在tif图像的标题中,使用ImageJ的默认文件格式TIFF时不需要外部保存。涂层的主要优点总结如下:

  • 选区保存——在ImageJ中,一次只可有一个选区。但是,可以使用Image>Overlay>Add Selection将选择添加到图像叠加。添加到图像叠加后,ROI可以通过Alt点击、Control点击或长按(1/4秒或更长时间)重新激活。按下Backspace键可以删除激活的ROI。也可以使用Image>Overlay>From ROI Manager/To ROI命令批量添加和恢复选区。
  • 无损注释——套印格式是在ImageJ中注释图像的最佳方式。作为矢量图形,套印不会改变像素值,即使在高缩放级别下也可以缩放而不损失质量,并且可以在不同的不透明度值下显示。通过按住Shift F(Image>Overlay>Flatten的快捷键),可以创建具有嵌入套印的图像的RGB快照。将图像保存为PNG或JPEG(File>Save As)或打印图像画布(File>Print)时,也会创建覆盖层渲染为像素数据的“展平”图像。
  • 选区图像——选区图像是将图像显示为套印层的ROI。如Edit>Selection>Image to Selection 和Image>Overlay>Add Image中所述,这允许在单个图像画布上混合多个图像。

12. 3D卷积

目前,ImageJ中对3D ROI(包含连续体素簇的选区)的支持有些有限。ImageJ2和几个IJ1插件已经解决了这个限制。下面的列表总结了一些有效处理多维对象的ImageJ插件。请注意,鉴于这些工具的特殊依赖性,将其作为独立的ImageJ插件手动安装是一项具有挑战性的任务,这也是为什么它们都作为Fiji的一部分捆绑在一起的原因。

3D Filters

可以安装专门的3D filters,如Process>Filters>Gaussian Blur 3D,以执行3D操作。

3D Object Counter

3D Object Counter (3D-OC) 对堆栈中的3D对象进行计数和限定,类似于Analyze>Analyze Particles执行的2D分析。

3D Viewer

3D Viewer为ImageJ带来了强大的硬件加速3D可视化功能,扩展了Image>Stacks>3D Project的有限功能。在ImageJ 3D Viewer中,堆栈可以显示为基于纹理的体积渲染、曲面或正体。它是宏可记录的,可以被其他插件用作3D可视化的高级编程库。

Simple Neurite Tracer

Simple Neurite Tracer可实现管状结构的3D半自动分割。

TrakEM2

如前所述,TrakEM2为感兴趣的多维区域提供了强大的工具。

13. 设置和首选项

ImageJ首选项会自动保存在首选项文件IJ_prefs.txt文本文件中。一些宏和插件也会将参数写入该文件。如果使用Edit>Options>Reset擦除IJ_prefs.txt,ImageJ将在下次打开时创建一个新的,将所有参数重置为默认值。有时,覆盖(或恢复)在工作会话期间可能已更改的某些设置可能会很有用。

setOption()宏函数可用于设置此选项和其他几个ImageJ选项。从StartupMacros.txt文件中的“AutoRun”宏调用此函数可确保每次启动ImageJ时都设置首选项。宏“Ensuring Specific Settings at Launch”举例说明了这种方法,确保在启动时强制执行以下设置:

  1. TIFF标记值由ImageJ显示
  2. 双三次插值优于双线性插值
  3. 测量图像名称的名称记录在结果表的第一列中
  4. 测量不限于阈值像素
  5. 处理二进制图像时假设黑色背景上有白色物体
  6. 背景色为黑色,前景色为白色
  7. ImageJ图包含网格线,大小始终为350×200像素
  8. 在最后保存的屏幕位置打开B&C小部件

相关文章:

ImageJ用户手册——第二部分(ImageJ操作)

ImageJ用户手册-第二部分 ImageJ的使用4. 使用键盘快捷键5. 查找命令6. 撤消和重做7. 图像类型和格式原生格式非原生格式 8. 堆栈、虚拟堆栈、超堆栈Stacks&#xff08;堆栈&#xff09;Virtual Stacks&#xff08;虚拟堆栈&#xff09;Hyperstacks&#xff08;超堆栈&#xff…...

Java中Lambda表达式(面向初学者)

目录 一、Lambda表达式是什么&#xff1f;什么场景下使用Lambda&#xff1f; 1.Lambda 表达式是什么 2.函数式接口是什么 第二章、怎么用Lambda 1.必须有一个函数式接口 2.省略规则 3.Lambda经常用来和匿名内部类比较 第三章、具体使用场景举例&#xff08;&#xff09; …...

2023年淮阴工学院五年一贯制专转本数字电子技术考试大纲

2023年淮阴工学院五年一贯制专转本数字电子技术考试大纲 一、考核对象 本课程的考核对象是五年一贯制高职专转本电子科学与技术专业普通在校生考生。 二、考试目的及总体要求 通过本课程的考试&#xff0c;检查学生对掌握数字电路的基础理论知识的掌握程度&#xff0c;是否…...

使用 GO 编写 Web 应用:学习如何使用 GO 语言编写 Web 应用,包括使用 HTTP 路由、模板引擎等。

GO 语言是一个高效、可靠和简洁的编程语言,越来越多的开发者开始选择 GO 语言来编写 Web 应用。本文将介绍如何使用 GO 语言编写 Web 应用,并且将重点关注使用 HTTP 路由和模板引擎。 使用 HTTP 路由 HTTP 路由是 Web 应用中非常重要的一个概念。它可以帮助我们将请求路由到…...

Leetcode-day4【88】【167】【125】【345】

文章目录 88. 合并两个有序数组题目解题思路解题思路【学习】尾插入法 167. 两数之和 II - 输入有序数组题目解题思路 125. 验证回文串题目解题思路 345. 反转字符串中的元音字母题目解题思路 88. 合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums…...

【IoT】如何使用软件加密(文件夹加密工具.exe),并破解工具

目录 第一步&#xff1a;显示隐藏的文件。 第二步&#xff1a;将隐藏文件变成文件夹。 第三步&#xff1a;解密文件。 有时候出差或者有些商务场合&#xff0c;需要对一些敏感文件做一下简单的加密&#xff0c;这样在分享内容的时候&#xff0c;可以起到初步的保护作用。 当…...

Spring Boot——优雅的参数校验

&#x1f388; 概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&#xff0c;或者基础校…...

【c语言】typedef的基本用法 | 定义格式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras

深度学习论文分享&#xff08;二&#xff09;Data-driven Feature Tracking for Event Cameras&#xff08;CVPR2023&#xff09; 前言Abstract1. Introduction2. Related Work3. Method3.1. Feature Network3.2. Frame Attention Module3.3. Supervision 4. Experiments5. Con…...

蛇优化算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 蛇优化算法算法流程图初始化进化操作搜索阶段&#xff08;无食物&#xff09;——全局搜索搜索阶段&#xff08;有食物&#xff09;——局部搜索战斗模式交配模式 备…...

循环神经网络(RNN)简单介绍—包括TF和PyTorch源码,并给出详细注释

文章目录 循环神经网络&#xff08;RNN&#xff09;入门教程1. 循环神经网络的原理2. 循环神经网络的应用3. 使用keras框架实现循环神经网络3.1导入对应的库及加载数据集3.2.数据预处理3.3定义RNN模型3.4训练模型3.5测试模型 4.使用PyTorch框架实现上述功能—注释详细5.结论 循…...

Struts2 快速入门

Struts2 是一个基于 MVC 设计模式的 Java Web 应用程序框架&#xff0c;它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式&#xff0c;通过核心控制器 DispatchServlet 将所有请求进行集中处理&#xff0c;然后将请求分发到指定的 Action 中&#xff…...

关于PullToRefreshView下拉刷新失效问题

一、问题原因 昨天&#xff0c;突然一个问题丢在了我的头上&#xff0c;用户反馈说某某界面下拉刷新不好使啊&#xff0c;怎么回事。二话不说直接运行项目&#xff0c;经过测试&#xff0c;发现果然不好使。一看代码提交日期好家伙2020年&#xff0c;百思不得其解&#xff0c;…...

JAVA开发中的六大原则

JAVA开发中的六大原则&#xff0c;也被称为SOLID原则&#xff0c;是软件开发中常用的一组设计原则。这些原则提供了实现高质量、易于维护和可扩展软件的基本策略。 以下是JAVA开发中的六大原则以及它们的详细说明&#xff1a; 单一职责原则&#xff08;Single Responsibility…...

Matplotlib 安装

Matplotlib 安装 本章节&#xff0c;我们使用 pip 工具来安装 Matplotlib 库&#xff0c;如果还未安装该工具&#xff0c;可以参考python 怎么使用pip进行包管理。 安装 matplotlib 库&#xff1a; pip install matplotlib 安装完成后&#xff0c;我们就可以通过 import 来…...

CF - Li Hua and Pattern

题意&#xff1a;给出了矩阵&#xff0c;里面每个位置分为蓝色或红色&#xff08;数据上用1和0体现了&#xff09;&#xff0c;给出了一个操作次数&#xff0c;每次可以改变一个坐标的颜色&#xff0c;问能否通过操作使得图像旋转180度后不变。 解&#xff1a;很容易想到&…...

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

在今天的 2023 阿里云合作伙伴大会上&#xff0c;阿里云智能云原生应用平台运营&生态业务负责人王荣刚宣布&#xff1a; “阿里云云原生合作伙伴计划”全新升级。他表示&#xff1a; 云原生致力于帮助企业客户最大限度的减轻运维工作&#xff0c;更好的实现敏捷创新&#x…...

OSCP-Escape(gif绕过)

目录 扫描 WEB 扫描 sudo nmap 192.168.233.113 -p- -sS -sVPORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) 8080/tcp open http Apache…...

iMazing2023最新免费版iOS设备管理软件

iMazing是一款功能强大的iOS设备管理软件&#xff0c;它可以帮助用户备份和管理他们的iPhone、iPad或iPod Touch上的数据。除此之外&#xff0c;它还可以将备份数据转移到新的设备中、管理应用程序、导入和导出媒体文件等。本文将详细介绍iMazing的功能和安全性&#xff0c;并教…...

Git上传文件代码到GitHub

删除线上git:删除GitHub仓库里的文件夹_阿巴资源站的博客-CSDN博客 1. 创建空文件夹 2. cd 到本文件夹 3. git init &#xff0c;初始化&#xff0c;在本地创建一个Git仓库 4. 同时按住“ Command Shift . ”三个按键&#xff0c;即可查看当下文件夹中的隐藏文件 5. 克隆…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...