深入探讨Clang-Tidy与Bazel的整合
2026/1/8 1:39:01
% 读取数据 pwr = freadbkj('../rmli/rmli.ave', 5902, 'float32', 'b'); % 原始干涉图数据 phase_complex = freadbkj('20091226_20100515.diff', 5902, 'cpxfloat32', 'b'); cc = freadbkj('20091226_20100515.cc', 5902, 'float32', 'b'); % ADF处理后的干涉图数据 adf_phase_complex = freadbkj('20091226_20100515.adf.diff', 5902, 'cpxfloat32', 'b'); adf_cc = freadbkj('20091226_20100515.adf.cc', 5902, 'float32', 'b'); % 计算cc非零均值 % 方法1:排除精确为零的值 cc_nonzero = cc(cc ~= 0); adf_cc_nonzero = adf_cc(adf_cc ~= 0); % 方法2:排除小于某个小阈值的值(更安全,避免浮点数误差) threshold = 1e-10; cc_valid = cc(cc > threshold); adf_cc_valid = adf_cc(adf_cc > threshold); % 计算均值 mean_cc = mean(cc_valid(:)); mean_adf_cc = mean(adf_cc_valid(:)); % 显示计算结果 fprintf('==================== CC统计信息 ====================\n'); fprintf('原始CC数据:\n'); fprintf(' 总点数: %d\n', numel(cc)); fprintf(' 非零点数: %d\n', numel(cc_valid)); fprintf(' 非零均值: %.4f\n', mean_cc); fprintf(' 最小值: %.4f\n', min(cc(:))); fprintf(' 最大值: %.4f\n', max(cc(:))); fprintf(' 零值比例: %.2f%%\n', sum(cc(:) <= threshold)/numel(cc)*100); fprintf('\nADF处理后CC数据:\n'); fprintf(' 总点数: %d\n', numel(adf_cc)); fprintf(' 非零点数: %d\n', numel(adf_cc_valid)); fprintf(' 非零均值: %.4f\n', mean_adf_cc); fprintf(' 最小值: %.4f\n', min(adf_cc(:))); fprintf(' 最大值: %.4f\n', max(adf_cc(:))); fprintf(' 零值比例: %.2f%%\n', sum(adf_cc(:) <= threshold)/numel(adf_cc)*100); fprintf('\nADF处理改善: %.2f%%\n', (mean_adf_cc - mean_cc)/mean_cc*100); fprintf('==================================================\n'); % 创建图形窗口 figure('Position', [100, 100, 1400, 600]); %% 子图1:原始干涉相位 subplot(1, 2, 1); % 创建灰度功率图作为背景 gray_pwr = mat2gray(pwr, [0 25000]); % 归一化到[0,1] gray_rgb = repmat(gray_pwr, [1, 1, 3]); % 转为RGB % 创建彩色相位图(原始) phase_norm = (angle(phase_complex) + pi) / (2*pi); % 归一化到[0,1] jet_cmap = jet(256); phase_idx = round(phase_norm * 255) + 1; phase_idx(phase_idx < 1) = 1; phase_idx(phase_idx > 256) = 256; phase_rgb = ind2rgb(phase_idx, jet_cmap); % 创建alpha通道(基于cc值) alpha_data = ones(size(cc)); alpha_data(cc < 0.35) = 0; % cc小于0.35的区域透明 % 混合图像 blended_rgb = zeros(size(gray_rgb)); for k = 1:3 blended_rgb(:,:,k) = gray_rgb(:,:,k) .* (1 - alpha_data) + ... phase_rgb(:,:,k) .* alpha_data; end % 显示混合图像 imagesc(blended_rgb); axis image; title_str = sprintf('原始干涉相位 (cc>0.35显示)\ncc均值: %.3f', mean_cc); title(title_str, 'FontSize', 12, 'FontWeight', 'bold'); xlabel('距离向'); ylabel('方位向'); % 添加相位颜色条 c1 = colorbar('Location', 'eastoutside'); colormap(hsv); caxis([-pi pi]); ylabel(c1, '相位 (弧度)'); %% 子图2:ADF处理后的干涉相位 subplot(1, 2, 2); % 创建ADF处理后的彩色相位图 adf_phase_norm = (angle(adf_phase_complex) + pi) / (2*pi); % 归一化到[0,1] adf_phase_idx = round(adf_phase_norm * 255) + 1; adf_phase_idx(adf_phase_idx < 1) = 1; adf_phase_idx(adf_phase_idx > 256) = 256; adf_phase_rgb = ind2rgb(adf_phase_idx, jet_cmap); % 创建ADF的alpha通道(基于adf_cc值) adf_alpha_data = ones(size(adf_cc)); adf_alpha_data(adf_cc < 0.35) = 0; % adf_cc小于0.35的区域透明 % 混合图像(使用相同的灰度背景) adf_blended_rgb = zeros(size(gray_rgb)); for k = 1:3 adf_blended_rgb(:,:,k) = gray_rgb(:,:,k) .* (1 - adf_alpha_data) + ... adf_phase_rgb(:,:,k) .* adf_alpha_data; end % 显示混合图像 imagesc(adf_blended_rgb); axis image; title_str = sprintf('ADF处理后干涉相位 (cc>0.35显示)\ncc均值: %.3f', mean_adf_cc); title(title_str, 'FontSize', 12, 'FontWeight', 'bold'); xlabel('距离向'); ylabel('方位向'); % 添加相位颜色条 c2 = colorbar('Location', 'eastoutside'); colormap(hsv); caxis([-pi pi]); ylabel(c2, '相位 (弧度)'); % 添加总标题 sgtitle(sprintf('干涉相位对比 (cc阈值=0.35)\n原始cc均值: %.3f vs ADF处理后cc均值: %.3f', ... mean_cc, mean_adf_cc), 'FontSize', 14, 'FontWeight', 'bold'); % 调整布局 set(gcf, 'Color', 'white'); %% 可选:创建CC分布的对比图 figure('Position', [100, 100, 800, 600]); % 子图1:CC直方图对比 subplot(2, 2, 1); histogram(cc_valid, 50, 'FaceColor', 'b', 'EdgeColor', 'none', 'Normalization', 'probability'); hold on; histogram(adf_cc_valid, 50, 'FaceColor', 'r', 'EdgeColor', 'none', 'Normalization', 'probability', 'FaceAlpha', 0.5); xlabel('CC值'); ylabel('概率'); title('CC分布对比 (排除零值)'); legend({'原始CC', 'ADF CC'}, 'Location', 'best'); grid on; % 子图2:CC统计箱线图 subplot(2, 2, 2); boxplot([cc_valid(:); adf_cc_valid(:)], ... [ones(size(cc_valid(:))); 2*ones(size(adf_cc_valid(:)))], ... 'Labels', {'原始CC', 'ADF CC'}); ylabel('CC值'); title('CC统计箱线图'); grid on; % 子图3:CC均值对比柱状图 subplot(2, 2, 3); bar([mean_cc, mean_adf_cc]); set(gca, 'XTickLabel', {'原始CC', 'ADF CC'}); ylabel('CC均值'); title('CC均值对比'); ylim([0, max([mean_cc, mean_adf_cc])*1.1]); grid on; % 在柱状图上添加数值标签 for i = 1:2 if i == 1 value = mean_cc; else value = mean_adf_cc; end text(i, value + max([mean_cc, mean_adf_cc])*0.02, ... sprintf('%.3f', value), ... 'HorizontalAlignment', 'center', 'FontWeight', 'bold'); end % 子图4:零值比例对比 subplot(2, 2, 4); zero_ratio_orig = sum(cc(:) <= threshold)/numel(cc)*100; zero_ratio_adf = sum(adf_cc(:) <= threshold)/numel(adf_cc)*100; bar([zero_ratio_orig, zero_ratio_adf]); set(gca, 'XTickLabel', {'原始CC', 'ADF CC'}); ylabel('零值比例 (%)'); title('零值比例对比'); grid on; sgtitle('CC统计分析对比', 'FontSize', 14, 'FontWeight', 'bold');