📄 tdpca2.m
字号:
%%%2DPCA算法 前train_num个作为训练样本 输出的数据以二维表示
function new_data = TDPCA2(data,class_num,train_num,line_num,new_line_num) %new_line_num:变换后的图象数据的列数 line_num:变换前的图象数据的列数
% 输入的data是一维数据
[ dim,total_num ] = size( data ) ;
class_data_num = total_num/class_num ; %得到每类中的样本数目
%train_data = [];
train_data_num = train_num*class_num;
row_num=dim/line_num;
test_num = class_data_num-train_num;
for data_mark = 1:total_num
td_data(:,:,data_mark) = reshape(data(:,data_mark),row_num,line_num); %将一维数据转换成2维表示
%2d_total_data =
end
% n = randperm(class_data_num);
train_index = [1:train_num];
test_index = [(train_num+1):class_data_num];
for class_mark = 1:class_num %for循环得到训练数据和测试数据
td_train_data(:,:,(class_num-1)*train_num+(1:train_num)) = td_data(:,:,(class_num-1)*class_data_num+train_index);
td_test_data(:,:,(class_num-1)*test_num+(1:test_num)) = td_data(:,:,(class_num-1)*class_data_num+test_index);
end
td_mean_train_data = mean(td_train_data,3);
%2d_mean_test_data = mean(2d_test_data,3);
cova_td_train_data = zeros(line_num,line_num);
for train_data_mark = 1:train_data_num % 得到图象散度矩阵
cova_td_train_data = cova_td_train_data+(td_train_data(:,:,train_data_mark)-td_mean_train_data)'*(td_train_data(:,:,train_data_mark)-td_mean_train_data);
end
cova_td_train_data = cova_td_train_data/train_data_num;
[comp_vec,comp_val] = eig(cova_td_train_data);
val = diag(comp_val);
[sort_val,index] = sort(val,'descend');
sort_vec = comp_vec(:,index);
% for vec_mark = 1:new_line_num
% trans_vec(:,vec_mark) =
% end
trans_vec = sort_vec(:,1:new_line_num);
for data_mark = 1:total_num %for循环得到做2dpca后的数据
new_data(:,:,data_mark) = td_data(:,:,data_mark)*trans_vec;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -