Re: FFT of a noisy image with weak periodic information

*To*: mathgroup at smc.vnet.net*Subject*: [mg126773] Re: FFT of a noisy image with weak periodic information*From*: "Kevin J. McCann" <kjm at KevinMcCann.com>*Date*: Thu, 7 Jun 2012 05:16:13 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <jqn5gv$hd3$1@smc.vnet.net>

I would suggest that you might wish to use a low pass filter that is a little "softer" so that you avoid any ringing. In any event, here is a simple way to threshold as you describe: data = Table[i j, {i, -5, 5}, {j, -5, 5}]; data // MatrixForm thresh=0; dataThresh = Map[(If[(# < thresh), thresh, #] &), data, {2}]; dataThresh // MatrixForm Kevin On 6/6/2012 4:48 AM, Dave Martin wrote: > I'm trying to accomplish what should be a relatively simple frequency > domain filtering of a noisy input image with with some weak, periodic > signals (a low dose transmission electron microscope image of some > organic crystals). Using the commands below, I've been able to input > the image (x), convert it to data (xi), and calculate the FFT (fx). > Now what I want to do is to set the FFT to zero for all values below > some threshold, and then inverse transform back to a filtered image. > My stumbling block is a simple means to set the values of the array fx > to zero below some threshold, before I perform InverseFourier. > > x=Import["data.tif"] (*import the file as an image*) > xi=ImageData[x]; (*convert image to array data*) > x1=xi[[All,All,1]]; (*extract one of the three color channels from > the RGB image*) > fx=Fourier[x1]; (*calculate the FFT of x1*) > > Some other commands I've found useful... > > pfx=fx*Conjugate[fx]; (*calculate power spectrum = fx^2*) > n=Length[pfx] (*determine size of arrays*) > pxr=RotateRight[pfx, {n/2,n/2}]; (*put origin in center of PS > image*) > pi = Image[pxr] (*convert PS to image for display*) > > Inverse transforming... > > rx=Chop[InverseFourier[fx]]; (*convert fx back to a real space data > set rx*) > ri=Image[rx] (*convert rx to an image ri for > display*) > >