# 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 itThe background is uneven and noisyThe patterns move too quickly: within four or five frames the patterns would pass by the whole range of imageHere are an example of images: I have selected 3 that are representative. For better understanding, I have made an animation with gif out of the results:
5 Replies
Sort By:
Posted 19 days ago
 Thanks everyone for the possible help :P
Posted 18 days ago
 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 18 days ago
 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:I admit that this is not really satisfying. Regards -- Henrik