📄 pca_svm_trainx.m
字号:
%本程序用于对训练样本提取独立主元,作为样本特征,并送入SVM分类器中训练
%图像的预处理中不取对数,也无须做幅度归一,由ICA的应用条件决定的。
%预处理后的图像以向量的形式按行排列
%%%%%%%%%%% 图像预处理部分 %%%%%%%%%%%%%%%%%%%%%
function main
clear all
disp('程序正在运行')
clear all
load T72_mag.mat
[T72]=subfunction1(mobandata);
load T72_fw.mat
fw_data=FW;
[fw_T72]=subfunction2(fw_data,T72);
clear mobandata;
clear FW;
load BMP_mag.mat
[BMP]=subfunction1(mobandata);
load BMP_fw.mat
fw_data=FW;
[fw_BMP]=subfunction2(fw_data,BMP);
clear mobandata;
clear FW;
load BTR_mag.mat
[BTR]=subfunction1(mobandata);
load BTR_fw.mat
fw_data=FW;
[fw_BTR]=subfunction2(fw_data,BTR);
clear mobandata;
clear FW;
%%%%%%%%%%%% 提取主元 %%%%%%%%%%%%%%%
m1=1;
m2=1;
m3=1;
for n=1:6
L1=fw_T72(n);
L2=fw_BMP(n);
L3=fw_BTR(n);
MIXimage_s=[T72(m1:m1+L1-1,:);BMP(m2:m2+L2-1,:);BTR(m3:m3+L3-1,:)];
MIXimage_mean(n,:)=mean(MIXimage_s);
X=MIXimage_s-ones(size(MIXimage_s,1),1)*MIXimage_mean(n,:);%?123*2113
R=X*X';%123*123
[v lambda]=eig(R);
m=size(v,1);
for i=1:m-40
L(i)=lambda(m+1-i,m+1-i);
u(:,i)=1/sqrt(L(i))*X'*v(:,m+1-i);
end
Proaxis{n}=u;%2113*83
feature=X*u; %123*83
clear L u;
%%%%%% SVM训练 %%%%%%%%%%%%%%
Parameters=[2,1,0.75,1,10,35,0.001,0,0.3,0.3]; %线性分类器
Samples=[feature'];
Label=[1*ones(1,L1) 2*ones(1,L2) 3*ones(1,L3)];%row
[Alphay,SVs,Bias,Para,Ns]=osuSVMTrain(Samples,Label,Parameters,0);
svm_classpara{n}={Alphay SVs Bias Para Ns};
m1=m1+L1;
m2=m2+L2;
m3=m3+L3;
end
save traindata.mat Proaxis MIXimage_mean svm_classpara;
disp('程序结束')
%%%%%%%%%%%%%%%%%%%%%% SUBFUNCTION 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% This function is to realize fft of chips %%%%%%%%%%%%%%%%%%%%
function [chips]=subfunction1(mobandata)
for k=1:length(mobandata)
chp=log10(mobandata{k}(33:97,33:97)+1);%取出65*65 不加一得出的是负值
fft_chip=fftshift(abs(fft2(chp)));%傅列变换,并把频域中的图像移到轴坐标中心
fft_chip=fft_chip/max(max(fft_chip)); %幅度归一
cut_chip1=fft_chip(1:65,33:65);%取出一半幅频信息
X_chip1=reshape(cut_chip1,1,65*33);%形成列矢量
chips(k,:)=X_chip1(33:65*33);%去掉一半直流 ?
end
%%%%%%%%%%%%%%%%%%%%%%% SUBFUNCTION 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% This function is to separate the chip into subgroups %%%%%%%%%%%%%
function [sub_chips]=subfunction2(fw_data,chips);
Az1=0;
Az2=60; %*************参数方位组有关,10表示方位范围
for n=1:6 %每10度方位内形成一个模板,共有4个。%********参数方位组有关
fw1=find(fw_data>=Az1);
fw2=find(fw_data>Az2);
sub_chips(n)=abs(length(fw1)-length(fw2));%寻找10度方位内图象的个数。
Az1=Az1+60; %********参数方位组有关
Az2=Az2+60; %********参数方位组有关
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -