微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为视频创建时间中值滤波器的更快方法 也检查

如何解决为视频创建时间中值滤波器的更快方法 也检查

我正在尝试为视频创建中值滤波器。目标是为每 5 帧创建一个图像,其像素值对应于 5 帧像素的中值。

我可以使用多个 for 循环来做到这一点,但我想要一种更快/更简单的方法来实现相同的结果。有什么帮助吗?

更新:

我尝试通过定义要应用中位数的轴来使用 np.median 函数。当我用较小的阵列测试它时,它工作得很好,但当我转换到图像时,它不起作用。

w = 5  # window
n = int(len(data)/w)  # new number of frames
fdata = np.zeros([n,len(data[0]),len(data[0][0])])

for i in range(0,n):
   it_data = data[ i*5 : 5*i+5 ]
   fdata[i] = np.median(it_data,axis=0)

我收到的错误在最后一行:

>>> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

解决方法

这里有 :)、abc 是帧(比方说灰度),您必须将它们堆叠起来,就好像它们是 RGB 组件一样(尝试与5,它将起作用),然后将中位数应用于外轴(参见 questionthis other)。

import numpy as np
import random

a = np.array(
    [[ random.randint(0,10) for i in range(3) ],[ random.randint(0,10) for i in range(3) ]])

b = np.array(
    [[ random.randint(0,10) for i in range(3) ]])

c = np.array(
    [[ random.randint(0,10) for i in range(3) ]])

print(a)
print(b)
print(c)
print('\n')

# batch = a[...,np.newaxis]
batch = np.stack((a,b,c))

print(batch.shape)
print(batch)

print('\n')

batch = np.median(batch,axis=0)

print(batch.shape)
print(batch)

print('\n...Test...')

print(
    np.median(
        (a[0,0],b[0,c[0,0])
    )
)

也检查

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。