www.pudn.com > SVM.rar > svrtest.m


function [I]=svrtest(OriginalI,IntI,A,B,C,D) 
%计算SVR,输入原始图像和一维化后的水印图像,输入出随机训练矩阵下标和测试矩阵下标以,输出训练值替换的图像 
%clear 
%close all 
 
%--------------------------------------------------- 
% 产生训练样本与测试样本 
I=im2double(OriginalI); 
IP=I; 
m=size(IntI,1); 
xm=100; 
 
for i=1:xm 
    x1=I(A(1,i),B(1,i)); 
    n1=[I(A(1,i)-1,B(1,i)-1) I(A(1,i)-1,B(1,i)) I(A(1,i)-1,B(1,i)+1) I(A(1,i),B(1,i)-1) I(A(1,i),B(1,i)+1) I(A(1,i)+1,B(1,i)-1) I(A(1,i)+1,B(1,i)) I(A(1,i)+1,B(1,i)+1)]'; 
    for j=1:8 
    xx(1,i)=x1; 
    nx(j,i)=n1(j,1); 
    end 
end 
 
%while((C==A)&&(D==B)) 
%    C=randint(1,100,[0,511]); 
%    D=randint(1,100,[0,511]); 
%end 
for i=1:m 
    x2=I(C(1,i),D(1,i)); 
    n2=[I(C(1,i)-1,D(1,i)-1) I(C(1,i)-1,D(1,i)) I(C(1,i)-1,D(1,i)+1) I(C(1,i),D(1,i)-1) I(C(1,i),D(1,i)+1) I(C(1,i)+1,D(1,i)-1) I(C(1,i)+1,D(1,i)) I(C(1,i)+1,D(1,i)+1)]'; 
    for j=1:8 
    xy(1,i)=x2; 
    ny(j,i)=n2(j,1); 
    end 
end 
 
 
xn_train = nx;          % 训练样本,每一列为一个样本 
dn_train = xx;          % 训练目标,行向量 
 
xn_test = ny;           % 测试样本,每一列为一个样本 
dn_test = xy;           % 测试目标,行向量 
 
%--------------------------------------------------- 
% 参数设置 
 
trnX = xn_train'; 
trnY = dn_train'; 
tstX = xn_test'; 
tstY = dn_test'; 
 
global p1 ; 
ker = 'rbf';        % 核函数 k = exp(-(u-v)*(u-v)'/(2*p1^2)) 
p1 = 10;             % p1 is width of rbfs (sigma)基函数宽度 
C1 = 1;             % 折衷系数,惩罚因子 
 
%--------------------------------------------------- 
% 训练与测试 
 
[nsv,beta,bias] = svr(trnX,trnY,ker,C1);         % 训练 
tstY1 = svroutput(trnX,tstX,ker,beta,bias);     % 测试 
 
%--------------------------------------------------- 
% 结果作图 
 
figure,plot(1:length(tstY),tstY,'r+:',1:length(tstY1),tstY1,'bo:') 
title('+为真实值,o为预测值') 
 
for i=1:m 
    I(C(1,i),D(1,i))=tstY1(i,1); 
end 
%imshow(I); 
%psnr=PSNR(IP,I);