Message Boards Message Boards

0
|
3952 Views
|
5 Replies
|
3 Total Likes
View groups...
Share
Share this post:

Identify a weak and fast-moving pattern from raw images?

I am currently doing post-processing of a weak and fast-moving pattern (actually waves, if you are familiar with Schlieren Imaging...)

Now the problem is that, other than by directly showing the raw images and measure by hand, I have no good ways to visualize it neatly or extract any data from it (the main point of the post-processing is to find out the frequency! Or even more ambitiously, the velocity of the wave moving...)

In a nutshell, what I have in mind about the problem is that:

The patterns are weak, hence any operation of noise removal would hurt it

The background is uneven and noisy

The patterns move too quickly: within four or five frames the patterns would pass by the whole range of image

Here are an example of images: I have selected 3 that are representative.

First Second Third

For better understanding, I have made an animation with gif out of the results: Animated Image

POSTED BY: Sihe Chen
5 Replies

Thanks Henrik! This seems to make a huge advance. I will try and see whether any further processing could be made based on the current result.

POSTED BY: Sihe Chen

Thanks Daniel, but due to the noise and fast movement Fourier transformation is overwhelmed by the noise in the power spectrum...

POSTED BY: Sihe Chen

Hi Sihe Chen,

this might be just a first step; the basic idea is to emphasize vertical structures by using GradientOrientationFilter. So at least one has the impression that "something is passing by". In the following I am using the images from your animated gif, because this contains 5 images instead of only 3.

imgs0 = Import[
   "https://community.wolfram.com//c/portal/getImageAttachment?\
filename=Anim.gif&userId=1604256"];
imgs1 = ImageAdjust@*
    RemoveAlphaChannel@*(ColorConvert[#, "Grayscale"] &) /@ imgs0;
imgs2 = ImageAdjust@
     ImageFilter[MedianDeviation[Flatten[#]] &, #, 6] & /@ imgs1;
imgs3 = ImageApply[If[# > 1, 1, 0] &, 
     GradientOrientationFilter[Binarize[#, .3], 2]] & /@ imgs2;
imgs4 = ImageAdjust[Dilation[Erosion[Blur[#, 5], 2], 2]] & /@ imgs3

This gives:

enter image description here

I admit that this is not really satisfying. Regards -- Henrik

POSTED BY: Henrik Schachner

Maybe take a Fourier transform at every pixel? That is, treat each pixel value as a function of time and take the FT of a the sequence of image gray scale values at that pixel. Then average over all pixels. This can perhaps give an estimate of frequency and speed.

POSTED BY: Daniel Lichtblau

Thanks everyone for the possible help :P

POSTED BY: Sihe Chen
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract