I've been tasked with creating a 32 x 32 half-band low-pass image filter in MATLAB. My thinking is to generate the ideal filter mask in the frequency domain and compute the corresponding convolution mask using the inverse FFT. I first generate the filter in the frequency domain.
filter = zeros(32);
filter (1:8, 1:8) = 1;
filter (1:8, 24:32) = 1;
filter (24:32, 1:8) = 1;
filter (24:32, 24:32) = 1;
This filter turns out to be the following in the frequency domain. I've confirmed my MATLAB code produces this pattern which is symmetric.

Note, I'm assuming I need to define the mask with the frequency ranges from 0 -> 2pi rad/sec, hence putting the "ones" in the corners.
I then generate the convolution mask using the "iift2" MATLAB function. However, this mask turns out to be complex which raises some red flags. I would expect it to be a real filter.
mask = ifft2(filter)
When I convolve this filter mask with my image however, I get some weird artifacts.
image_filtered = imfilter(image_orig, mask);
I'm curious if there is some flaw in my thinking here.




