Message Boards Message Boards

GROUPS:

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

Posted 19 days ago
188 Views
|
5 Replies
|
3 Total Likes
|

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

5 Replies

Thanks everyone for the possible help :P

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.

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

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

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.

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