在matlab中实现智能递归算法

时间:2012-01-02 11:27:46

标签: algorithm image matlab image-processing

我正在引用以下paper并尝试实现matlab中给出的算法

唯一的问题是我如何找到有噪声的像素,即带脉冲噪声的像素

X似乎是我必须计算的图像中的脉冲像素

_

____________________________________________ 
Input – Noisy Image h 
_______________________________________________ 
Step 1: Compute X 
             for every pixel repeat steps from 2 to 7 
Step 2: Initialize w = 3 
Step 3: If X(i,j) ≠ Impulse pixel 
                 goto step 7  
Step 4: ∆i,j = { h(i1,j1) | i-(w-1)/2 ≤ i1 ≤ i+(w-1)/2,  
                                                j-(w-1)/2 ≤ j1 ≤ j+(w-1)/2} 
             b=no. of  black pixels in the window 
             w=no. of white pixels in the window 
Step 5: If ∆i,j ≠ NULL 
                    p(i,j) = mean(∆i,j
) 
                    d(i,j) = | h(i,j) – p(i,j) | 
            else   if (w < wmax) 
                           w=w+2 
                           goto step 4 
           else   
                     if (b>w) 
                           h(i,j)=0 
                    else 
                           h(i,j)=255 
Step 7: Goto next pixel 
Step 8: Calculate threshold t, from detailed coefficient  
                  matrix d 
            for every pixel 
Step 9: If (d(i,j)>t) 
                    h(i,j)=p(i,j) 
____________________________

编辑:要实现PSM或中值滤波器方法,我们 需要设置一些参数和阈值。这个 阈值取决于图像和噪声 密度。因此,要恢复我们需要检查的不同图像 一系列阈值并找出最佳阈值。所以,在 我们提出的算法我们删除了定义阈值的需要。该算法是智能的并且确定 阈值自动。

2 个答案:

答案 0 :(得分:2)

您尝试实施的文章显然写得很糟糕...... 例如,在算法w中意味着两件事:窗口的大小和白色像素的数量!!!

步骤1和7都是指同一个循环。

无论如何,对我而言,“脉冲像素”是所有像素a,它们等于0或255.

基本上,它们是“盐和胡椒”噪音的一部分。

基本上,您可以通过以下方式找到它们:

[impulsepixelsY,impulasPixelX]=find((im==0)|(im==255));

答案 1 :(得分:1)

从纸上看,似乎“脉冲像素”只是嘈杂的像素,在盐和光的情况下。胡椒噪音。此外,似乎该算法提供了“智能”机制,以在噪声像素的值高于阈值(其自适应地计算)时计算噪声像素的去噪值。

那么,如果“如果X(i,j)≠脉冲像素”呢?嗯,显然,作者假设知道(!)哪些像素是嘈杂的(!!),这使得整个事情相当荒谬,因为这个信息几乎不可能知道。

我还可以补充一点,论文中提出的相当惊人的结果很可能是由于这个事实。

P.S。关于&lt;“脉冲像素”是所有像素a等于0或255>的论点,这是错误的。具有0或255强度值的像素集包括噪声像素以及恰好具有这样的值的正确像素。在这种情况下,算法很可能会崩溃,因为它也会对健康像素进行去噪。