Question

I have a texture image, which has some local shape distribute evenly or unevenly. I want to compute the period of these local shapes by FFT. Can anybody help me?

Here is the image: enter image description here

Magnitude after FFT: enter image description here

Phase after FFT: enter image description here

Was it helpful?

Solution

The magnitude is what you need. The strong East-West lines in the FFT are the result of a repetition in that direction. Indeed, when you look at the actual texture, you see that the bands indeed repeat.

There's a limited structure orthogonal to those bands, as we can see from the fact that we have 3 evenly spaced East-West lines.

The 3 lines aren't exactly East-West; they're rotated by about 10 degrees clockwise. That's also true of the initial image, where the bands are also rotated. The period of the texture is given by the distances between the 3 lines as well as the intensity changes along those lines.

OTHER TIPS

Adding to the discussion of reducing the data to point sets to corners, you would need edges or another method to do that.

There is an edge detector which uses the principles of fourier transforms and monogenic filters operating in the frequency domain, transformed to the spatial domain.

The work of Peter Kovesi on phase congruency is available http://www.peterkovesi.com/matlabfns/PhaseCongruency/phasecongmono.m

The code produces a phase angle image which can be used with a thinned phase congruency image to find edges.

If you set the parameters to allow more "noise" the smaller textures are picked up too.

NOTE: I'm trying to consolidate information I added in the next comments and what got added as a separate answer, that should both be part of this so there will be some redundancy with those:

if you're confused about FFTs, can read about them as 1 D signals to understand spatial domain and frequency domain. Then you might be interested in topics such as phase congruency which attempt to look at the frequency of signals to design frequency domain filters which operate on the spatial domain. With respect to your texture question, I think reducing it to keypoints such as corners reduces the information to significant spatial information. I recently used phase congruency to find "noise" in my image of a building, then made a representative patch of the roof texture out of that, then made a frequency domain filter from that and applied it to the spatial domain image. Application of color and maybe intensity filters in the spatial domain then led to a decent finding of the roof texture throughout the image....so FFT of sparse significant points is probably more helpful to you in answering your questing.

The fourier or fast fourier transforms are superpositions of patterns of spacing. Your image has a point for each pixel and that results in the superposition of many many signals in your FFT. You probably want to reduce the image to corners or junctions and then make an FFT image of those points. For example, make a FFT from an image of a simple grid of points (all zeroes except your points having values > 0). You can see that a vertical slice of horizontal slice through the FFT image will show you the components of spacing present in the original image. You can rotate the grid of points to see how quickly the FFT becomes a more complex superposition.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top