Skip to content

Instantly share code, notes, and snippets.

@gabaruga
Last active May 12, 2024 11:02
Show Gist options
  • Save gabaruga/f9dc2ed78d129e22f31004d0671dd19a to your computer and use it in GitHub Desktop.
Save gabaruga/f9dc2ed78d129e22f31004d0671dd19a to your computer and use it in GitHub Desktop.
import os
from glob import glob
import re
import numpy as np
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
# get properly sorted images
data_path = r'E:\bg-sugar'
image_paths = sorted(glob(f"{data_path}/*.png"), key=lambda x:float(re.findall("(\d+)",x)[0]))
def get_mask(frame1, frame2, kernel=np.array((9,9), dtype=np.uint8)):
""" Obtains image mask
Inputs:
frame1 - Grayscale frame at time t
frame2 - Grayscale frame at time t + 1
kernel - (NxN) array for Morphological Operations
Outputs:
mask - Thresholded mask for moving pixels
"""
frame_diff = cv2.subtract(frame2, frame1)
# blur the frame difference
frame_diff = cv2.medianBlur(frame_diff, 3)
mask = cv2.adaptiveThreshold(frame_diff, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY_INV, 11, 3)
mask = cv2.medianBlur(mask, 3)
# morphological operations
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
return mask
frame = 181
for idx in range(frame-60, frame):
img1_rgb = cv2.cvtColor(cv2.imread(image_paths[idx]), cv2.COLOR_BGR2RGB)
img2_rgb = cv2.cvtColor(cv2.imread(image_paths[idx+1]), cv2.COLOR_BGR2RGB)
# convert to grayscale
img1 = cv2.cvtColor(img1_rgb, cv2.COLOR_RGB2GRAY)
img2 = cv2.cvtColor(img2_rgb, cv2.COLOR_RGB2GRAY)
# compute grayscale image difference
grayscale_diff = cv2.subtract(img2, img1)
kernel = np.array((9,9), dtype=np.uint8)
mask = get_mask(img1, img2, kernel)
fig, ax = plt.subplots(1, 3, figsize=(25, 25))
ax[0].imshow(img2_rgb)
ax[0].set_title(f'Frame {idx+1}')
ax[1].imshow(grayscale_diff*50) # scale the frame difference to show the noise
ax[1].set_title(f'Frame Difference {idx+1}-{idx}')
ax[2].imshow(mask, cmap='gray')
ax[2].set_title("Motion Mask")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment