• opencv最小值滤波(不局限于图像)


            opencv中有较多滤波函数,如中值滤波等,但没有最大值和最小值滤波。本文将介绍用python numpy实现最小值滤波功能,可以说是不需要借助opencv即可实现。

    1 定义函数minBlur

            定义最小值滤波的函数为minBlur,包含3个参数,分别如下所示:

            (1)image:输入图像,array类型。

            (2)kernel:最小值范围,tuple类型,第一个元素表示x方向取最小值的范围,第二个元素表示y方向取最小值的范围。

            (3)limit:需要最小值滤波的元素,tuple类型,如(a,b)表示像素值范围在[a, b]的像素才进行最小值滤波。

            该函数做到了以下几个兼容性:

            (1)适合灰度图片或者RGB图片。

            (2)不局限于图像的数组,array。

            (3)适合任意数量的通道数。

    2 参考程序

    1. import numpy as np
    2. def minBlur(image, kernel=(3, 3), limit=(0, 255)):
    3. """
    4. Parameters
    5. ----------
    6. image : array, 输入矩阵或数组.
    7. kernel : tuple or list, optional
    8. 分别为x、y方向上的最小值取值区间范围. The default is (3, 3).
    9. limit : tuple or list, optional
    10. 指定进行最小值滤波的像素范围. The default is (0, 255).
    11. Returns
    12. -------
    13. image_c : array,处理后矩阵或数组。
    14. """
    15. image_c = image.copy()
    16. if len(image_c.shape) == 2:
    17. image_c = image_c[:, :, np.newaxis]
    18. h, w, c = image_c.shape
    19. image_c1 = image_c.copy()
    20. for i in range(h):
    21. for j in range(w):
    22. x1 = max(j-kernel[0]//2, 0)
    23. x2 = min(x1 + kernel[0], w)
    24. y1 = max(i-kernel[1]//2, 0)
    25. y2 = min(y1 + kernel[1], h)
    26. for k in range(c):
    27. if image_c[i, j, k] >= limit[0] and image_c[i, j, k] <= limit[1]:
    28. sub_img = image_c1[y1:y2, x1:x2, k]
    29. image_c[i, j, k] = np.min(sub_img)
    30. if len(image.shape) == 2:
    31. image_c = image_c.reshape(h, w)
    32. return image_c
    33. if __name__ == '__main__':
    34. np.random.seed(1)
    35. x = np.random.randint(0, 256, (10, 10))
    36. x[x>150] = 255
    37. y = minBlur(x)
    38. print('x:\n', x)
    39. print('y:\n', y)

    3 测试结果 

     更多三维、二维感知算法和金融量化分析算法请关注乐乐感知学堂”微信公众号,并将持续进行更新。

  • 相关阅读:
    (CVPR 2019) 3D-SIS: 3D Semantic Instance Segmentation of RGB-D Scans
    大数据培训课程之RDD传递一个属性
    GEE开发之Sentinel-2计算NDVI和数据分析
    老卫带你学---leetcode刷题(221. 最大正方形)
    Linux 磁盘管理,分区,文件系统
    leetcode做题笔记151. 反转字符串中的单词
    white-space几种属性的用法(处理空格)
    ardupilot 关于设备车Rover的学习《2》------如何解锁
    k8s集群安装部署单机MySQL(使用StorageClass作为后端存储)
    系列二、Lock接口
  • 原文地址:https://blog.csdn.net/suiyingy/article/details/125413266