华为杯2026 C题脑电信号建模:预处理、特征工程与分类实战

脑电信号EEG数学建模 本内容遵循CC 4.0 BY-SA版权协议
赛雷观影 赛雷观影 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要

1. 赛题定位与脑电信号建模的整体破题思路

1.1 这道题到底在考什么

华为杯研究生数学建模竞赛的C题历来偏向信号处理与数据建模方向,2026年这道脑电图题目也不例外。从标题来看,核心任务围绕脑电信号展开,而脑电信号本质上是一种非平稳、非线性、低信噪比的时序信号,采集过程中混杂着大量伪迹(眼电、肌电、心电干扰),这就决定了整道题的基调:数据预处理的质量直接决定后续建模的天花板。

很多队伍拿到题目后第一反应是直接上深度学习模型,这是典型的误区。脑电信号和图像、文本有本质区别——它的有效频段集中在0.5Hz到45Hz之间,采样率通常在250Hz到1000Hz,单通道数据量看似不大,但多通道之间的空间相关性极强。如果不做通道筛选和伪迹去除就直接喂给网络,模型学到的很可能是噪声的分布而不是真正的神经活动模式。

这道题的第一问通常要求完成数据清洗、特征提取和初步分类或回归建模。从命题规律看,Q1往往是整道题的基础,后续问题会在此基础上做迁移、优化或扩展。所以Q1的论文写作不能只盯着结果,要把方法论的可解释性和流程的规范性写透,评委看的是你的建模逻辑是否自洽,而不是单纯比谁的准确率高零点几个百分点。

1.2 整体技术路线的选择逻辑

脑电信号建模的经典路线有两条:一条是基于手工特征的机器学习路线,另一条是端到端的深度学习路线。两条路线各有适用场景,选错了会让后续工作非常被动。

手工特征路线的核心思路是先把信号转换成可解释的特征向量,再交给分类器。常用的特征包括时域特征(均值、方差、峰度、偏度、过零率)、频域特征(各频段功率谱密度,即δ波1-4Hz、θ波4-8Hz、α波8-13Hz、β波13-30Hz、γ波30-45Hz)、时频域特征(小波变换系数、短时傅里叶变换谱图)以及空域特征(通道间相干性、脑网络连接指标)。这条路线的优势在于可解释性强,论文里能画出漂亮的功率谱对比图,而且在小样本条件下表现稳定。

深度学习路线则依赖卷积神经网络、循环神经网络或Transformer架构直接学习原始信号或谱图的表征。它的优势是省去了手工设计特征的环节,理论上能捕捉更复杂的模式,但缺点也很明显:需要大量标注数据,训练不稳定,超参数敏感,而且论文里很难解释模型到底学到了什么。

我的建议是:Q1优先走手工特征加经典分类器的路线,把基线做扎实,然后在Q2或Q3再引入深度学习做对比提升。这样既保证了Q1的完成度,又为后续留出了优化空间。评委看到你的技术路线是递进的,印象分会高很多。

1.3 论文框架的搭建要点

数学建模论文和纯学术论文不同,它更强调“问题-方法-验证”的闭环。Q1的论文框架建议按以下结构组织:

  • 问题重述与分析:不要照抄题目,用自己的话把问题拆解成若干子任务,明确输入输出和评价指标。
  • 数据预处理:详细说明滤波、去伪迹、分段、归一化的每一步操作和参数选择依据。
  • 特征工程:列出提取的特征类别、具体计算方法和物理含义。
  • 模型构建:说明分类器或回归模型的选择理由、超参数设置和训练策略。
  • 结果与分析:给出定量指标(准确率、F1、AUC、RMSE等)和定性分析(混淆矩阵、特征重要性排序)。
  • 模型检验:交叉验证、消融实验、鲁棒性测试。

这个框架看起来常规,但真正拉开差距的是每一步的细节深度。比如滤波这一步,你不能只写“用了带通滤波”,要写清楚为什么选0.5-45Hz而不是0.5-50Hz,滤波器类型是巴特沃斯还是切比雪夫,阶数怎么定的,相位失真怎么补偿的。这些细节才是评委判断你是否真正理解信号处理的地方。

2. 脑电数据预处理的核心细节与实操避坑

2.1 数据读取与通道对齐

脑电数据常见的存储格式包括EDF、BDF、SET、MAT和CSV。不同格式的读取方式差异很大,EDF和BDF需要用专门的库(如MNE、EEGLAB)读取,MAT文件用scipy.io.loadmat,CSV直接pandas读取即可。这里第一个坑就是通道名称和顺序:不同设备导出的通道命名规则不同,有的用“Fz”“Cz”“Pz”这种国际10-20系统命名,有的用“EEG1”“EEG2”这种序号命名。如果多被试数据合并时没有对齐通道,后续所有分析都是错的。

实操建议是写一个通道映射字典,把所有被试的通道名统一映射到标准命名,然后按固定顺序重排。代码示例如下:

PYTHON
import mne
import numpy as np
 
# 读取EDF文件
raw = mne.io.read_raw_edf('subject01.edf', preload=True)
 
# 查看通道名称
print(raw.ch_names)
 
# 统一通道命名映射
channel_map = {
'EEG Fp1': 'Fp1', 'EEG Fp2': 'Fp2',
'EEG F3': 'F3', 'EEG F4': 'F4',
# ... 其他通道
}
raw.rename_channels(channel_map)
 
# 按标准顺序重排
standard_order = ['Fp1', 'Fp2', 'F3', 'F4', 'C3', 'C4', 'P3', 'P4', 'O1', 'O2']
raw.reorder_channels(standard_order)

注意:重排通道前一定要确认所有被试的通道集合一致,缺失通道要么插值补齐,要么直接剔除该被试,不能强行对齐。

2.2 滤波参数的选择与相位补偿

滤波是脑电预处理的第一步,目的是去除低频漂移和高频噪声。低频漂移主要来自电极极化、出汗和呼吸运动,频率通常在0.5Hz以下;高频噪声主要来自工频干扰(50Hz或60Hz)和肌电活动,频率在45Hz以上。

带通滤波的截止频率选择需要权衡:下限设得太高会损失慢波成分(δ波和部分θ波),下限设得太低则漂移去不干净;上限设得太高会引入肌电噪声,上限设得太低会损失γ波信息。0.5-45Hz是一个比较稳妥的选择,如果研究重点在γ波,可以放宽到0.5-70Hz,但必须配合陷波滤波去除工频。

滤波器类型方面,巴特沃斯滤波器通带平坦但过渡带较宽,切比雪夫滤波器过渡带窄但通带有纹波。脑电分析中常用巴特沃斯,因为相位失真相对可控。更重要的是必须使用零相位滤波(filtfilt而非lfilter),否则滤波会引入相位延迟,导致事件相关电位的时间定位偏移。

PYTHON
from scipy.signal import butter, filtfilt, iirnotch
 
# 带通滤波 0.5-45Hz
fs = 500 # 采样率
b, a = butter(4, [0.5/(fs/2), 45/(fs/2)], btype='band')
filtered = filtfilt(b, a, raw_data, axis=-1)
 
# 50Hz陷波
b_notch, a_notch = iirnotch(50/(fs/2), Q=30)
filtered = filtfilt(b_notch, a_notch, filtered, axis=-1)

实操心得:filtfilt的阶数不要设太高,4阶足够,阶数太高会导致数值不稳定,尤其是数据边缘会出现振铃效应。如果数据长度较短,建议先做padding再滤波。

2.3 伪迹去除的三种主流方案对比

伪迹去除是脑电预处理中最考验功力的环节。常见方案有三种:拒绝法、回归法和盲源分离法。

方案 原理 优点 缺点 适用场景
拒绝法 设定幅值阈值,超限片段直接丢弃 简单直接,不引入人为成分 数据损失大,短试次实验不可用 数据量充足、试次较多
回归法 用眼电通道信号回归掉EEG中的眼动成分 保留全部数据,计算快 需要独立眼电通道,回归不彻底 有EOG通道的数据
ICA 盲源分离,人工识别并剔除伪迹成分 去除彻底,保留数据完整 计算慢,成分识别依赖经验 高质量论文首选

ICA是目前论文中最常用的方案,但它的坑也最多。首先,ICA对数据长度有要求,一般建议数据点不少于通道数的20倍,否则分解不稳定。其次,成分识别没有绝对标准,需要结合成分的功率谱、地形图和时序波形综合判断。眼电成分的典型特征是前额通道权重高、功率谱低频能量集中、时序波形有尖锐的眨眼峰;肌电成分则是高频能量高、地形图分散。

PYTHON
from mne.preprocessing import ICA
 
# 构建ICA对象
ica = ICA(n_components=20, method='fastica', random_state=42, max_iter=500)
ica.fit(raw_filtered)
 
# 自动识别眼电成分
eog_indices, eog_scores = ica.find_bads_eog(raw_filtered, ch_name='Fp1')
ica.exclude = eog_indices
 
# 应用ICA去除伪迹
raw_clean = ica.apply(raw_filtered.copy())

注意:ICA之前一定要先做滤波,否则低频漂移会主导分解结果。另外,ICA的随机种子要固定,否则每次分解结果不同,论文无法复现。

2.4 分段、基线校正与归一化

分段(epoching)是把连续信号按事件标记切分成固定长度的片段。分段长度取决于研究问题:事件相关电位分析通常取刺激前200ms到刺激后800ms,静息态分析则取2-4秒的窗口。分段时要确保事件标记的时间对齐准确,否则叠加平均后波形会失真。

基线校正用刺激前的数据减去基线均值,目的是消除片段间的基线漂移。归一化则有两种选择:全局归一化(用整个数据的均值和标准差)和逐片段归一化(每个片段单独归一化)。全局归一化保留了片段间的幅值差异,适合比较不同条件的绝对幅值;逐片段归一化消除了幅值差异,适合关注波形形状的任务。

PYTHON
# 分段
events = mne.find_events(raw_clean)
epochs = mne.Epochs(raw_clean, events, event_id={'target': 1, 'non-target': 2},
tmin=-0.2, tmax=0.8, baseline=(-0.2, 0), preload=True)
 
# 获取数据数组
X = epochs.get_data() # shape: (n_epochs, n_channels, n_times)
y = epochs.events[:, -1]
 
# 全局归一化
X_normalized = (X - X.mean()) / X.std()

实操心得:归一化之前一定要检查是否有异常片段(幅值超过100μV的),这些片段要么剔除要么修正,否则会严重拉偏均值和标准差。

3. 特征工程与分类模型的完整实现

3.1 时域特征的提取与物理含义

时域特征是最直观的特征类别,计算简单且物理含义明确。常用的时域特征包括:

  • 均值:反映信号的中心趋势,但脑电信号均值通常接近零,区分度不高。
  • 方差/标准差:反映信号的波动程度,方差越大说明该通道活动越剧烈。
  • 峰度:反映分布的尖锐程度,峰度高说明信号中有较多尖峰(可能是伪迹或癫痫样放电)。
  • 偏度:反映分布的对称性,偏度绝对值大说明信号不对称。
  • 过零率:单位时间内信号穿越零点的次数,与信号的主频相关。
  • Hjorth参数:包括活动度、移动性和复杂度,是脑电分析中的经典特征。
PYTHON
from scipy.stats import kurtosis, skew
 
def extract_time_features(epoch_data):
"""epoch_data shape: (n_epochs, n_channels, n_times)"""
features = []
for epoch in epoch_data:
epoch_feat = []
for ch in epoch:
feat = [
np.mean(ch),
np.std(ch),
kurtosis(ch),
skew(ch),
np.sum(np.diff(np.sign(ch)) != 0) / len(ch), # 过零率
]
epoch_feat.extend(feat)
features.append(epoch_feat)
return np.array(features)

时域特征的缺点是抗噪能力弱,如果预处理不干净,伪迹会直接污染特征值。所以时域特征通常和频域特征配合使用,单独使用时域特征建模的论文很难拿到高分。

3.2 频域特征的提取与频段功率计算

频域特征是脑电分析的核心,因为脑电的生理意义主要体现在不同频段的功率变化上。计算频域特征的标准流程是:先做功率谱密度估计(PSD),再对各频段积分得到绝对功率,最后计算相对功率(绝对功率除以总功率)和功率比(如θ/β比值)。

PSD估计有两种主流方法:Welch法和多窗谱法(multitaper)。Welch法计算快但频率分辨率有限,多窗谱法频率分辨率高但计算慢。对于分段数据,Welch法通常够用。

PYTHON
from scipy.signal import welch
 
def extract_freq_features(epoch_data, fs=500):
"""提取各频段绝对功率和相对功率"""
bands = {
'delta': (1, 4), 'theta': (4, 8),
'alpha': (8, 13), 'beta': (13, 30), 'gamma': (30, 45)
}
features = []
for epoch in epoch_data:
epoch_feat = []
for ch in epoch:
freqs, psd = welch(ch, fs=fs, nperseg=min(256, len(ch)))
total_power = np.trapz(psd, freqs)
for band_name, (low, high) in bands.items():
idx = np.logical_and(freqs >= low, freqs <= high)
abs_power = np.trapz(psd[idx], freqs[idx])
rel_power = abs_power / total_power if total_power > 0 else 0
epoch_feat.extend([abs_power, rel_power])
features.append(epoch_feat)
return np.array(features)

注意:功率谱计算前一定要确认信号已经去除了工频干扰,否则50Hz的峰值会污染γ频段的功率估计。另外,总功率的计算范围要和频段范围一致,不能只积分到45Hz却用全频段总功率做分母。

3.3 时频域特征与小波变换

时频域特征适合分析非平稳信号,因为脑电的频段功率是随时间变化的。短时傅里叶变换(STFT)和小波变换是两种常用方法。STFT的窗口长度固定,时间分辨率和频率分辨率不可兼得;小波变换的窗口自适应,低频处频率分辨率高,高频处时间分辨率高,更符合脑电信号的特性。

小波变换的关键参数是小波基函数和分解层数。脑电分析中常用Daubechies小波(db4或db5)和Morlet小波。分解层数由采样率和目标频段决定,一般分解到第5-6层即可覆盖δ到γ频段。

PYTHON
import pywt
 
def extract_wavelet_features(epoch_data, wavelet='db4', level=5):
features = []
for epoch in epoch_data:
epoch_feat = []
for ch in epoch:
coeffs = pywt.wavedec(ch, wavelet, level=level)
for coeff in coeffs:
epoch_feat.extend([
np.mean(np.abs(coeff)),
np.std(coeff),
np.sum(coeff ** 2) # 能量
])
features.append(epoch_feat)
return np.array(features)

小波特征的维度通常很高(通道数×层数×3),直接送入分类器容易过拟合,建议配合PCA或LDA做降维。

3.4 分类器选型与超参数调优

特征提取完成后,分类器的选择同样关键。对于中小规模特征集(几百到几千维),SVM、随机森林和XGBoost是稳妥的选择;对于高维特征集,建议先用PCA降维再分类。

SVM的核心参数是核函数和正则化系数C。RBF核适合非线性可分的数据,C控制间隔的软硬程度,C越大越容易过拟合。随机森林的核心参数是树的数量和最大深度,树越多越稳定但计算越慢。XGBoost的参数最多,学习率、树深度、子采样比例都需要调。

PYTHON
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
 
# SVM pipeline
pipe_svm = Pipeline([
('scaler', StandardScaler()),
('pca', PCA(n_components=0.95)),
('svm', SVC(kernel='rbf', probability=True))
])
 
param_grid_svm = {
'svm__C': [0.1, 1, 10, 100],
'svm__gamma': ['scale', 'auto', 0.01, 0.001]
}
 
grid_svm = GridSearchCV(pipe_svm, param_grid_svm, cv=5, scoring='accuracy', n_jobs=-1)
grid_svm.fit(X_train, y_train)
print("Best params:", grid_svm.best_params_)
print("Best CV score:", grid_svm.best_score_)

实操心得:交叉验证一定要用分层抽样(StratifiedKFold),否则类别不平衡时验证集可能全是某一类。另外,PCA的n_components设为0.95表示保留95%的方差,这个阈值可以根据特征维度调整,维度高时降到0.90也能接受。

3.5 模型评估与结果呈现

模型评估不能只看准确率,尤其是类别不平衡时。完整的评估指标包括准确率、精确率、召回率、F1分数和AUC。混淆矩阵能直观展示各类别的误分情况,ROC曲线能展示模型在不同阈值下的表现。

PYTHON
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score
 
y_pred = grid_svm.predict(X_test)
y_prob = grid_svm.predict_proba(X_test)
 
print(classification_report(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
print("AUC:", roc_auc_score(y_test, y_prob, multi_class='ovr'))

论文中呈现结果时,建议用表格列出各模型的对比指标,用混淆矩阵热力图展示误分模式,用特征重要性排序图展示哪些特征贡献最大。这些可视化不仅让论文更美观,更重要的是能支撑你的分析结论。

4. 常见问题排查与独家避坑经验

4.1 数据层面的典型问题

问题一:采样率不一致。多被试数据合并时,如果采样率不同,必须先统一重采样。重采样要用抗混叠滤波,否则会引入虚假频率成分。建议统一到250Hz或500Hz,前者计算快,后者保留更多高频信息。

问题二:事件标记错位。有些设备导出的事件标记和信号之间存在固定延迟,如果不校正,分段后的波形会整体偏移。排查方法是找一个已知的诱发响应(如P300),检查其潜伏期是否符合预期。

问题三:通道数据全为零或饱和。这通常是电极接触不良导致的,需要在预处理阶段检测并剔除。检测方法是计算每个通道的方差,方差接近零或异常大的通道标记为坏道,用相邻通道插值补齐。

4.2 特征层面的典型问题

问题四:特征维度灾难。通道数×特征类别数很容易达到几千维,而样本量可能只有几百。这种情况下必须降维,否则分类器必然过拟合。降维方法首选PCA,如果追求可解释性可以用LDA或特征选择(如递归特征消除)。

问题五:特征尺度不统一。功率特征的数值范围可能是10的负几次方,而过零率在0到1之间,如果不做标准化,SVM的核函数会被大尺度特征主导。标准化要用训练集的均值和标准差,不能把测试集一起标准化,否则会造成数据泄露。

问题六:频段边界模糊。不同文献对α波的定义可能是8-12Hz或8-13Hz,θ波可能是4-7Hz或4-8Hz。论文中必须明确说明你采用的频段划分标准,并引用依据。建议采用国际脑电图学会的标准划分。

4.3 模型层面的典型问题

问题七:交叉验证数据泄露。如果先对全量数据做归一化或PCA再交叉验证,测试集的信息会泄露到训练集。正确做法是把预处理步骤放进Pipeline,在每折交叉验证内部单独fit。

问题八:类别不平衡。如果两类样本比例超过3:1,准确率就会失真。解决方法包括过采样(SMOTE)、欠采样、类别权重调整和阈值移动。SMOTE对小样本高维数据效果有限,建议优先用类别权重。

问题九:随机种子不固定。ICA分解、PCA降维、SVM训练都涉及随机过程,如果不固定随机种子,结果无法复现。论文中要明确说明随机种子设置,代码中统一用random_state=42。

4.4 论文写作层面的典型问题

问题十:方法描述过于笼统。评委最反感的就是“用了SVM分类”这种一句话带过的写法。必须写清楚:为什么选SVM而不是随机森林,核函数为什么选RBF,C和gamma是怎么调的,调参范围是多少,最终选了什么值。

问题十一:结果分析缺乏深度。不能只列准确率,要分析误分样本的特点,讨论哪些通道或频段贡献最大,和已有文献的结论是否一致,不一致的可能原因是什么。

问题十二:图表不规范。功率谱图的坐标轴要标单位,混淆矩阵要标数值,特征重要性图要标特征名称。图表标题要自解释,不能只写“图1”“图2”,要让读者不看正文也能理解图表内容。

4.5 常见问题速查表

问题现象 可能原因 排查方法 解决方案
准确率接近随机 特征无区分度或标签错位 检查标签分布和特征分布 重新提取特征或核对标签
训练集准确率远高于测试集 过拟合 对比训练和测试的损失曲线 降维、正则化、增加数据
所有样本预测为同一类 类别不平衡或特征尺度问题 检查类别比例和特征统计量 类别权重、标准化
ICA分解报错 数据长度不足或含NaN 检查数据形状和缺失值 增加数据长度或插值
滤波后波形失真 滤波器阶数过高或边缘效应 对比滤波前后波形 降低阶数、padding
交叉验证结果波动大 样本量小或数据分布不均 增加折数或重复验证 分层抽样、重复交叉验证

独家避坑技巧:论文提交前一定要做一次完整的代码复现测试,把代码从头跑一遍,确认没有硬编码路径、没有遗漏的依赖包、没有随机性导致的结果差异。很多队伍论文写得漂亮,但代码跑不通,这在评审中是大忌。

5. 从Q1到后续问题的扩展思路

Q1做扎实之后,后续问题通常会要求你在某个方向上深入。常见的扩展方向包括:多被试迁移(跨被试分类)、多模态融合(结合眼电、肌电或其他生理信号)、实时性优化(降低计算复杂度)、可解释性增强(可视化模型关注的时间段和通道)。

跨被试迁移的核心难点是个体差异大,解决方案包括迁移学习(如CORAL、MMD)、域适应和个性化微调。多模态融合的关键是时间对齐和特征级/决策级融合策略的选择。实时性优化则需要权衡模型复杂度和推理速度,可以考虑模型剪枝、量化和知识蒸馏。

这些扩展方向在Q1的论文中不需要展开,但可以在“模型展望”部分简要提及,展示你对整个问题链条的理解。评委看到你有全局视野,对Q1的评价也会更高。

我个人在实际操作中的体会是:数学建模竞赛的论文,方法的新颖性固然重要,但更重要的是逻辑的完整性和细节的严谨性。一个用经典方法但每一步都讲清楚为什么这么做的论文,往往比一个堆砌前沿模型但说不清原理的论文得分更高。脑电信号处理尤其如此,因为它的生理基础决定了你不能把它当成一个黑箱来对待。把预处理做干净,把特征提取的物理含义讲明白,把模型评估做全面,Q1的基本盘就稳了。

相关推荐

基于Python+Open CV的手势识别算法设计

伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。

努力学习前端的小陈

ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像

ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)

Willis Wang

计算机视觉图像处理-CV2与图像插值算法

用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int

weixin_38697274

基于水平集CV模型的图像分割(Matlab代码)

基于水平集CV模型的图像分割(Matlab代码),全套代码

小宇QAQ

导向滤波(guide_filter)的python实现

导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

zachzhan_g
返回顶部
赛雷观影
博客等级 码龄9年 27粉丝 7,297原创