基于matlab编程实现SAR图像多视处理

3 篇文章 5 订阅
3 篇文章 0 订阅

目录

一、概念

二、技术流程

2.1 第一种方法

2.2 第二种方法

三、matlab编程

3.1 第一种方法部分代码

 3.2 第二种方法部分代码


摘要:

        本博客讲解SAR图像多视处理原理和方法,并用matlab进行编程实现。

       完整的代码—>点击下载!

一、概念

        单视:单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。

        多视:SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。

        视数:在SAR处理器中,一组信号样本将整个合成孔径分成几个子孔径,每个子孔径代表相同场景的独立观测。

        多视处理:实质是上在图像的距离向和方位向上的分辨率做了一个平均;直白的解释就是将几(视数)个单视合成一个(多视);

        优/劣势:可以提高SAR图像的信噪比,有效抑制斑点噪声,代价是以降低方位分辨率。

先看看代码效果:

二、技术流程

        有两种多视方法可用,一种在时域执行(默认),另一种在频域执行。时域多视由应用程序平均窗口组成,以减少散斑,而频域实现将频谱分为子谱,并对其进行平均。频域多视的优势在于它可以在相同的空间分辨率下实现更好的 ENL(等效视数),但同时对计算的要求更高。

2.1 第一种方法

Step01:计算视数利用距离向分辨率(pixel spacing slant range)、方位向分辨率(pixel spacing azimuth)、入射角(incidence angle)数据,计算视数;根据地距分辨率(斜距的距离向和方位向的分辨率)与入射角计算视数;

公式如下:

ground range resolution = \frac{pixel spacing slant range}{sin(incidence angle) }

\frac{ground resolution}{pixel spacing azimuth \ast multilooked}\rightarrow1

例如:ERS-1/2 SLC 数据使用以下参数进行处理:

pixel spacing azimuth= 3.99 m
pixel spacing slant range= 7.90 m
incidence angle scene centre= 23°

范围和方位角的多视角应满足:

  • 距离向:ground resolution = 7.90 / sin(23°) = 20.21 m, 相当于一个距离向的观测(单视)
  • 方位向:当视数为5时(像素间距方位多视角=3.99*5=19.95 m),可以获得近似与距离向相等的方位分辨率。

因此,最后的视数为5;(来自ENVI官方教程给出的计算方法和实例)

Step02:滑动平均滤波;根据视数,生成一个multi-looked*multi-looked的窗口,进行滑动滤波。

注:第一种多视方法,更准确来说是一种均值滤波。

2.2 第二种方法

Step01:计算视数同上;

Step02:傅里叶变化将图像进行傅里叶变化,得到一幅完整频域图像(具有完整的多普勒带宽);

Step03:划分频谱;根据视数multi-looked,将Step02中获取的频域图像分成multi-looked份,得到multi-looked份子谱频域图像;

Step04:逆傅里叶变化;将Step03获取的子谱频域图像进行傅里叶变化,得到得到multi-looked份子谱时域图像;

Step05:合并子谱时域图像;将子谱时域图像进行合并,获取一张完整的多视处理后的SAR图像。

注:多视处理后,数据的方位向将变少,直观的就是数据行数变少,若为了保证数据行列号不变,可采用频域补零的方法。

三、matlab编程

        本文只提供部分代码,完整的代码可以点击下载(后续补充到博客中),进行获取。

整体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);

注:

  • 视数默认为3,因为这不是本博客的重点,那个需要读取xml文件,我直接省略了。
  • Image_Stretching是拉伸函数,默认为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

3.1 第一种方法部分代码

均值处理部分代码

% 均值(核心1)
        OutImage(i,j) = OutImage(i,j) + abs(InImage(i,j));
% 均值(核心2)
        OutImage(i,j) = OutImage(i,j)/count;        % 计算平均值

 时域多视效果图:

 3.2 第二种方法部分代码

核心步骤部分代码:

%% 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遥感图像
%
%   作者:胡礼珍
%   单位:厦门大学联合遥感接收站
%   邮件:hulizhen@xmu.edu.cn
%
%   输入:
%       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

不足之处,敬请斧正!

路漫漫其修远兮,吾将上下而求索!

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心网千结

若有所帮助,请点赞支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值