1

根据 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) 无法适应边缘处的图像。仅过滤其邻居都可以包含在权重矩阵(或掩码)中的像素。

4

3 回答 3

1

您的程序有问题,编写 TDLMS 的正确方法是: • 过滤器:计算标量输出 Y(m,n), • 从所需的 D(m,n) 中减去输出 Y(m,n) n) 计算标量误差 e(m,n) • 更新滤波器权重

程序内部计算部分的正确做法如下:

对于 m=1+floor(Ns/2):M-floor(Ns/2)

for n=1+floor(Ns/2):N-floor(Ns/2)

对于 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);

        end

    end

e(m,n)=D(m,n)-Y(m,n);

        for l=1:Ns

        for k=1:Ns

         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

结束结束

于 2014-09-01T07:06:21.203 回答
0

我看到的第一个问题是您对结果、误差矩阵和权重的更新实际上从未更新。第一步是将 X 转换为 double,因此将第二行更改为:

X = cast(imread('noisySea.jpg'), 'double');

在进行此操作之前,请先了解一下并了解正在发生的事情。例如,不管 X 中有什么:

u*e(m,n)*X(m-floor(Ns/2)+l-1,n-floor(Ns/2)+k-1)0

你可以把它分解一下,看看:

u*e(m,n) 并查看它的行为是否适当。

当您引入对 X 的引用时,您最终会将精度降低到“小数”*“大数”为 0 的程度。

于 2013-04-30T14:21:16.750 回答
0

好的,还有几件事。我认为您指的是 Hadhoud 和 Thomas 在 1988 年 5 月号的 IEEE Transactions on Circuits and Systems 上的论文,第 35 卷。第 5 期。我发现至少还有几个错误,但我只看了几分钟的论文.

D(2:M,2:N)=X(2:M,2:N); % D is shifted version of X

您实际上并没有在这里进行移位,在论文中,X 和 Y 方向有 1 个像素的移位。

D(2:M,2:N)=X(1:M-1,1:N-1); % D is a shiftier version of X

他们还通过从 0 权重矩阵开始在 10 行原始图像上运行算法来初始化权重 W。

我也相信(还不是 100% 确定)你的体重更新是不正确的。您的权重在不断更新,这会在算法中引入一些奇怪的拖尾。根据我对论文的简短阅读,权重仅在您的 n 循环迭代时更新。权重也被缩放,使得它们的总和为 1,这保留了局部平均值。

于 2013-04-30T23:25:36.947 回答