size = 128;
imagesize = size*2 + 1;
total[mat_] := Total[Total[mat]];
normalize[mat_] := mat/total[mat];
(* load data, make ft, inverse ft *)
image = ImageResize[ExampleData[{"TestImage", "Lena"}], imagesize]
data = ImageData[image];
col = First[ImageDimensions[image]]
row = Last[ImageDimensions[image]]
px = col*row;
f = Partition[Take[Flatten[data], {2, px*3, 3}], col];
fourier = Fourier[f, FourierParameters -> {0, 1}];
intensity = total[f];
Image[Abs[
RotateRight[fourier, {IntegerPart[row/2], IntegerPart[col/2]}]]]
Image[Abs[InverseFourier[fourier]]]
(* load convolution kernel in fs *)
blurfunction =
RotateRight[
Transpose[RotateRight[GaussianMatrix[{size, 30}], size]], size];
ListPlot3D[blurfunction, PlotRange -> All]
(*blur image, comparison with original*)
resetIntensity[mat_] := normalize[mat]*intensity;
blurred = fourier*blurfunction;
blurredImage = Image[resetIntensity[
Abs[InverseFourier[blurred]]
]]
(*undo blur*)
reconstructed = blurred/blurfunction;
Image[resetIntensity[
Abs[InverseFourier[reconstructed]]
]]