news 2026/10/5 8:22:23

fNIRS公开数据集全攻略:从下载到预处理的实操指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
fNIRS公开数据集全攻略:从下载到预处理的实操指南

做脑功能成像研究,特别是刚上手 fNIRS 的朋友,第一道坎往往不是数据分析,而是“手里没数据”。实验室设备排期紧张、预算只够买耗材、或者单纯想先跑通一套分析流程验证想法——这些情况我都经历过。那阵子我把能搜到的 fNIRS 公开数据集几乎翻了个底朝天,从平台、格式到预处理工具,踩了不少坑,也攒下了一份还算靠谱的清单。这篇文章就是把我的整理思路和结果完整梳理出来,包含我实际用过的数据集、下载途径、数据格式说明,以及一套从下载到预处理的实操流程。适合刚开始接触 fNIRS 的研究生、想复现论文实验的工程师,还有需要为课程作业或竞赛准备数据集的同学。

1. 为什么值得花时间整理 fNIRS 公开数据集

1.1 新手场景:没设备也能跑通分析流程

很多人觉得做 fNIRS 研究必须有硬件,其实不完全是。fNIRS 公开数据集最直接的价值,就是让你在没有设备的情况下,先把“采集—预处理—统计”这条链路跑通。我自己最早就是用一套公开的运动任务数据集,在 Homer 里反复调带通滤波参数,才真正理解血氧信号里的低频漂移是什么样子。没有数据,你连“信号长什么样”都不知道,更别说后面处理了。

对新手来说,公开数据另一层意义在于可以放心折腾。自己的实验数据一旦采集完,很多人会小心翼翼不敢乱动,生怕把数据弄坏。公开数据集就没有这种心理负担,你可以大胆尝试不同的预处理流程、不同的 GLM 设定,甚至故意跑一些错误参数看看会出什么问题。这种“破坏性学习”对建立工程直觉特别重要。

1.2 科研场景:跨数据集验证算法、复现研究

做算法开发和脑机接口研究的同行,对公开数据集的需求更刚硬。你在自己实验室数据上调出来的分类准确率,如果换一套公开数据就崩了,那说明你的方法泛化性存疑。fNIRS 领域这几年涌现了不少公开的脑机接口数据集,运动想象、精神负荷、情绪识别等任务都有覆盖,跨数据集验证已经成为论文审稿人越来越看重的环节。

另外,很多发表在《Scientific Data》《Scientific Reports》等期刊上的论文,会要求作者把原始数据一同公开。这类数据集经过同行评议和标准化整理,质量相对可靠,还附带详细的采集说明。想复现一篇文献的实验时,优先找它的公开数据,比自己从零搭实验快得多。

1.3 fNIRS 数据与 fMRI、EEG 数据的关键差异

整理过脑影像数据的人都知道,fMRI 公开数据集非常多,像 HCP、ABCD 都是千级被试量。fNIRS 公开数据集规模通常小得多,几十人已经算大样本了,这一方面是因为设备通道数有限、成本不低,另一方面是缺乏像 BIDS 那样统一普及的标准规范,导致数据共享门槛更高。

和 EEG 相比,fNIRS 数据又有自己的特殊性。EEG 的采样率动辄上千赫兹,fNIRS 通常只有 10~50 Hz;EEG 信号是电压时间序列,fNIRS 测量的是氧合血红蛋白和脱氧血红蛋白浓度变化,本质上是两种光学信号。这意味着处理 EEG 的思路不能直接搬到 fNIRS 上,滤波参数、伪迹识别标准都要重新适配。整理公开数据集时,一定要看清数据采集设备和采样参数,别拿到数据就套用 EEG 的处理模板。

下表是我整理时常用的对比维度,建议大家拿到任何数据集先按这个口径列一张表,后面用起来会省很多事。

对比维度典型范围 / 说明
采集设备NIRx、Hitachi、Artinis、Shimadzu、LIGHTNIRS 等
采样率通常 1.7~50 Hz,fNIRS 信号本身是慢信号
通道数量4~上百通道,取决于光极布局
任务类型静息态、运动想象、工作记忆、情绪刺激、自然行走等
是否含结构像多数无 MRI 结构像,仅有光极位置或前额布局图
数据格式SNIRF、.nirs、.mat、.txt、光强/浓度 HDR 多态
头动容忍度较 fMRI 高,但大幅度头动仍会造成运动伪迹

2. 主流 fNIRS 公开数据集逐个拆解

2.1 OpenfNIRS:综合类开源数据仓库

OpenfNIRS 是目前我推荐新手最先看的地方。它是一个由学术界发起的开放数据平台,专门收集和标准化 fNIRS 数据,网址在 openfnirs.org,不需要申请审批,注册后可以比较方便地下载。里面包含多个子数据集,覆盖运动执行与运动想象、工作记忆、精神负荷、VR 交互等常见范式,文件大多转成了标准的 SNIRF 格式,非常适合用来练习处理流程。

这个平台的好处是数据来源清晰,每个数据集都有对应的论文和采集协议说明,你能查到实验范式、光极排布、任务时长这些关键信息。缺点是数据集之间的质量参差不齐,有的数据信号质量很好,有的则明显存在通道脱落问题——不过从练习角度来说,这反而是好事,能提前见识真实数据的“脏”。

如果你手头有处理 Homer2 或 Homer3 的经验,会发现 OpenfNIRS 的数据很容易上手,因为 SNIRF 可以直接被 Homer3 读取,不需要手动解析。我经常拿这里的数据做新工具的冒烟测试,能省掉造假的模拟数据,直接用真实采集结果验证。

2.2 设备厂商提供的示例数据:NIRx、日立等

很多朋友忽略了一条渠道:设备厂商官网。NIRx 作为市场占有率很高的明星厂商,其官网提供了若干示例数据,包含视觉刺激、运动任务等经典范式,还附带 NIRStar 采集软件生成的完整文件包。用这些数据的好处是,它们直接对应厂商软件的输出格式,所以你完全可以用 NIRStar 打开,查看原始光强、信号质量指标,再导出到 Homer 做进一步处理,几乎不会遇到格式兼容问题。

日立的 ETG-4000 等设备也有类似的示例数据流落在各大学实验室页面,不过查找起来不如 NIRx 方便。Artinis 和 Shimadzu 则在官方文档中提供了示例数据下载链接,通常跟在软件说明书后面。厂商数据本质上属于“教学资料”,任务设计比较简单,被试量也少,但拿来做工具链验证和格式学习非常合适。

2.3 Scientific Data 等期刊开放的论文配套数据

这是质量最高的一类来源,也是最容易被忽视的。很多高水平期刊要求作者在论文发表时把原始数据放在公开仓库,比如 Figshare、Dryad、Zenodo 或机构自己的数据空间。以 fNIRS 为例,我见过涵盖步态行走、静息态、语言任务、脑机接口控制等多个方向的数据集,数据质量普遍高于社区自发分享的内容,因为同行评议环节已经帮忙把关。

找这类数据的方法很直接:去 Google Scholar 或 PubMed 搜 fNIRS 相关论文,重点看《Scientific Data》期刊的文章。这个刊物的核心就是数据论文,每一篇都在描述一个数据集,而且通常有专门的数据可用说明段落。搜到感兴趣的论文后,去正文里找“Data Availability”一节,就能拿到存储库和 DOI。我习惯直接在标题里加“dataset”关键词搜索,效率比逐篇翻正文高得多。

2.4 在线数据库与检索技巧:NITRC、Figshare、GitHub

通用的学术数据平台也值得长期关注。NITRC 是神经影像领域的老牌资源中心,虽然主要偏 MRI,但上面有一定数量的 fNIRS 数据条目,可以通过关键词过滤查找。Figshare 和 Zenodo 上搜索 “fNIRS dataset” 通常能翻到很多零散但可用的数据集,有的来自实验室直接分享,有的是论文补充材料。

GitHub 是另一个容易被忽视的宝库。搜索 fNIRS 分类或脑机接口仓库,经常能在仓库根目录的data文件夹里找到带原始记录的数据文件。比如有些开源工具包的示例数据就来自真实公开实验,MNE-NIRS 的文档数据就是通过这种方式公开的。GitHub 数据的优点是有版本控制,能追到每次更新记录,缺点是说明文档可能不全,需要自己摸索。

我个人常用的检索命令其实很简单,就是在搜索框里敲fNIRS dataset source或fNIRS raw data download,然后限定时间范围和仓库类型。下面列一下我常用的检索关键词和平台,方便大家直接照抄:

平台推荐关键词备注
GooglefNIRS open dataset, fNIRS Scientific Data优先找学术数据论文
PubMedfNIRS dataset data descriptor搜数据论文最有效
NITRCnear-infrared spectroscopy老牌影像资源中心
Figshare / ZenodofNIRS motor imagery, fNIRS resting state支持版本和 DOI
GitHubfNIRS BCI dataset, Homer3 example data找开源配套数据

3. 数据格式与预处理工具链

3.1 从 SNIRF 到 .nirs:常见格式扫盲

整理 fNIRS 数据,最容易被搞糊涂的就是格式。不同厂商、不同处理软件各自为政,带来一堆扩展名。先记住最核心的几类,其他都是变体。

SNIRF 是老牌的开放标准格式,扩展名是.snirf,本质上是 HDF5 结构,能同时存储光强数据、探头位置、刺激事件等元信息。这个格式的设计初衷就是把不同厂商的数据统一成一个标准,让 Homer3、MNE-NIRS 等现代工具能够直接读取。可以说,凡是转成 SNIRF 格式的数据,跨软件操作的兼容性都会好很多。

老式格式里最常见的是.nirs,这是 Homer2 使用的格式,本质上也是一个包含多个字段的 MATLAB 二进制文件,记录了数据矩阵、采样率、光极位置、事件标记等信息。如果你看到.txt或.csv版数据,那是导出的光强或浓度值,不含元信息,使用时要格外小心,务必单独找到对应的实验说明文件。

还有一部分数据集以 MATLAB 的.mat格式存储,因为很多研究者习惯直接用 MATLAB 处理。打开.mat文件看看变量名,一般能看到d表示原始光强数据,s表示刺激事件向量,t表示时间轴,ml表示测量列表,这些命名规则和 Homer2 保持了一致,即使没有说明文档也能猜个大概。

3.2 Homer、MNE-NIRS、NIRSLab 怎么选

工具选型上,fNIRS 领域已经形成了比较清晰的格局。Homer2 和 Homer3 是 MATLAB 生态里最主流的处理包,几乎所有做 fNIRS 数据分析的人都绕不开它。Homer3 是 Homer2 的升级版,支持 SNIRF 格式,界面逻辑更像一个流程化的批处理框架。如果你熟悉 MATLAB,直接选 Homer3 基本不会有坑。

如果你是 Python 用户,MNE-NIRS 是不二之选。它是 MNE-Python 生态的一部分,API 设计得比 Homer 更现代,文档也写得很清楚。MNE-NIRS 最大的优势是能和 MNE 的其他功能无缝衔接,比如时频分析、源定位等,而且它底层处理好 SNIRF 解析后,自己制作各种可视化图表非常方便,这在论文出图时很加分。

NIRSLab 是 NIRx 推出的商业软件,功能全面但收费。不过厂商通常会随设备赠送 License,如果你所在单位买了 NIRx 设备,这个软件的优先级应该高于其他工具。它的好处是图形化界面直观,常规预处理点几下鼠标就能完成,不需要写代码。但是一旦要批量处理几十个被试,写脚本的效率优势就出来了,这时候还是得回到 Homer 或 MNE-NIRS。

还有一个更轻量的选择是 MATLAB 直接处理.mat格式数据,写个循环批量做带通滤波和运动伪迹校正。这种方式的优点是灵活,缺点是容易出错,每一步都需要自己确认变量维度。我一般只在处理特定格式的旧数据时才会这么做,日常流程还是交给 Homer3 或 MNE-NIRS 更好。

3.3 通道配准与个体空间对齐的原理

预处理里最容易出问题的是通道配准。fNIRS 通道本身不是一个实体传感器,而是由一对光源探头和检测探头组成,通道的位置取决于这一对探头在头皮上的坐标。同一个通道,如果光极间距不同,探测到的脑区深度和覆盖范围都不一样,所以数据在组分析之前,必须先明确每个通道在头部空间里到底对应哪里。

很多公开数据集会提供光极位置信息,常见形式是 3D 坐标的.csv文件或数字化仪的输出。我建议不要省略这一步,哪怕只是粗略地用标准模板匹配一次,也能在报告中说明你的通道覆盖了哪个脑区。大部分情况下,精品数据集都会给出landmarks文件,包含鼻根、左右耳前点等标记,这时候可以使用 AtlasViewer 对通道进行空间投影,效果相当好。

对于没有位置信息的数据集,只能靠光极排列图做手工近似。这种情况我一般会在结果里把结论写成“基于标准 10-20 系统的近似对应关系”,而不是硬说精确配准,保证结论的可信度。需要特别警惕的是网上流传的某些旧格式数据,里面通道列表顺序和光极编号可能会错位,务必先根据刺激触发事件来验证数据方向是否正常,再进入后续批量处理。

4. 从下载到预处理:完整实操流程

4.1 检索并下载数据

实际操作都是从确定数据源开始的。假设你想找一套运动想象任务的数据来做分类模型验证,我的建议顺序是:先查 OpenfNIRS 平台上有没有现成数据,其次去《Scientific Data》库搜数据论文,最后再考虑 Figshare 和 GitHub 上的零散分享。

登录开放平台后,直接看数据集卡片里的字段,重点关注Subjects数量、Channels数、Paradigm类型和Format属性。如果平台提供预览图,一定要看原始光强曲线或浓度曲线,观察信号是否连续、有没有大片脱落。这一步能筛掉不少问题数据,避免下载到一半才发现不可用。下载时注意选择原始数据格式,别只下载已经预处理后的版本。原始保留越全,后期自由度越大。

4.2 解压并确认文件结构

下载完成后,第一步不是直接跑工具,而是确认目录结构。我习惯先给每个数据集建立一个独立文件夹,命名格式为[来源]_[范式]_[被试数]_[通道数],例如openfnirs_motorimagery_20subj_36ch。里面建三个子目录:raw、preprocessed、analysis。这个习惯一开始可能觉得麻烦,但当你手头有超过五个数据集时,能明显感受到有秩序的快乐。

在raw目录下,先列出所有文件,检查是否包含 SNIRF 文件、事件标记表、光极位置文件和被试人口学信息。建议快速写一个读取脚本,打印每个文件的大小和变量结构。很多数据集在解压时会丢失目录层级,导致文件被平铺在同一个目录下,这时候要根据文件名的前缀或实验编号重新分类整理,避免后面统计时错位。

4.3 用 MNE-NIRS 读取 SNIRF 并做基础预处理

下面以 MNE-NIRS 为例,展示一套从读取到预处理的完整代码流程。假设你已用pip install mne mne-nirs安装好依赖,然后准备一个.snirf文件路径。

import mne import mne_nirs # 1. 读取 SNIRF 格式数据 raw = mne_nirs.io.read_snirf("sub-01_task-motor.snirf") # 2. 提取事件标记并查看任务类型 events, event_dict = mne.events_from_annotations(raw) print(event_dict) # 3. 创建氧合与脱氧血红蛋白浓度信号 raw = mne_nirs.channels.get_long_channels(raw) # 提取长距离通道 raw = mne_nirs.preprocessing.optical_density(raw) # 光密度变换 raw = mne_nirs.preprocessing.beer_lambert_law(raw) # 修正的 Beer-Lambert 变换 # 4. 查看处理后的信号曲线,做质量控制 raw.copy().pick(picks="hbo").plot(duration=60, n_channels=8) # 5. 按任务分段,时长根据实验设计调整,例如刺激前10秒到刺激后20秒 epochs = mne.Epochs(raw, events, event_id=event_dict, tmin=-10, tmax=20, baseline=None) print(epochs)

这段流程里,最关键的步骤是第 3 步。optical_density会把原始光强换算成光密度变化量,然后beer_lambert_law用修正的 Beer-Lambert 定律估算血红蛋白浓度。这里要特别提醒:一定要先做光密度变换再做浓度变换,直接对原始光强计算浓度会引入巨大误差。另外,events_from_annotations读取出的 event ID 要和实验说明核对,别把基线标记当成刺激标记用了。

如果你使用的是 Homer3,对应的流程是:导入 SNIRF 后用hmrR_MotionCorrectWavelet做运动伪迹校正,再用hmrR_BandpassFilt做带通滤波,最后用hmrR_OD2Conc转换成浓度信号,逻辑和 MNE-NIRS 一致。两套工具都可行,选择顺手的就是最好的。

4.4 批量处理与质量控制建议

单个数据集跑通后,批量的关键就变成了异常检测。我处理大量公开数据时,会额外生成一份质量摘要表,包含每个被试的通道有效率、信号均值方差和任务响应幅度。这一步用简单的 DataFrame 就可以完成,但价值极高,因为信息高度压缩,很容易发现异常被试。

质量控制的经验阈值供大家参考:长距离通道信噪比低于 5 的话,这个通道基本是要剔除的;相邻通道之间相关系数过高也要小心,可能是光耦短路;头部运动造成的瞬时伪迹在浓度曲线上表现为大幅双向尖峰,用 2 秒移动窗口的滑动标准差就能直接侦测出来。我的习惯是在预处理报告里附上 3 条原始信号截图,一条好的、一条有轻微伪迹的、一条质量差的,这样别人看你的数据时一目了然。

还有一个容易被忽视的坑:数据集里的事件标记延迟。如果事件的触发是外部设备经由串口打入,往往需要经过缓冲,导致标记与真实刺激起始点有几十毫秒的偏差。虽然在 fNIRS 这种慢信号里,50 ms 的偏差影响不算大,但如果你做的是需要精准锁定任务窗口的 GLM 分析,还是要用刺激响应函数把这个延迟建模进去,或者至少做一次滑动窗口测试来校准。

5. 常见问题与避坑清单实录

5.1 数据下载失败、链接失效怎么办

公开数据集的链接失效是常态,特别是大学实验室个人主页上的数据,经常跟着作者换单位就消失了。遇到这种情况先在平台内搜索有没有备份副本,比如 Figshare 经常有同一个数据集的不同版本。其次是利用 DOI 反查,把原论文的 DOI 在 Google Scholar 中打开,看有没有被其他研究者引用时附带的数据版本,必要时可以直接给论文通讯作者发邮件,礼貌地说明用途,很多作者还是很乐意分享的。

有一点要提醒:大型神经影像共享平台上的 fNIRS 数据不多,很多资源已经转向 Zenodo、OSF 这类通用平台,所以搜索时不要只看影像专业网站。我对链接失效的判断是,如果 404 页面显示得很干净,基本就是记录转移了,可以去 Web Archive 里尝试找历史快照;如果是网盘页面加载不出,则可能是网络问题,换一个时段或者换浏览器再试。

5.2 格式解析报错:处理不了 SNIRF 怎么办

初学阶段最容易遇到的报错是工具读不了数据。有次我下载了一个.snirf文件,MNE-NIRS 直接报“invalid snirf structure”,打开后才发现文件实际上是 MATLAB 的 .mat 结构,只是扩展名写错了。遇到这类解析错误,第一步永远是先检查文件真实头部信息,用xxd查看前几个字节,确认是不是 HDF5 结构,而不是盲目改扩展名。

另一个常见的现象是:一个数据集内的多个被试文件,存储结构不一致。有的被试文件里包含事件标记,有的没有;有的通道是 36 通道,有的只保留了 32 个通道。这种情况下一定要先做一致性检查,把所有文件的元信息提取出来对比,然后根据研究问题决定是统一裁剪通道还是补全标记。千万不要假设所有文件结构相同,这是很多批量处理翻车的根源。

5.3 通道配准、头围数据缺失时如何降低损耗

很多公开数据集为了隐私考虑,并不会提供个体 T1 结构像,连准确定位用的头围值都很少记录。这种情况下,通道配准只能依赖标准模板。我的做法是,优先选择自带光极位置的文件,否则就用标准 10-20 系统的坐标做刚性配准,并在论文或者报告中明确标注这个限制。

实际分析中,通道空间精度损失对结果的直接影响比很多人想象的小。fNIRS 主要捕获皮层表面区域的血氧响应,空间精度本来就在厘米量级。做组水平的分析时,标准模板配准基本能支撑主要脑区的定位结论。但做个体水平的定位研究时,比如想区分背外侧前额叶和布洛卡区,缺失配准信息就变成一个大问题,这时候应该果断舍弃这个数据集,另寻数据源。

5.4 公开数据无法完全复现文献结果的排查思路

下载了数据,预处理完了,做出来却和原文结论对不上,这几乎是每个用公开数据做复现的人都会经历的痛苦。遇到这种情况先别怀疑数据有问题,按照以下步骤排查。第一步查预处理参数,尤其是带通滤波的截止频率范围,fNIRS 信号频率范围一般集中在 0.01~0.2 Hz,心跳和呼吸伪迹需要滤掉,但很多人会把默认的 EEG 参数带进来,直接滤掉了有效信号。第二步查事件窗口,原始论文的 epoch 和基线时间设置可能和你下载到的数据包说明不完全一致,尽量从原文的 Methods 部分找到具体数值,逐一对齐。第三查统计方法,很多 fNIRS 论文做的是基于通道的对比,有的做的是感兴趣脑区的平均,这两种方法输出的结果差异很大,所以要仔细阅读统计部分的内容。

如果以上都排查完还是对不上,建议把处理好的数据在实验室讨论组里过一遍,有时候一个参数设定的问题,别人一眼就能看出来。复现不成功不等于数据不可用,即使结果不完全一致,只要你能合理说明差异来源,这个复现过程本身已经很有价值,也是用公开数据做研究的一大收获。

我个人现在做新项目,会先花半小时把候选公开数据集按任务类型、被试人数、通道数量、格式标准化程度列个表,再决定用哪个。这个习惯帮我节省了大量走弯路的时间,也让我在写方法学时能理直气壮地描述数据来源。希望这篇整理也能让你的 fNIRS 之路少一点折腾,多一点底气。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 8:22:22

JOLT实战:嵌套JSON结构映射工具使用指南

开工第一周,我先把去年底埋的一个坑填了:两个老接口之间的数据字段对齐。表面上看只是几十个字段从A结构挪到B结构,但真正打开报文才发现,里面有四层嵌套、数组套对象、对象再套数组。手写遍历当然能跑,可需求改了三四…

作者头像 李华
网站建设 2026/10/5 8:21:51

SpringBoot2+Vue3+MyBatis-Plus课表管理系统全栈实战解析

项目概述:这套课表管理系统的定位与价值先说我拿到这个标题的第一反应:SpringBoot2 Vue3 MyBatis-Plus MySQL8.0,这一套组合在 Java Web 课程设计、毕业设计、企业内部小工具开发里,属于非常典型又耐打的技术栈。课表管理系统听…

作者头像 李华
网站建设 2026/10/5 8:21:44

Matplotlib图表美化指南:从默认样式到专业级可视化

默认的蓝橙色图表,到底丑在哪里 如果你用Matplotlib画过几张图,大概率经历过这种尴尬:代码跑通了,图表出来了,但怎么看怎么像2005年的毕业论文插图——灰扑扑的背景、浮雕感的边框、饱和度刺眼的默认蓝,坐标…

作者头像 李华
网站建设 2026/10/5 8:20:34

多楼层迷宫与DAG最长路:从图论建模到动态规划实战

最近刷UVa时撞上13116这道Multistory Labyrinth,第一眼以为就是个走迷宫,BFS莽一下就行,结果仔细读完题发现完全不是那么回事。这道题把“楼层”这个概念实打实嵌进了网格迷宫模型里,层与层之间靠传送点衔接,整张图带权…

作者头像 李华
网站建设 2026/10/5 8:20:30

AOP切面编程核心原理与实战:日志、事务、权限一次讲透

在项目里跟日志、事务、权限这些东西打交道打得多了,你会发现一个特别扎心的现实: 你真正想写的业务逻辑可能就十行,但为了凑齐“记录操作人、打印入参出参、开启事务、校验权限”这些横切逻辑,硬生生能写出五十行重复代码 。我…

作者头像 李华
网站建设 2026/10/5 8:20:14

彻底解决Office 2016安装错误30088-1028(0)的五个步骤

简介:不少用户升级Win10后安装Office 2016时,因客户端更新机制引发错误30088-1028(0),导致安装流程中断。这份DOCX格式排错文档正是针对该报错的综合解决方案,内容围绕错误成因与修复主线展开,适合家用办公用户、企业I…

作者头像 李华