-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathAverage_Filtering.m
76 lines (67 loc) · 2.45 KB
/
Average_Filtering.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
function PHY_s_after_avg_filtering = Average_Filtering(PHY_s_after_flat_earth,window_M,window_N)
% 本函数原理基于: “回转均值滤波”
%
% 本函数用来对去平地相位后的干涉相位做“回转均值滤波”
% 该方法参考:保铮《雷达成像技术》第8章,8.5.2节。
% 详见第 304 页 相关内容
%
% 函数输入值:
% 1) PHY_s_after_flat_earth 代表去平地相位后的干涉相位(即缠绕相位);
% 2) window_M 和 window_N 表示“回转均值滤波”所选定的窗口大小;
% 函数返回值:
% 1)PHY_s_after_avg_filtering 表示“回转均值滤波”后的干涉相位(也是缠绕相位);
%
% 于 2015.04.27.修改了部分错误;
% 本程序截止至:2014.04.30. 9:17 a.m.
%%
% ------------------------------------------------------------------------
% 回转均值滤波
% ------------------------------------------------------------------------
M = window_M; % 斜距向平滑窗口大小,由外界输入
N = window_N; % 方位向平滑窗口大小,由外界输入
[Naz,Nrg] = size(PHY_s_after_flat_earth); % 数据大小
disp('正在进行“回转均值滤波”,请等待');
h = waitbar(0,'正在进行“回转均值滤波”,请等待');
for pp = 1:Naz
for qq = 1:Nrg
% 首先进行条件判断,看窗口window是否超过了矩阵的边界:
if pp<(N+1) || pp>(Naz-N) || qq<(M+1) || qq>(Nrg-M)
% 若满足上述条件中的任何一个,说明窗口位于矩阵边界,进行以下进一步判断
if (pp-N) < 1
x_min = 1;
else
x_min = pp - N;
end
if (pp+N) > Naz
x_max = Naz;
else
x_max = pp + N;
end
if (qq-M) < 1
y_min = 1;
else
y_min = qq - M;
end
if (qq+M) > Nrg
y_max = Nrg;
else
y_max = qq + M;
end
PHY_window = PHY_s_after_flat_earth(x_min:x_max,y_min:y_max);
else
% 若上述四个条件都不满足,说明窗口不位于矩阵边界,则可以取到全部
% (2N+1)*(2M+1)个点,因此直接用以下命令即可
PHY_window = PHY_s_after_flat_earth(pp-N:pp+N,qq-M:qq+M);
end
% 下面根据“回转均值滤波”的方法进行处理:
f_pp_qq_window = sum(sum(exp(1j*PHY_window)));
PHY_s_after_avg_filtering(pp,qq) = angle(f_pp_qq_window) + ...
mean(mean(angle(exp(1j*PHY_window)./f_pp_qq_window)));
clear PHY_window;
clear f_pp_qq_window;
end
waitbar(pp/Naz);
end
close(h);
disp('“回转均值滤波”已完成');
end