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

Posted 2 months ago
447 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 2 months ago
 Thanks everyone for the possible help :P
Posted 2 months 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 2 months 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