【问题标题】:How to find mode in a numpy array with images?如何在带有图像的 numpy 数组中查找模式?
【发布时间】:2019-12-25 19:29:28
【问题描述】:

假设我们有一个 np.array 包含一组灰度图像。如何找到每个像素位置的模式?通常 numpy 有 np.mean() 和 np.median() 但不包括模式。我尝试了 scipy 的 stats.mode() 但速度很慢。我也对 axis 术语感到困惑。希望有人也能解释一下(例如:axis=0、axis=1 等)

Input:
[[ [[1,2][3,2]] [[4,3][5,3]] [[9,5][4,6]] ],
 [ [[1,3][3,3]] [[2,7][1,4]] [[4,1][1,7]] ],
 [ [[1,5][3,3]] [[4,3][1,6]] [[6,4][5,6]] ]
]

Output:
[[ [[1,2][3,3]] [[4,3][1,3]] [[4,1][1,6]] ]]

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    给定的轴设置采用指标(在您的案例模式下)的轴。该轴被折叠成一个值。

    我认为您的示例数组可能格式错误,所以这里是另一个示例:

    假设您有 3 张 800x600 灰度图像,im0im1im2。它们的形状由im0.shape 给出,是(800, 600)。我们是这样把它们放在一起的:

    ims = numpy.array([im0, im1, im2])
    print(ims.shape)  # -> (3, 800, 600)
    

    现在假设我们想要 3 张图像中每个像素的平均值。然后我们想在轴 0 上取平均值。这个轴被折叠成平均值,留下 平均图像

    mean_im = numpy.mean(ims, axis=0)
    print(mean_im.shape)  # -> (800, 600)
    

    我们可以对scipy.stats.mode 做同样的事情,但是注意模式和计数都会返回,所以我们必须这样做:

    mode, count = stats.mode(ims, axis=0)
    

    【讨论】:

    • 以下输出会是什么意思:mean_im = numpy.mean(ims, axis=1) print(ims.shape) ?
    • 然后你在每个图像的 x 坐标上取平均值。换句话说,这会将列合并为一列,或者您可以说您取每张图像中每一行的平均值。形状将是 (3, 600) - 每个图像中的每一行都有一个值。
    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多