Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gaussian_filter of long videos error #17

Open
gabriel-ing opened this issue Feb 13, 2023 · 3 comments
Open

gaussian_filter of long videos error #17

gabriel-ing opened this issue Feb 13, 2023 · 3 comments
Labels
bug Something isn't working

Comments

@gabriel-ing
Copy link
Owner

There appears to be an error with openCV gaussian_filter causing an error with my filtering. With one video with >900 frames, the gaussian_filter errored with:


AxisError Traceback (most recent call last)
Cell In[6], line 2
1 cc=vid.clip_contrast()
----> 2 cc = cc.gaussian_filter(3)
3 cc = cc.make_scalebar()
4 cc = cc.convert_to_8bit()

File ~/opt/anaconda3/envs/Test/lib/python3.10/site-packages/SimpliPyTEM/MicroVideo_class.py:1222, in MicroVideo.gaussian_filter(self, kernal)
1220 #print(kernal)
1221 swapped = cv.GaussianBlur(swapped, (kernal,kernal), 0)
-> 1222 swapped = np.swapaxes(swapped, 0, 2)
1224 filtered_object = deepcopy(self)
1225 filtered_object.frames = swapped

File <array_function internals>:200, in swapaxes(*args, **kwargs)

File ~/opt/anaconda3/envs/Test/lib/python3.10/site-packages/numpy/core/fromnumeric.py:594, in swapaxes(a, axis1, axis2)
550 @array_function_dispatch(_swapaxes_dispatcher)
551 def swapaxes(a, axis1, axis2):
552 """
553 Interchange two axes of an array.
554
(...)
592
593 """
--> 594 return _wrapfunc(a, 'swapaxes', axis1, axis2)

File ~/opt/anaconda3/envs/Test/lib/python3.10/site-packages/numpy/core/fromnumeric.py:57, in _wrapfunc(obj, method, *args, **kwds)
54 return _wrapit(obj, method, *args, **kwds)
56 try:
---> 57 return bound(*args, **kwds)
58 except TypeError:
59 # A TypeError occurs if the object does have such a method in its
60 # class, but its signature is not identical to that of NumPy's. This
(...)
64 # Call _wrapit from within the except clause to ensure a potential
65 # exception has a traceback chain.
66 return _wrapit(obj, method, *args, **kwds)

AxisError: axis2: axis 2 is out of bounds for array of dimension 2

@gabriel-ing
Copy link
Owner Author

The error here is coming from microvideo:

1221 swapped = cv.GaussianBlur(swapped, (kernal,kernal), 0)
-> 1222 swapped = np.swapaxes(swapped, 0, 2)
1224 filtered_object = deepcopy(self)
1225 filtered_object.frames = swapped

The issue is the cv.GaussianBlur is returning a 2 dimensional array rather than a 3D array. leading to an Axis error

@gabriel-ing
Copy link
Owner Author

Further investigation suggests its caused by having too many frames of the video, for example:

arr = np.random.rand(1500,1500,500)
g = cv.GaussianBlur(arr, (3,3), 0)

Does not error, however:

arr = np.random.rand(1500,1500,500)
g = cv.GaussianBlur(arr, (3,3), 0)

Raises an error.

Weirdly, performing this here raised an error rather than returning a 2D array, but I assume that reducing the number of frames will still work. Certainly all the videos with fewer frames I have used have worked fine.

@gabriel-ing
Copy link
Owner Author

gabriel-ing commented Feb 13, 2023

When I first wrote the function, I filtered each frame individually in a big loop, the same way the median filter works, this presumably is the way to bipass this error. The question is, how big a speed loss is this?

If there is a major speed loss I can always use an exception to catch it, something like:
`

    try:
          swapped = cv.GaussianBlur(swapped, (kernal,kernal), 0)
           swapped = np.swapaxes(swapped, 0, 2)
    except:   ***I would like to put the specific error here but the openCV error I'm getting is unnamed
 
    for frame in frames:
       GaussianBlur(frame)

`
etc...

@gabriel-ing gabriel-ing added the bug Something isn't working label Feb 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant