目录
一、概念
二、技术流程
2.1 第一种方法
2.2 第二种方法
三、matlab编程
3.1 第一种方法部分代码
3.2 第二种方法部分代码
本博客讲解SAR图像多视处理原理和方法,并用matlab进行编程实现!
单视:单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。
多视:SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。
视数:在SAR处理器中,一组信号样本将整个合成孔径分成几个子孔径,每个子孔径代表相同场景的独立观测。
多视处理:实质是上在图像的距离向和方位向上的分辨率做了一个平均;直白的解释就是将几(视数)个单视合成一个(多视);
优/劣势:可以提高SAR图像的信噪比,有效抑制斑点噪声,代价是以降低方位分辨率。
先看看代码效果:
有两种多视方法可用,一种在时域执行(默认),另一种在频域执行。时域多视由应用程序平均窗口组成,以减少散斑,而频域实现将频谱分为子谱,并对其进行平均。频域多视的优势在于它可以在相同的空间分辨率下实现更好的 ENL(等效视数),但同时对计算的要求更高。
Step01:计算视数;利用距离向分辨率(pixel spacing slant range)、方位向分辨率(pixel spacing azimuth)、入射角(incidence angle)数据,计算视数;根据地距分辨率(斜距的距离向和方位向的分辨率)与入射角计算视数;
公式如下:
例如:ERS-1/2 SLC 数据使用以下参数进行处理:
pixel spacing azimuth | = 3.99 m |
pixel spacing slant range | = 7.90 m |
incidence angle scene centre | = 23° |
范围和方位角的多视角应满足:
因此,最后的视数为5;(来自ENVI官方教程给出的计算方法和实例)
Step02:滑动平均滤波;根据视数,生成一个multi-looked*multi-looked的窗口,进行滑动滤波。
注:第一种多视方法,更准确来说是一种均值滤波。
Step01:计算视数;同上;
Step02:傅里叶变化;将图像进行傅里叶变化,得到一幅完整频域图像(具有完整的多普勒带宽);
Step03:划分频谱;根据视数multi-looked,将Step02中获取的频域图像分成multi-looked份,得到multi-looked份子谱频域图像;
Step04:逆傅里叶变化;将Step03获取的子谱频域图像进行傅里叶变化,得到得到multi-looked份子谱时域图像;
Step05:合并子谱时域图像;将子谱时域图像进行合并,获取一张完整的多视处理后的SAR图像。
注:多视处理后,数据的方位向将变少,直观的就是数据行数变少,若为了保证数据行列号不变,可采用频域补零的方法。
本文只提供部分代码,完整的代码可以点击下载(后续补充到博客中),进行获取。
整体main代码
clear;close all;clc;
%% 文件地址
File = 'D:\Code\Matlab\多视处理\BC1_SM_SLC_1SSV_20230219T025444_004986_00137A\bc1-sm1-slc-vv-20230219t025444-004986-00137a-01.tiff';
% 读取图像
InImage = double(imread(File)); % 读取文件
%% 合成复数
% figure('Name','原始的SLC图像')
InImg = complex(InImage(:,:,1),InImage(:,:,1));
% Image_Stretching(InImg,2); % 拉伸函数中有显示的代码
% SAR_Stretching(InImg,'原始的SLC图像');
%% 第一种方法:多视处理(时域多视)
% figure('Name','时域多视')
OutImage1 = multilookmean(InImg);
% % Image_Stretching(OutImage1,2);
SAR_Stretching(OutImage1, '时域多视');
%% 第二种方法:多视处理(频域多视)
OutImage2 = multilook(InImg,4,'yes');
SAR_Stretching(OutImage2, '频域多视');
%Image_Stretching(OutImage2,2);
注:
利用matlab实现SAR 图像线性拉伸显示_matlab读取sar图像_心网千结的博客-CSDN博客SAR 图像是一幅灰度图像,由于极少数点(金属、裸地、建筑)的后向散射太强,而导致SAR图像强度图的值分布范围很广,而图像显示值的分布为[0,255],因此,如果直接显示,将会导致图像颜色很暗,甚至是一片全黑。本博客利用matlab,实现SAR图像线性拉伸,从而更好的展现图像。 其主要步骤有:S1.根据线性拉伸百分比,找出最小、最大阈值,并将值域外的值重新赋值;S2.图像像素值归一化。 步骤S1代码:% Image 遥感图像矩阵% ...https://blog.csdn.net/weixin_41649786/article/details/118404909?spm=1001.2014.3001.5501
均值处理部分代码
% 均值(核心1)
OutImage(i,j) = OutImage(i,j) + abs(InImage(i,j));
% 均值(核心2)
OutImage(i,j) = OutImage(i,j)/count; % 计算平均值
时域多视效果图:
核心步骤部分代码:
%% Step03 划分子图像
Sub_Row = ceil(Row/Look_num);
Sub_Img = zeros(Sub_Row,Col,Look_num);
% Step04 IFFT
Sub_Img(:,:,i) = ifft(Img((i-1)*Sub_Row+1:i*Sub_Row,:));
% 补零(先补零,在IFFT)
Sub_Imag_add_0(1:Sub_Row, :,i) = Img((i-1)*Sub_Row+1:i*Sub_Row,:);
Sub_Imag_add_0(:, :,i)= ifft(Sub_Imag_add_0(:, :,i)); % 补零
频域多视(补零)效果图 :
图片显示代码:
function SAR_Stretching(InImg,titleName)
%==================================说明====================================
% SAR图像DB显示
% 函数作用:用于显示SAR遥感图像
%
% 作者:胡礼珍
% 单位:厦门大学联合遥感接收站
% 邮件:[email protected]
%
% 输入:
% Image SAR遥感图像矩阵,是二维矩阵
% titleName 显示图像的名字,必须是char型!!!
% 输出:
% 无
%
% 语法:
% SAR_Stretching(InImg,titleName):输入SAR遥感图像矩阵InImg,
% 和画图的标题名字就能生成一幅利用DB方法显示的SAR遥感图像
% =========================================================================
if ~ischar(titleName)
errordlg('标题必须为char型!请重新输入','图像标题输入有误');
return; %终止运行程序
end
% 对亮度进行非线性变换,减小对比度,显示图像
sout = abs(InImg)/max(max(abs(InImg)));
G = 20*log10(sout+eps); % dB显示
clim = [-55 55]; % 动态显示范围,根据实际可调
figure('Name',titleName);
imagesc(G,clim);
axis xy;
title(titleName);
xlabel('X')
ylabel('Y')
colormap(gray)
end
不足之处,敬请斧正!
路漫漫其修远兮,吾将上下而求索!