基于核主成分分析的维纳滤波过程
大四汪毕业设计,根本没学过图像处理,参考网上程序编的,最后一部分是按公式自己写的滤波算子计算过程,没有逻辑错误但是没有图像,求大神指导程序如下:
clc;
close all;
%---------------图像读取录入------------------
img1(:,:)=double(imread('C:\Users\Administrator.PC-20141106WOFG\Documents\MATLAB\lena.jpg'));
img2(:,:)=imnoise(img1,'gaussian',0.003);
cov_size=size(img1,1);
train_num=cov_size;
%---------------核的选择----------------------
for i=1:cov_size
for j=1:cov_size
%kernel1(i,j)=sum(sum(img1(i,:).*img1(j,:)'));
K(i,j) =(img1(i,:)*img1(j,:)'+1)^0.7;
K(j,i) = K(i,j);
%kernel1(i,j)=exp(-((i-n1)^2)+(j-n1)^2)/(4*alf)/(4*pi*alf);%高斯核函数
end
end
unit = ones(cov_size, cov_size)/cov_size;
K_n = K - unit*K - K*unit + unit*K*unit;
=eig(K_n);%求取特征值和特征向量
e=real(diag(e));
v=v'; %此时每一行对应的是特征向量
=sort(-1*e'); %按数值大小排列
e=l1*(-1);
v=v(:,l2);
for i=1:cov_size,
v(:,i) = v(:,i)/(sqrt(e(i)));
end
%贡献值
dsum = sum(v);
dsum_extract = 0;
p = 0;
while( dsum_extract./dsum < 0.9)
p = p + 1;
dsum_extract = sum(v(1:p));
end
max_ev=p;
Q = zeros(1, max_ev);
Q = K_n * v(:,max_ev);
Wn=inv(Q'*Q);
Wn1=Wn*Q';
J=Q*Wn1;
imshow(J)
imshow(J, []) chybeyond 发表于 2015-4-27 15:10
imshow(J, [])
是我表达错了,不是说没有图像显示,而是结果不正常,应该是
Wn=inv(Q*Q');%480*480
Wn1=Wn*Q;%480*1
Wn2=Wn1'*img1(:,:);%1*480
计算滤波算子的部分不是很懂,按照文献写的只会生成一个列矩阵 我是自己改的生成了一个方阵,结果差别很大
学习中,帮顶。 狠青春2012 发表于 2015-4-28 08:48
学习中,帮顶。
别光顶啊 一起探讨下 给点建议
页:
[1]