我正在引用以下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或中值滤波器方法,我们 需要设置一些参数和阈值。这个 阈值取决于图像和噪声 密度。因此,要恢复我们需要检查的不同图像 一系列阈值并找出最佳阈值。所以,在 我们提出的算法我们删除了定义阈值的需要。该算法是智能的并且确定 阈值自动。
答案 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强度值的像素集包括噪声像素以及恰好具有这样的值的正确像素。在这种情况下,算法很可能会崩溃,因为它也会对健康像素进行去噪。