具有可变窗口大小的快速形态侵蚀/膨胀

信息处理 图像处理 算法 形态操作
2022-01-29 03:18:39

我想对图像执行以下操作:考虑每个像素周围的方形窗口,在这个窗口中找到最大值,然后用这个最大值替换中心像素值。如果我在每个像素周围考虑一个方形窗口,这将成为形态膨胀操作(带有一个方形结构元素)。n×nn×n

在我的工作中,我需要在每个像素周围有不同大小的窗口,即我可能需要一个窗口和一个窗口n×nAm×mB

问题:

(1) 这个操作有名字吗?它被广泛使用吗?

(2) 您知道执行此操作的任何快速算法吗?

相关信息:对于固定的窗口大小,确实存在一种快速算法,例如以下论文中的算法 1(实际上,无论窗口大小如何,每个像素只需要恒定数量的操作):

Chaudhury, KN “用于双边滤波和非局部均值的 Shiftable O(1) 算法的加速”。IEEE 图像处理汇刊,22.4 (2013): 1291-1300。

2个回答

使用掩码的技巧是,如果窗口向左移动一格,则仅添加一行并删除一行。因此,例如可以更快地计算 5x5 窗口的平均值,就好像所有 25 个值都需要相加并再次相除。

在腐蚀或膨胀中,如果要存储每一行​​的最大值,则可以使用这一事实。然后只需要一个新行的最大值以及所有行之间的比较。但是我想没有人这样做,因为开销很大,而且大窗口需要额外的空间来容纳每行的最大值......

但是,您的问题甚至无法使用它,因为窗口大小正在发生变化。我认为这些变化是随机的。因此,没有比从一个像素移动到另一个像素并应用不同的窗口大小更快的方法了。

但是为什么有人会为不同的像素使用不同的窗口呢?

在 MATLAB 中很容易做到(https://www.mathworks.com/help/images/sliding-neighborhood-operations.html

f = @(x) sqrt(min(x(:)));
I2 = nlfilter(I,[3 3],f);