中值滤波器一个接一个

信息处理 图像处理 理论
2021-12-30 21:48:24

通过在 3x3 窗口中执行中值滤波对图像进行操作。通过再次在 3x3 窗口中执行中值滤波对生成的图像进行操作。可以从单个中值滤波中获得结果图像吗?

我最初的想法是可以用正确的面具来完成。可能是中位数旁边的中位数。但我不确定。

3个回答

答案是不:

请参阅以下从 1 到 81 的数字重新排列。在左侧情况下,3x3 中位数的 3x3 中位数将是

中位数([77, 72, 67, 62, 57, 52, 47, 37]) = 57,

在正确的情况下中位数

([5, 15, 23, 32, 41, 50, 59, 68, 77]) = 41

而对于这两种情况,整个 9x9 块的中位数都是 41。 在此处输入图像描述

好的,这是我的 Hagit Hal-or 教授的回答:

如果有这样的面具,那么它一定是 5x5。
一个反例表明这是不可能的。
考虑图像的 5x5 区域:我们用值 0...0,1,2...2(12 个 0 和 12 个 2)填充它,
该区域的 5x5 中位数为 1,无论您将数字放在哪里。
现在我们构建 5x5 区域,这样如果我们在中位数上应用中位数,我们就不会得到 1。
设置以下内容:

1 0 0 x x
0 0 0 x x
0 0 0 x x
x x x x x
x x x x x 

其中 x 是其余的数字。
带中位数的第一遍将左上角的 3x3 设置为 0,因此 1 被“丢失”,任何
放置其余数字的顺序都不会将 1 带回来。因此,所有其他
区域的中位数将导致 0 或 2。因此,中位数的第二遍将只查看 0 和 2 的数字,因此不会导致 1。

谢谢大家的帮助

是的,对不起,我说的是平均而不是中位数是错误的。

让我们看看中值过滤会发生什么。假设您的过滤例程从 TOP 行开始逐行处理图像。还假设它从左到右进入每一行。您可以将其定义为按任何顺序运行,它不会改变我在这里尝试解释的这一点。

在这样的行走中,它会逐个像素地创建新图片,这些图片来自中位数 3 上的 3。

1)当我们进行第一次中值滤波时,位于上方第一行的像素可以移动到第二行(在结果图像中)而不是第三行(因为 3 上的中值 3 只能“推动”像素一个距离) .

2)当我们进行第二次中值滤波时,这个像素可以再向下移动一步 - 到第三行。

但是对于想要向上移动的像素的行进距离呢?例如,在开始时,该像素位于第五行。这个像素的距离只有 1 并且不多,因为 out 例程是从上到下逐行进行的。

这只是算法的属性。

现在,您将需要使用更大的中值掩码。这样的面具会给你从下到上更长的从下到上的旅行距离,而不是 1!这会将像素带到无法使用 3 on 3 中位数移动的地方,就像我们在第一种情况下所做的那样!这意味着无论你采用多大的中位数,都会出现这样的问题。

您可以为中间例程定义任何工作顺序,问题会出现,但方向不同(上下左右)。

主线:不可能用更大的中值掩码做同样的工作,因为它会让像素更自由地移动,然后当应用两个后续的 3 on 3 中值滤波器时,它们就有了。

好吧,我希望我已经足够清楚了。只是一个思考的方向。问题可能是我的解决方案并没有真正连接到图像处理,而更多地连接到算法的一些程序特征。