根据 Mohiy M. Hadhoud 的论文,我编写了一个 Matlab 程序来使用二维 LMS (TDLMS) 自适应算法实现图像背景估计。我用零初始化了权重矩阵 W、估计的输出矩阵 Y 和误差矩阵 e。支持区域为 5*5(窗口大小)。矩阵 D 是期望的输出,其与 Y 的差定义为误差矩阵 (e)。但是,在我运行程序之后,权重 W 和估计输出 Y 都为零。不知道是因为W和Y一开始都是零还是程序有问题。这是我的代码:
clear; close all;
X=imread('noisySea.jpg');
[M N]=size(X);
Ns=5; % 5*5 support region
u=5*10^(-8); % step size
Y=zeros(M,N); % predicted image
Y(1:Ns,1:Ns)=X(1:Ns,1:Ns);
D=zeros(M,N);
D(2:M,2:N)=X(2:M,2:N); % D is shifted version of X
e=zeros(M,N); % error matrix
W=zeros(Ns,Ns); % weight matrix
for m=1+floor(Ns/2):M-floor(Ns/2)
for n=1+floor(Ns/2):N-floor(Ns/2)
for l=1:Ns
for k=1:Ns
Y(m,n)=Y(m,n)+W(l,k)*X(m-floor(Ns/2)+l-1,n-floor(Ns/2)+k-1);
e(m,n)=D(m,n)-Y(m,n);
W(l,k)=W(l,k)+u*e(m,n)*X(m-floor(Ns/2)+l-1,n-floor(Ns/2)+k-1);
end
end
end
end
imshow(Y);
内部两次迭代用于计算点 (m,n) 处的 Y 值,而外部两次迭代遍历整个图像。经常使用诸如 m=1+floor(Ns/2) 之类的代码,因为权重矩阵 (5*5) 无法适应边缘处的图像。仅过滤其邻居都可以包含在权重矩阵(或掩码)中的像素。