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

T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)

最近需要仿真研究T1结构像+RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。
为了完成验证目标处理,首先需要有数据,然后需要准备对应的处理平台和工具箱,进行一系列。那么开始记录~
前言:
为了基于种子点的功能连接分析,找出与种子点的最相关坐标。如下是严老师的培训文档,正是我所需要的。链接如下:

https://d.rnet.co/Course/V3.0EN/4_R-fMRI_Data_Processing_DPARSFA.pdf
https://d.rnet.co/Course/V3.0EN/4_R-fMRI_Data_Processing_DPARSFA.mp4

在这里插入图片描述
在这里插入图片描述
确实做功能连接是我这次处理的目的,我需要先完成预处理,后才基于种子ROI去做功能连接分析,既可以分析种子ROI和目标脑区的连接情况,也可以分析种子ROI与全脑的功能连接情况。但是可以想象,两个计算量肯定有明显的差异。
万里长征第一步,还是开始尝试吧。
正文:
(1)下载满足要求的开源数据
去OpenNEURO https://openneuro.org/datasets/ds002422/versions/1.1.0
下载数据做仿真验证够够的了,有46个被试,每个被试下面有多个数据记录,完全符合我的需要,有这个做仿真研究真的是太方便了。
(sub-01_T1W.nii就是T1结构像,sub-01_task-rest_bold.nii.gz就是我要的RS-fMRI)
多下载几个数据处理验证没得问题。
在这里插入图片描述

也可以去严老师的网站下载数据,不同类别的data可供下载,可以直接下载Demo Data for DPARSF。
https://rfmri.org/content/demonstrational-data-resting-state-fmri

(2)准备数据处理平台
按照如下准备先按照到位,这些是处理和查看处理过程的利器,作为研究核磁影像的人少不了。
在这里插入图片描述
安装完Matlab以后,除了MRIcron 是独立软件,其他就都是工具箱。工具箱软件需要先下载到本地,后解压缩放到Matlab 安装路径的toolbox 文件夹下,并打开matlab 界面,从设置路径处导入。这里我是遇到了一个问题,到底是 添加文件夹 还是 添加并包含子文件夹
在这里插入图片描述
那么看下面
在这里插入图片描述
澄清一下:如果打算使用DPABI 做预处理,那么这个地方的SPM12 和DPABI的设置路径的方式一定要参考严老师的官网
使用DPABI 一定要去看:http://www.rfmri.org/DPABIErrorHandling
在这里插入图片描述

REST 是DPABI 的一个子模块。
(3)实施处理
都说DPABI 是“傻瓜版”的SPM,但是这个用起来还是要花时间去仔细啄米…
先说一下数据摆放路径,非常容易出错,可以先去阅读网站 http://www.rfmri.org/DPABIErrorHandling
如果用DPABI 来做预处理,那数据摆放路径就是讲究,路径关系如果层级发生错误,就会报各种奇怪的错误。
首先新建一个路径文件夹,如202504_MRI是我的文件夹,文件夹下面需要新建两个子文件夹:
如果原始数据都是Dicom 格式,新建T1Raw 和FunRaw 文件夹,并将各被试的T1像拷贝到T1Raw文件夹,RS-fMRI 像拷到FunRaw文件夹。
如果T1是nii格式,RS-fMRI 是.nii.gz 格式就新建T1Img 和FunImg文件夹,并将3个被试的T1像拷贝到T1Img文件夹,RS-fMRI 像拷到FunImg文件夹,我这次的数据就是这一种。
另外,一定要注意,如果使用DPABI进行预处理,这些原始数据的父文件夹是T1Img 和FunImg文件夹,或T1Raw 和FunRaw 文件夹,我曾经将sub当父文件夹出现了难以接受的错误。正确的数据层级关系如下:
当原始数据是.nii+.nii.gz 格式时:
在这里插入图片描述
当原始数据是Dicom格式时:
在这里插入图片描述
这里插一个处理步骤,因为我看有人讲一个4D.nii.gz 容易报错,需要转化成多个3D ni。
我的fMRI 影像是一个文件4D.nii.gz 文件,然后我通过手动解压以后变成了只变成了一个nii。如果想变成多个3D nii,还是需要工具或者代码实现。下面提供一段可靠的代码4D.nii.gz 转成多个3D nii的matlab:

clc;clear;
fileName = 'sub-03_task-rest_bold.nii.gz';%需解压的fMRI 的原始4D 文件压缩格式文件名,
filepath = 'E:/202504_MRI/';%fMRI 的原始4D 文件路径
gz_file = fullfile(filepath,fileName);tempniiPath =  'E:/202504_MRI/temp/';%初解压缩的nii文件存储路径,临时的,每完成一个数据的解压以后都要建立一个temp
gunzip(gz_file,tempniiPath);%手动初解压缩fileList = dir(fullfile(tempniiPath,'*.nii*'));
outFile = fileList.name;%fMRI 手动初步解压缩后的文件名
inputFilename = fullfile(tempniiPath ,outFile);%解压后的完整文件名outDir = 'E:/202504_MRI/FunImg/sub3/';%解压成3D nii 的存储路径spm('Defaults','fMRI');
spm_jobman('initcfg');
% 创建 batch job
matlabbatch{1}.spm.util.split.vol = {inputFilename}; 
matlabbatch{1}.spm.util.split.outdir = {outDir}; % 输出目录
matlabbatch{1}.spm.util.split.prefix = 'vol_'; % 输出文件名前缀
spm_jobman('run',matlabbatch);

(2)预处理步骤虽多,但是处理的过程有讲究
在这里插入图片描述
在matlab 窗口输入 DPARSFA(是DPARSF advance 版本,支持T1+fMRI 联合分析)后即可进入DPARSFA 交互界面
①模版参数
选中Blank,其实就是空白模版,其他的都有很多默认的参数和处理步骤被选中是有特定的处理,作为新手来说,先从0开始进入吧,选中blank就相当于空白开始,灭有任何的默认选中处理步骤,需要自己去尝试设定探索;

这个地方参数模版,是一些供选择的处理方案,感觉是处理步骤流程模版化,选择不同的模版会在界面上出现对应选中处理步骤,估计也会存在一些差异性的处理流程步骤,如果很清楚自己的处理目标和步骤,就可以直接选中适合的一个,后面只要把数据扫描关联的参数填下就可以run了。
但是这个地方要结合自己的处理目标去分析。
如果只需要做预处理,那只能选择blank,其他的选项中不管是在MNI空间还是original空间 都是默认选中了预处理+后处理。
在这里插入图片描述
②工作路径
这个工作路径需要选中建立的文件夹,是一个总的大路径,不要出现中文字符;

③扫描参数
Time Points:采集的时间点数,应该是个整数,预估100~300,具体需要查看数据
TR:是重复时间,这个也是扫描参数,一般这两个参数需要基于fMRI 数据去查看,如果已知就直接填写
这两个参数必须要准确,如果不知道,可以通过软件查看,实在不行就空着,软件会在处理的过程中读取到。

建议在matlab 中通过命令得到点数,这个是.nii.gz 的获取方式

nii=niftiinfo("my-rs-fMRI.nii.gz");
TimePoints = nii.ImageSize(4);
disp(['时间点总数:'num2str(TimePoints)]);

dicom也有其获取参数的方式,比如先转成nii查看,或者用MRIcron/MRIcronGL/3D slicer/FSL /等软件打开查看。
TR(s)这个参数重要,就是重复时间,这个需要基于扫描json文件去查看,也可以用别的软件工具去查看。

④就是将dicom转成nifti格式,由于我的输入就不是dicom,这一步完全不用选。

在这里插入图片描述
上面没有标出来,Apply Mats,如果输入是dicom 格式数据,那就选中吧,如果是我这样的nii格式就不选
⑤ 去除因设备开机不稳的时间点,一般会去掉开始的5~10个时间点的数据。这里,我没有去,因为我下载的数据中已经在json中说了手动去掉了3个时间点,我就不再去了,直接填了0,也可以不选中,省的有效数据变短。

⑥时间层矫正,因为功能像是隔层扫描,做这个处理就是要重新把时间对齐,必须要选中;

⑦功能像的扫描层数,就是ImageSize(3),我下载的数据是64X64X36X200,我这里就是36层
后面的Slice Order:扫描次序,我填的[2:2:36,1:2:35](我看了我下载的json文件,我的是隔层扫描,先扫偶数层,后扫奇数层)

⑧参考层,一般用正中间的扫描时刻对应的层作为参考层,也有TR/2最接近的时刻处的层作为参考
我的扫描时间序列
“SliceTiming”: [1.5375,0,1.6225,0.085,1.7075,0.1725,1.7925,0.2575,1.8775,0.3425,1.9625,0.4275,2.05,0.5125,2.135,0.5975,2.22,0.6825,2.305,0.7675, 2.39,0.855,2.475,0.94,2.56,1.025,2.645,1.11,2.7325,1.195,2.8175,1.28,2.9025,1.365,2.9875,1.4525 ],
可以看出0时刻在第2帧,而且偶数层比奇数层的时刻小,说明先偶数后奇数。
⑨ 表明数据开始处理的路径这样可以附加到工作路径文件夹。
⑩ 运行时间层矫正

看看做完时间层矫正后的结果,可以看到matlab 窗口中输出说明我的参数设置正确了,正确完整了时间层矫正,而且还是3个sub都处理了
在这里插入图片描述
在这里插入图片描述
头动矫正
在这里插入图片描述

Realign:必须要选中
Voxel-Specific Head Motion :因为我计算的目标是坐标靶点,对空间定位和连接精度非常敏感,我这里也需要选中,相当于是需要做一个更高级一些些的头动矫正。普通的核磁处理可以不选中。有人说这一步时间长作用不大,我还是先处理看看。
根据上面,我处理的输入是要基于时间层矫正的结果,所以我界面的这个输入文件夹是时间层矫正的输出在这里插入图片描述
处理完以后输出又多了更多文件夹
在这里插入图片描述
影像重定向及分割配准
在这里插入图片描述
(11 Reorient Fun : 处理fMRI,就是是的头的朝向变正(因为很多情况下存在数据歪斜)
手动调整功能像歪斜,此处需要手动确立AC点。

(12 AutoMask :处理fMRI 自动掩膜生成,就是基于T1结构像,去掉不是大脑区域的部分,生产掩膜图像;
这个步骤其实是对头动矫正以后的fMRI 影像的平均图像进行处理的,可以得到平均图像去除颅骨以后模版mask。
(13 Crop T1: 就是去掉T1中的无关区域,比如脖子,背景、空气、头皮,从而减少图像中的无效空白部分;
(14 Reorient T1: 处理结构像数据,结构像图像重新定向,矫正朝向和歪斜
需要在弹窗中手动标记AC 点。
(15 Bet :T1 结构像处理,剔除颅骨,提取大脑区域
(16 T1 coreg to Fun: 对齐结构像和功能像,用coregistration 将fMRI 与T1 进行对齐,其实就是将T1结构像配准到fMRI 空间,从而实现两者空间对齐。
这个步骤完成了不少内容,首先讲去掉颅骨的的T1,批准到了去掉头皮的fMRI 上,并得到了中间计算参数,可以讲带颅骨的T1配准大片fMRI 空间。
(17 segment :分割,将T1结构像分割成灰质、白质、脑脊液,segment 是传统的分割方法,New segment+DARTEL 是一种新的分割方法(如果T1结构像的质量很好建议选择这个方法)
这个处理步骤,其实是先将已配准到fMRI 平均影像的T1 又配准到标准空间,这样得到了中间形变参数。同时对标准空间下的T1进行分割处理,分割出脑灰质、脑白质、脑脊液等掩膜图像。
(18 分割处理的模版选择,East Asian 是东亚模版比较适合处理东方人的数据(基于东亚数据得到),European是欧美数据模版(基于欧美数据得到,其实就是MNI)
我这个数据下载的,查阅以后还是先选择欧美模版。
在这里插入图片描述
注意11和14都是需要手动调整数据朝向和歪斜的,新手还无从下手,暂时先不选。另外如果数据本来就很正,AC-PC都有差不多水平了,而且也没有左右歪斜就要不选。如果要矫正就要研究其选中后的弹窗页面的调整,等我学会了,我再来补充一下。
11和14选中以后都需要手动去差点参考点,会弹窗让手动操作选择。
先看看AC-PC:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面图示中给出了AC和PC应该落点的位置,可见AC和PC在上下方向几乎是等高的。
在弹出的页面,手动标记参考时,需要讲AC作为参考点,先理解了AC和PC的结构特点就好落点了。
这一步的输出:
在这里插入图片描述
下面用软件逐一打开查阅
T1ImgBet 就是T1结构像做了颅骨剔除以后的大脑区域的图像。
如下图可以看出sub1剔除的的比较差,在小脑下还包含了一些其他的组织,sub2有少许杂质组织,sub3剔除的最好,如果演示我肯定用sub3被试的处理结果去演示。
在这里插入图片描述
T1ImgCoreg:
这个是T1配准到fMRI 以后的结果,我也打开看看影像的变化
很遗憾,这个文件夹中的数据跟T1Img 中的数据大小和空间方位还有可视化一模一样,说明T1 Coreg to Fun 是不成功了,为啥不成功,我要重新跟踪步骤检查。
这一步要重新到退处理检查了,这一次不能跳过任何的弹窗和提示。
我查阅资料科普一番以后,发现T1 Coreg to Fun,就是T1结构像配准到去头动后的fMRI 的平均图像中,因为我的fMRI 图像是没有做颅骨剥离的,所以此处T 1 Coreg to Fun 输出的应该还是带颅骨的图。跟我原来的理解有出入,先记录一下。
T1ImgNewSegment 文件家中放的是分割的脑灰质、白质、脑脊液文件。
在这里插入图片描述
再看看预处理的后半部分,
后面再接着写吧。。。
这部分主要是4个功能:
①用来处理完成头动矫正的fMRI 影像的,就是基于头动还有基线去做回归,去噪
②是标准化
也是用来处理fMRI影像的,在T1配准到fMRI 空间后,其具备了与fMRI 影像同坐标系空间特点,后 在segment 时其又配准到了标准空间,其转换到标准空间的转换参数也代表了fMRI 到标准空间的参数,基于此对fMRI 影像完成标准化。与此同时还做了基于体素大小的重采样;
③空间平滑处理,还是对fMRI 影像处理,FWHM是高斯窗。如果要计算局部一致性REHo,则平滑处理应该放在计算REHO之后。
④带通滤波,两个是一个意思,只是因为滤波既可以先做,也可以后做。因为如果要计算ALFF 和fALFF 就要后做,选后面那个。

因为我只在意最后用来分析计算功能连接,没有计算ALFF/fALFF和分析局部一致性,预处理部分我都是严格按照上面的步骤来的。
感觉计算这两个参数的话,滤波和平滑就要选择后面的了,不能早早选中。

理解了所有的预处理以后确实没怎么报错,只是这个单纯的处理框架看起来很离散,每个处理步骤都有输入和输出还有做的目的都需要分析。
在这里插入图片描述
分析三天也才get 到一条初步的处理流程图吧,一直都在边处理边理顺边验证才得到的一张图,也许这条路到最后发现有冗余,但是真的是要吃透才能简化和完善。可以说预处理和准备分析工作占据了80%,后面的功能连接好像没有那么多步骤。以后在具体实施中去应该吧。功能连接分析的路估计就是这么走了。真的挺长的,后面还要好好消化吸收。
在这里插入图片描述

相关文章:

T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)

最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理,首先需要有数据,然后需要准备对应的处理平台和工具箱,进行一系列。那么开始记录~ 前言: 为了基于种子点的功能连…...

【前端基础】--- HTML

个人主页  :  9ilk    专栏  :  前端基础 文章目录 🏠 初识HTML🏠 HTML结构认识HTML标签HTML文件基本结构标签层次结构快速生成代码框架 🏠 HTML常见标签注释标签标题标签 h1-h6段落标签 p换行标签 br格式化标签图片标签 img超链接标签…...

黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课

课程大小:60.2G 课程下载:https://download.csdn.net/download/m0_66047725/90615581 更多资源下载:关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …...

C#插件与可扩展性

外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…...

CVPR‘25 | 高文字渲染精度的商品图文海报生成

本文分享阿里妈妈智能创作与AI应用团队在图文广告创意方向上提出的商品图文海报生成模型,通过构建字符级视觉表征作为控制信号,可以实现精准的图上中文逐像素生成。基于该项工作总结的论文已被 CVPR 2025录用,并在阿里妈妈业务场景落地&#…...

Golang|抽奖相关

文章目录 抽奖核心算法生成抽奖大转盘抽奖接口实现 抽奖核心算法 我们可以根据 单商品库存量/总商品库存量 得到每个商品被抽中的概率,可以想象这样一条 0-1 的数轴,数轴上的每一段相当于一种商品,概率之和为1。 抽奖时,我们会生…...

RT-Thread开发文档合集

瑞萨VisionBoard开发实践指南 RT-Thread 文档中心 RT-Thread-【RA8D1-Vision Board】 RA8D1 Vision Board上的USB实践RT-Thread问答社区 - RT-Thread 【开发板】环境篇:05烧录工具介绍_哔哩哔哩_bilibili 【RA8D1-Vision Board】基于OpenMV 实现图像分类_哔哩哔哩_…...

rulego-server是一个开源程序,是一个轻量级、无依赖性的工作流自动化平台。支持 iPaaS、流式计算和 AI 能力。

一、软件介绍 文末提供程序和源码下载学习 RuleGo-Server 是一个基于 RuleGo 构建的轻量级、高性能、模块化和集成友好的自动化工作流程平台。可用于自动化编排、iPaaS(集成平台即服务)、API 编排、应用编排、AI 编排、数据处理、IoT 规则引擎、AI 助手…...

鸿蒙系统开发状态更新字段区别对比

在鸿蒙系统开发中,状态管理是构建响应式UI的核心机制,主要通过装饰器(Decorators)实现字段的状态观测与更新。根据鸿蒙的版本(V1稳定版和V2试用版),支持的装饰器及其特性有所不同。以下是主要状…...

抽象的https原理简介

前言 小明和小美是一对好朋友,他们分隔两地,平时经常写信沟通,但是偶然被小明发现他回给小美的信好像被人拆开看过,甚至偷偷被篡改过。 对称加密算法 开头的通信过程比较像HTTP服务器与客户端的通信过程,全明文传输…...

HTML理论题

1.什么是HTML? 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 2.DOCTYPE 的作用是什么?标准与兼容模式(混杂模式)各有什么区别? DOCTYPE 的作用是告知浏览器的解析器用什么文档标准解析这个文档。 标准模式:用于…...

nginx-基础知识(二)

目录 虚拟主机 虚拟主机的功能 虚拟主机的划分方式 基于IP地址进行划分 基于域名进行划分 正向/反向代理 正向代理 反向代理 正向代理和反向代理的区别 负载均衡 负载均衡的类型 负载均衡的作用 nginx并发量比较高的原因 负载均衡的算法 会话保持 虚拟主机 虚拟…...

Ubuntu上安装Mysql

步骤 1:安装 MySQL Server sudo apt update sudo apt install mysql-server -y这将安装最新版本的 MySQL 8.0 以及所有依赖组件。 步骤 2:检查安装是否成功 mysql --version sudo systemctl status mysql如果状态是 active (running),说明成…...

idea maven 命令后控制台乱码

首先在idea中查看maven的编码方式 执行mvn -v命令 查看编码语言是GBK C:\Users\13488>mvn -v Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\maven\apache-maven-3.6.3\bin\.. Java version: 1.8.0_202, vendor: Oracle Corporation, runt…...

C# dll 打包进exe

Framework4.x推荐使用 Costura.Fody 1. 安装 NuGet 包 Install-Package Costura.Fody工程自动生成packages文件夹,300M左右。生成FodyWeavers.xml、FodyWeavers.xsd文件。 2. 自动嵌入 编译后,所有依赖的 DLL 会被自动嵌入到 EXE 中。 运行时自动解压…...

【数据融合实战手册·实战篇】二维赋能三维的5种高阶玩法:手把手教你用Mapmost打造智慧城市标杆案例

在当今数字化时代,二三维数据融合技术的重要性不言而喻。二三维数据融合通过整合二维数据的结构化优势与三维数据的直观性,打破了传统数据在表达和分析上的局限,为各行业提供了更全面、精准的数据分析手段。从智慧城市建设到工业智能制造&…...

ValueError: model.embed_tokens.weight doesn‘t have any device set

ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …...

解决:QTcpSocket: No such file or directory

项目场景: 使用QTcpSocket进行网络编程: 调用connectToHost连接服务器,调用waitForConnected判断是否连接成功,连接信号readyRead槽函数,异步读取数据,调用waitForReadyRead,阻塞读取数据。 问题描述 找不…...

六、LangChain Agent 最佳实践

1. 架构设计与组件选择 (1) 核心组件分层设计 Model(LLM驱动层) 生产环境推荐:使用 gpt-4-1106-preview 或 Anthropic Claude 3 等高性能模型,结合 model.with_fallbacks() 实现故障转移(如备用模型或本地模型)。本地部署:选择 Llama3-70B 等开源模型,搭配 Docker 或 …...

uni-app 安卓10以上上传原图解决方案

在Android 10及以上版本中,由于系统对文件访问的限制,使用chooseImage并勾选原图上传后,返回的是图片的外部存储路径,如:file:///storage/emulated/0/DCIM/Camera/。这种外部存储路径,无法直接转换成所需要…...

Python爬虫实战: 有道翻译

一、引言 在全球化进程不断加速的当下,语言交流的需求日益增长,翻译服务的重要性愈发凸显。有道翻译作为一款备受欢迎的在线翻译工具,其蕴含的数据具有极高的价值,可广泛应用于自然语言处理研究、翻译教学以及语言学习软件的开发等领域。 然而,为保护自身数据资源和网络安…...

CSS 文件格式

A QFrame#andrFrm[status"android_en"] A:表示父类或顶层窗口的类型。如果 A 是一个自定义的类名,确保该类已经正确注册到 Qt 系统中。QFrame:表示具体的控件类型。#andrFrm:表示控件的对象名称(通过 setOb…...

支付宝商家转账到账户余额,支持多商户管理

大家好,我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能,支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号,即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…...

3.Chromium指纹浏览器开发教程之chromium119版本源码拉取

获取Chromium最新版源码 Git是一个分布式版本控制系统,用于管理代码的版本和协作开发,它是目前最流行和广泛使用的版本控制系统之一。在Chromium项目中,通常使用gclient来获取Chromium的源代码,并使用Git来对代码进行版本控制和管…...

使用Jasypt对配置文件内容加密

使用Jasypt 配置文件内容加密 一、背景 在软件开发过程中,配置文件扮演着至关重要的角色,它存储着应用程序运行所需的各种参数和设置,例如数据库连接信息、API 密钥、第三方服务的认证信息等。然而,这些配置文件中的信息往往包含…...

《Spring Boot 测试框架指南:@SpringBootTest与Mockito的最佳实践》

大家好呀!👋 今天我要和大家聊聊Spring Boot测试的那些事儿。作为一名Java开发者,写代码很重要,但写测试同样重要!💯 想象一下,你建了一座漂亮的房子🏠,但如果没有质量检…...

【计算机视觉】OpenCV项目实战- Artificial-Eyeliner 人脸眼线检测

Artificial-Eyeliner 人脸眼线检测 项目介绍运行方式运行步骤常见问题及解决方法1. dlib 安装失败其他注意事项 2. 缺少 make / gcc3. **依赖库安装问题**:4. *人脸关键点检测失败:5. 眼线效果不理想:6. 实时处理延迟:7. 保存文件…...

工作总结(十二)——迁移svn单项目到gitlab上,保留历史提交记录

文章目录 前言一、目的二、操作步骤1.创建项目库2.复制历史提交者账号3.复制待迁移项目以及历史记录4.push到gitlab远程仓库 总结 前言 本系列文章主要记录工作中一些需要记录的内容 一、目的 因为一些原因,我需要将svn库上的某个项目迁移到公司的gitlab库管理平台…...

Flash存储器(二):SPI NAND Flash与SPI NOR Flash

目录 一.存储架构 二.接口与封装 三.特性对比 四.典型应用场景 4.1 SPI NOR Flash 4.2 SPI NAND Flash 五.技术演进与市场趋势 六.选择建议 6.1 选择SPI NOR的场景 6.2 选择SPI NAND的场景 SPI NAND Flash和SPI NOR Flash是嵌入式设备中常用的存储器。下面通过全面对…...

Git Flow

Git Flow深度解析:企业级分支管理实战指南 前言 在持续交付时代,分支策略决定团队协作效率。Git Flow作为经典的分支管理模型,被Apache、Spring等知名项目采用。2023年JetBrains开发者调查报告显示,Git Flow仍是中大型项目最常用…...