It's still not clear what you mean by 'simple "gradient"' - that could refer to a variety of things.
One possibility is that you mean just the differences between adjacent values - what you'd get by computing
diff(im, 1, 2) % x differences - x component of gradient
diff(im, 1, 1) % y differences - y component of gradient
for example. You can do a similar operation in the frequency domain using the fact that the differentiation operator transforms to multiplication with ik (where k is the transform variable). The code looks like this for differentiating with respect to x:
im = imread('pout.tif'); % data
% compute differencing operator in the frequency domain nx = size(im, 2); hx = ceil(nx/2)-1; ftdiff = (2i*pi/nx)*(0:hx); % ik ftdiff(nx:-1:nx-hx+1) = -ftdiff(2:hx+1); % correct conjugate symmetry
% compute "gradient" in x using fft g = ifft2( bsxfun(@times, fft2(im), ftdiff) ); imshow(g, ); % see result
As you can see, it's simpler to do it in the space domain. Why use the FFT?
Is that plain "gradient", or is it "conjugate gradient" ?
(I notice you posted the same question to some other locations, all of which seem to have replied asking for clarification.)