Python применить фильтр низких частот для некоторых данных - PullRequest
0 голосов
/ 26 января 2019

У меня есть файл .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 голосов
/ 28 января 2019

Я не совсем уверен, как структурирован ваш текстовый файл, но если вы хотите применить фильтр нижних частот к выходу разности кадров, я думаю, вы хотите сделать его двоичным?

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

Надеюсь, это поможет. Также здесь ссылка на проект с разницей кадров, над которым я работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...