主要观点:介绍了中值滤波器(及扩展的百分位数和秩滤波器)的实现方式,包括朴素算法、基于直方图算法、二叉树算法和 O(1)算法,比较了不同算法的时间复杂度和性能。
关键信息:
- 中值滤波器输出像素是其输入图像邻域的中值值,可推广为百分位数滤波器。
- 朴素算法计算中值滤波器需对每个输出像素独立计算邻域中值,排序需 O(n log n),平均部分排序为 O(n),对于小核较高效,大核较昂贵。
- 基于直方图算法通过计算待排序值的直方图来高效排序,对于 8 位图像复杂度为 O(k),适用于任意形状核,对于 16 位图像不太适用。
- 二叉树算法使用二叉搜索树或序统计树来计算中值,插入和删除值复杂度为 O(log n),对于 k×k 核复杂度为 O(k log k),需平衡树以减少节点遍历。
- O(1)算法基于 Huang 的直方图算法,为 8 位图像和方形核设计,可扩展到八角形核,但中间内存需求大。
重要细节: - scikit-image 和 DIPlib 早期版本使用朴素算法,DIPlib 下一个版本将包含更高效算法。
- 不同算法在不同图像和核大小下的性能表现不同,如 DIPlib 在 11 - 13 像素处切换算法,OpenCV 常数时间算法在 19 像素处生效等。
- 实验比较了不同 Python 库中中值滤波器的计算时间,包括单精度浮点数图像、8 位无符号整数图像和除以 25 的图像。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。