南方有嘉木 发表于 2015-4-26 16:01

基于核主成分分析的维纳滤波过程

大四汪毕业设计,根本没学过图像处理,参考网上程序编的,最后一部分是按公式自己写的滤波算子计算过程,没有逻辑错误但是没有图像,求大神指导
程序如下:
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)



chybeyond 发表于 2015-4-27 15:10

imshow(J, [])

南方有嘉木 发表于 2015-4-28 08:44

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

学习中,帮顶。

南方有嘉木 发表于 2015-4-28 14:26

狠青春2012 发表于 2015-4-28 08:48
学习中,帮顶。

别光顶啊 一起探讨下 给点建议
页: [1]
查看完整版本: 基于核主成分分析的维纳滤波过程