作者:louis | 来源:互联网 | 2024-11-20 19:59
主函数
以下是将高光谱数据集转换为伪彩色 CIE 图像的 MATLAB 主函数。
% CIE1931 伪彩色 clc close all clearvars % 初始化 CIE1931 RGB 值 CIE1931 = [380, 0.0272, -0.0115, 0.9843; 385, 0.0268, -0.0114, 0.9846; 390, 0.0263, -0.0114, 0.9851; ... 775, 1.0000, 0.0000, 0.0000; 780, 1.0000, 0.0000, 0.0000]; % 设置图像路径和名称 image_path = 'E:\仿真代码\双色散自监督\CAVE 数据集\feathers_ms\feathers_ms\'; image_names = dir(fullfile(image_path, '*.png')); % 循环处理每个图像 for image_idx = 1:length(image_names) image_name = image_names(image_idx).name; img = imread(fullfile(image_path, image_name)); img = double(img) / 255; % 初始化 RGB 图像 img_RGB = zeros(512, 512, 3); mean_gray = 402; % 输入图像的波长 cie = zeros(1, 3); for i = 1:3 result = GetLineValue(CIE1931, mean_gray, i); cie(:, i) = result; end % 计算 RGB 分量 img_R = img * (cie(1, 1) / sum(cie)); img_G = img * (cie(1, 2) / sum(cie)); img_B = img * (cie(1, 3) / sum(cie)); % 组合成 RGB 图像 img_RGB(:, :, 1) = img_R; img_RGB(:, :, 2) = img_G; img_RGB(:, :, 3) = img_B; % 保存结果图像 output_path = 'E:\仿真代码\论文\其他融合算法\'; output_name = [fileparts(image_name), '.bmp']; imwrite(uint8(img_RGB), fullfile(output_path, output_name)); end
获取 CIE RGB 值的函数
以下是用于获取特定波长对应的 CIE RGB 值的辅助函数。
function Yaxis = GetLineValue(Arr, Xaxis, i) Left = 0; % 循环变量左值 Flg = 0; % 标志位 Lng = size(Arr, 1); if i == 1 num = 2; elseif i == 2 num = 3; else num = 4; end if Xaxis <= Arr(1, 1) Yaxis = Arr(1, num); elseif Xaxis >= Arr(Lng, 1) Yaxis = Arr(Lng, num); else Right = Lng; while (Left Arr(Middle, 1) Left = Middle; else Flg = 1; Yaxis = Arr(Middle, num); break; end end if Flg == 0 Yaxis = (Arr(Left + 2, num) - Arr(Left + 1, num)) * (Xaxis - Arr(Left + 1, 1)) / (Arr(Left + 2, 1) - Arr(Left + 1, 1)) + Arr(Left + 1, num); end end