通过高光谱图像处理和偏最小二乘法(PLSR)来预测苹果甜度

2025-12-14

通过高光谱图像处理和偏最小二乘法(PLSR)来预测苹果甜度

苹果甜度高光谱检测:从图像到模型

流程概括了从高光谱图像处理到建立甜度预测模型的核心步骤:

flowchart TD
    A[高光谱图像采集] --> B[图像预处理]
    B --> C[感兴趣区域选取]
    C --> D[光谱数据提取]
    D --> E[光谱预处理]
    E --> F[PLSR建模与预测]
    F --> G[模型验证]
    
    B1[黑白校正] --> B
    C1[形态学腐蚀] --> C
    C2[强度阈值筛选] --> C
    E1[SNV处理] --> E
    E2[S-G平滑] --> E
    F1[竞争性自适应重加权] --> F
    G1[计算R²与RMSE] --> G

核心步骤与代码实现

1. 高光谱图像采集与预处理

高光谱图像包含大量窄波段信息。预处理可减少噪声和仪器误差:

% 假设已读取高光谱图像数据立方体 hyperimg (height x width x bands)
% 黑白校正可减少光照和传感器噪声
% 黑参考图像 dark_ref 和 白参考图像 white_ref 需在相同条件下采集
corrected_hyperspectral = (hyperimg - dark_ref) ./ (white_ref - dark_ref);

2. 选取感兴趣区域 (ROI)

选取苹果有效区域,排除背景、果梗和果萼干扰:

% 选取700nm波长图像,该波段常有助于区分果肉与干扰区域
band_700nm = 100; % 假设第100波段对应700nm,需根据实际数据调整
I_700nm = corrected_hyperspectral(:,:,band_700nm);

% 通过强度阈值初步选取ROI
hist_counts = histcounts(I_700nm, 'Normalization', 'probability');
cum_hist = cumsum(hist_counts);
intensity_thresh_40 = find(cum_hist >= 0.4, 1, 'first'); % 找到累积分布前40%的强度阈值
binary_mask_40 = I_700nm >= intensity_thresh_40;

% 形态学腐蚀去除小噪点和高亮区
se = strel('disk', 5); % 创建半径为5的圆盘结构元素
eroded_mask = imerode(binary_mask_40, se);

% 进一步去除过度曝光像素
overexposure_thresh = 3900; % 假设700nm处过度曝光阈值为3900
final_mask = eroded_mask & (I_700nm < overexposure_thresh);

% 可选:选取原始ROI中光谱强度前70%的区域
intensity_vals = I_700nm(final_mask);
sorted_intensity = sort(intensity_vals, 'descend');
top_70_thresh = sorted_intensity(round(0.7 * length(sorted_intensity))); % 找到前70%的阈值
roi_mask_final = final_mask & (I_700nm >= top_70_thresh);

3. 提取平均光谱

从ROI内提取平均光谱用于建模:

[rows, cols, bands] = size(corrected_hyperspectral);
roi_spectra = zeros(sum(roi_mask_final(:)), bands);
for b = 1:bands
    band_image = corrected_hyperspectral(:,:,b);
    roi_spectra(:, b) = band_image(roi_mask_final);
end
mean_spectrum = mean(roi_spectra, 1); % 平均光谱

4. 光谱数据预处理

预处理可提升模型性能:

% 标准正态变量变换,消除散射影响
mean_spectrum_snv = (mean_spectrum - mean(mean_spectrum)) / std(mean_spectrum);

% S-G平滑滤波去噪
mean_spectrum_sg = sgolayfilt(mean_spectrum_snv, 2, 15); % 2次多项式,15点窗口
processed_spectrum = mean_spectrum_sg;

5. 偏最小二乘回归 (PLSR) 建模与预测

PLSR适用于高维光谱数据预测苹果糖度(甜度主要指标):

% 假设已有训练集样本的 processed_spectra (n_samples x n_bands) 和 sugar_content (n_samples x 1)
% 划分训练集和测试集
cv = cvpartition(size(processed_spectra,1), 'HoldOut', 0.2);
X_train = processed_spectra(cv.training,:);
y_train = sugar_content(cv.training);
X_test = processed_spectra(cv.test,:);
y_test = sugar_content(cv.test);

% 使用竞争性自适应重加权算法进行变量选择
% 注:需实现或获取CARS函数,以下为PLSR建模示例
n_components = 10; % 潜变量数,可通过交叉验证选择
[Xloadings, Yloadings, Xscores, Yscores, beta, pctVar, mse, stats] = plsregress(X_train, y_train, n_components);

% 预测测试集
y_pred = [ones(size(X_test,1),1) X_test] * beta;

6. 模型验证

评估模型预测性能:

% 计算性能指标
R2 = 1 - sum((y_test - y_pred).^2) / sum((y_test - mean(y_test)).^2);
RMSE = sqrt(mean((y_test - y_pred).^2));
fprintf('测试集决定系数 R^2: %.4f\n', R2);
fprintf('测试集均方根误差 RMSE: %.4f °Brix\n', RMSE);

% 可视化预测值与实测值
figure;
plot(y_test, y_pred, 'o');
xlabel('实测糖度 (°Brix)');
ylabel('预测糖度 (°Brix)');
title('PLSR模型预测结果');
hold on;
plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--');
legend('预测值', '1:1参考线', 'Location', 'best');
grid on;

关键提示

  1. 数据准备:模型需要足够的有代表性的样本(通常上百个)及其实测糖度值(使用折光仪测定)进行训练。

  2. ROI选取重要性:准确的ROI选取对模型性能至关重要。

  3. 算法优化

    • 变量选择:采用竞争性自适应重加权算法 (CARS)后向区间偏最小二乘法 (biPLS) 筛选有效波长,可简化模型并提升稳健性。
    • 模型更新:当遇到新批次苹果时,将部分新样本加入旧模型重新校准,可提升模型适用性。
  4. 模型比较:也可尝试其他方法,如3D-CNNBP神经网络函数型线性回归,比较后选择最佳模型。

参考

  • 代码 高光谱图像处理程序示例 www.3dddown.com/csa/79753.html
  • 提供了苹果高光谱图像感兴趣区域自动选取方法(基于700nm强度统计和形态学处理)。
  • 展示了采用标准正态变量变换 (SNV) 预处理光谱并结合PLSR预测苹果糖度的有效性。
  • 介绍了通过变量选择结合模型更新来改进苹果糖度检测的PLSR模型。
  • 则展示了3D-CNN在高光谱图像多品质参数检测中的应用。