我尝试从图像中删除所有斜率在 110° 和 120° 之间的条纹(图 1a),我的第一个想法是在频域中过滤我的图像。
据我记得,那些条纹的光谱应该占据 20-30° 之间的饼图段(即原始斜率 - 90°),但可以肯定的是,我准备了具有相似图案的人工黑白图像(图. 2a)。看来我的推测是正确的(图 2b)。
现在,我尝试创建一个遮罩并简单地“切断”部分频谱以抑制与 10-120° 条纹相关的高频。
经过几次试验后,我才发现了一个在某种程度上满足我需求的面罩(图 3a)(图 4)。但是,我无法弄清楚这个凭经验获得的掩码与光谱之间的关系。
这是我用于过滤的 MATLAB 代码:
f = imread('img/crystal-grain_sample.jpg');
figure, imshow(f); title('f');
m = max(size(f));
P = 2^nextpow2(2*m);
PQ = [P, P];
Fp = fft2(f, PQ(1), PQ(2));
Fc = fftshift(Fp);
Fc_abs = abs(Fc);
Fs_log = log(1+Fc_abs);
%figure; imshow(Fc_abs, []); title('Fc (abs)');
%figure; imshow(Fs_log, []); title('Fs (log)');
Hp = im2double(imread('spec-mask.png'));
Gp = Hp .* Fp;
gp = real(ifft2(Gp));
gpc1 = gp(1:size(f,1), 1:size(f,2));
figure; imshow(gpc1, []); title('g');