Python对某些数据应用低通滤波器

时间:2019-01-26 09:43:01

标签: python matlab numpy opencv scipy

我有一个.txt文件,其中包含视频的某些帧差异。 该项目将使用这些帧差异和低通滤波器消除噪声并稳定视频。

Vibrated2.txt文件为:

0.341486, -0.258215
0.121945, 1.27605
-0.0811261, 0.78985
-0.0269414, 1.59913
-0.103227, 0.518159
0.274445, 1.69945
, ...

如何对这些数据应用低通滤波器?

我尝试过,但是没有用!

import cv2
import numpy as np
from scipy.signal import butter, lfilter

video= cv2.VideoCapture('Vibrated2.avi')
freq = (video.get(cv2.CAP_PROP_FPS))
cutoff = 5

data = np.loadtxt('Vibrated2.txt', delimiter=',')

b, a = butter(5, (cutoff/freq), btype='low', analog=False)
data = lfilter(b, a, data)

有帮助吗?有想法吗?

1 个答案:

答案 0 :(得分:0)

我不确定您的txt文件的结构如何,但是如果您想在帧差分输出上应用低通滤波器,我想您想使其成为二进制文件吗?

def icv_check_threshold(pixel_value, desired_minimum_value):
    if pixel_value < desired_minimum_value: 
        return False 
    else:
        return True

对于帧差异:

def icv_pixel_frame_differencing(frame_1, frame_2):
#  first convert frames to numpy arrays to make it easier to work with
    first_frame = np.asarray(frame_1, dtype=np.float32)
    second_frame = np.asarray(frame_2, dtype=np.float32)

#  then compute frame dimensions
    frame_width = int(first_frame[0].size)
    frame_height = int(first_frame.size/frame_width)

#  we then create a stock image for differencing output
    frame_difference = np.zeros((frame_height, frame_width), np.uint8)

   for i in range(0, frame_width - 1):
        for j in range(0, frame_height - 1):
        # compute the absolute difference between the current frame and first frame
            frame_difference[j, i] = abs(first_frame[j, i] - second_frame[j, i])
        # check if the threshold = 25 is satisfied, if not set pixel value to 0, else to 255
        # comment out code below to obtain result without threshold / non-binary
            if icv_check_threshold(frame_difference[j, i]):
                frame_difference[j, i] = 255
            else:
                frame_difference[j, i] = 0

    cv2.imwrite("differenceC.jpg", frame_difference)
    cv2.imwrite("frame50.jpg", first_frame)
    cv2.imwrite("frame51.jpg", second_frame)
    return frame_difference

我希望这会有所帮助。另外,这里a link是我正在处理的具有帧差异的项目。