繁体   English   中英

图像处理中的二维最小均方滤波器(背景估计)

[英]Two Dimensional Least Mean Square filter in Image Processing (Background Estimation)

根据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值,而外部的两次迭代遍历整个图像。 由于权重矩阵(5 * 5)无法适合边缘的图像,因此经常使用诸如m = 1 + floor(Ns / 2)之类的代码。 仅过滤其邻居可以全部包含在权重矩阵(或掩码)中的像素。

您的程序有问题,对TDLMS进行编程的正确方法是:•过滤器:计算标量输出Y(m,n),•从所需的D(m)中减去输出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

结束

我看到的第一个问题是您对结果,错误矩阵和权重的更新从未真正更新过。 第一步是将X强制转换为双精度,因此将第二行更改为:

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的程度。

好,还有几件事。 我认为您指的是1988年5月出版的IEEE Transactions on Circuits and Systems,第35卷上的Hadhoud和Thomas的论文。第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,从而保留了局部平均值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM