Instead of
normal picture > edit > finished picture
we will donormal picture > (Fourier Transform - transfer to frequency space) > edit > (Inverse Fourier Transform - leave frequency space) > finished picture
The Fourier Transform looks for patterns in the image. Each point in frequency space represents a sinusoidal pattern, with the persistence of that pattern as the amplitude at that point. Edges (or a rapid change in intensity) in an image which do not repeat periodically are represented by low frequency values. Smooth areas with a little bit of noise varying across it seem to repeat with a high frequency. These types of filters are pretty easy to implement, we just have to use m(find(r>0.5)) for a high pass filter, replace the > with a < for a low pass filter, and combine them for a band pass filter.
The following images are arranged according to (top) image, (bottom)frequency space, (left)original image, (middle) filtered components, (right) resulting image.
High pass filters. It can be used to smoothen edges. Try using a highpass filter on your picture - your pores will disappear! |
Low pass filter. Can grab edges. The resulting photo now emphasizes the changes in the original image. |
Band pass filter. I'm not really sure how this is normally used, but it was able to (coincidentally) grab the weave of the painting (middle). |
The task for this activity is to remove repeating patterns from images.
Specifically, the horizontal lines from
Lunar orbiter image with lines |
Painting by ___ with a noticeable weave pattern |
- Go to the frequency space in Scilab.
- Save the FT
- Open the FT in an image editing program(Gimp).
- Create a white layer on top.
- Add black/gray dots on top of the high amplitude points in the FT (you have to lower the opacity of the blank layer).
- Save.
- Open it up in Scilab
- Multiply the filter with the FT of the original image.
- Take the inverse FT.
- You have your finished image. :D
But since my Gimp kept on crashing :( I decided to do it purely in Scilab instead.
I took a look at the histogram of the natural logarithm of the FT amplitudes.
(histplot of log(FT))
I took an arbitrary mark that I estimated would include the bright spots in the FT. I then added a criterion that would isolate the general area where I expect the FT of the undesired repeating pattern. A circle around the center was left as is because changing it would remove important details from the image. I replaced these areas with 10, and not with 0, because it was just below the median value.
Deletion of lines from the lunar orbit picture (left) original (middle) extracted (right) resulting image |
Code for the lunar picture
moon = gray_imread("Documents/AP186/act 6/crater.jpg");
x = [-0.5:1.0 / (size(moon,1)-1):0.5];
y = [-0.5:1.0 / (size(moon,2)-1):0.5];
[X,Y] = meshgrid(y,x);
r = sqrt(X.^2 + Y.^2);
moonF = fftshift(mfft(moon,-1,[size(moon,1),size(moon,2)]));
a = scf(1);
subplot(231); //original image
imshow(moon);
subplot(234); //FT original image
imshow(log(abs(moonF)),bonecolormap(8));
subplot(235); // filtered out (frequency space)
erased = ones(size(moonF,1), size(moonF,2));
erased(find(log(abs(moonF)) > 4 & abs(X)<0.01 & r > 0.015)) = moonF(find(log(abs(moonF)) > 4 & abs(X)<0.01 & r > 0.015));
imshow(log(abs(erased)),bonecolormap(8));
subplot(232); // filtered out (real space)
imshow(mfft(erased,1,[size(moon,1),size(moon,2)]));
subplot(236); // edited image FT
moonF(find(log(abs(moonF)) > 4 & abs(X)<0.01 & r > 0.015)) = 10.0;
imshow(log(abs(moonF)),bonecolormap(8));
subplot(233); //edited image
moonFix = mfft(moonF,1,[size(moonF,1),size(moonF,2)]);
imshow(abs(moonFix),bonecolormap(8));
a.figure_size = [1000,800];
xs2png(a, "Documents/AP186/act 6/moonsir cool.png");
A similar code was used for the painting, but the criterion for masking in the frequency space was instead
find(log(abs(snipF))>4 & r > 0.1)
Extraction of weave from painting (left) original (middle) extracted (right) resulting image |
(Left) Original texture and (right) extracted texture |
Part of the preparation for this activity was looking at the convolution(or multiplication in frequency space) of two images of dissimlar sizes. It is supposed to used as familiarization with applying filters.
(Left) Ten random points (middle) convolved with a 5x5 image (right) points in a periodic fashion |
I would give myself a grade of 11 for being able to get the desired output (lunar picture without lines and painting without weave) without using external applications.
The filtered image does not look like an enhanced version of the original at all.
ReplyDeleteAfter seeing your email, I must apologize, what i saw was just part of the image. To see the rest, I must click the figure.
ReplyDelete