文件名称:去条纹
介绍说明--下载内容来自于网络,使用问题请自行百度
function [data_new_new ] = verstripewipe_new1( date, opt )
% -------去除垂直条纹(全局去条纹法)---------------
%Input:
% data:要去除噪声的数据矩阵,M-by-N-by-D
% opt:对于有黑色背景的图像,把去条纹对背景带来的影响去掉:1,否则:0
% Output:
% data_new_new:去除条纹噪声后的数据矩阵
%if ~exist('data','var') || isempty(data)
%error('输入图像矩阵 data 未定义或者为空.');
%end
if ~exist('opt','var') || isempty(opt)
opt = 0;
end
if opt==1 % 为最后把去条纹对背景带来的影响去掉
SD = sum(data,3); % data的第3列求和
SD(SD>0)=1;
end
[599,648,4]=size(data); % 读出M: 行N:列 D:4
if(~isa(data,'double')) %判断data 是否double型数组
data = double(data);
end
% 计算每个波段像元值对应的 标准差 平均值
Stdvk = zeros(1,1,4); %zeros(2:4)表示生成一个2行3列4页的三维矩阵,矩阵的所有元素都
%是0。
for k = 1:4
Stdvk(k) =
std(reshape(data(:,:,k),[599*648,1]),0,1); %将data_new重定义成M*N行1列后,通过STD
%函数计算data_new矩阵的标准差
end
DNk = mean(mean(data,1),2); %DNK返回沿着标量1指定的维数上的元素的平 %均值后在次计算出每一行平均值的列向量
% 计算每个波段 第j列 所对应像元值得 标准差 平均值
Stdvjk = std(data,0,1);
DNjk = mean(data,1);
% 计算增益g、偏置b
Gjk = bsxfun(@rdivide,Stdvk,Stdvjk);
temp = bsxfun(@times,Gjk,DNjk);
Bjk = bsxfun(@minus,DNk,temp);
clear Stdvk DNk Stdvjk DNjk;
% 去除条纹
data_new_new = bsxfun(@times,data_new,Gjk);
data_new_new = bsxfun(@plus,data_new,Bjk);
if opt==1%把去条纹对背景带来的影响去掉
data_new_new = bsxfun(@times,data_new,SD);
end
End
% -------去除垂直条纹(全局去条纹法)---------------
%Input:
% data:要去除噪声的数据矩阵,M-by-N-by-D
% opt:对于有黑色背景的图像,把去条纹对背景带来的影响去掉:1,否则:0
% Output:
% data_new_new:去除条纹噪声后的数据矩阵
%if ~exist('data','var') || isempty(data)
%error('输入图像矩阵 data 未定义或者为空.');
%end
if ~exist('opt','var') || isempty(opt)
opt = 0;
end
if opt==1 % 为最后把去条纹对背景带来的影响去掉
SD = sum(data,3); % data的第3列求和
SD(SD>0)=1;
end
[599,648,4]=size(data); % 读出M: 行N:列 D:4
if(~isa(data,'double')) %判断data 是否double型数组
data = double(data);
end
% 计算每个波段像元值对应的 标准差 平均值
Stdvk = zeros(1,1,4); %zeros(2:4)表示生成一个2行3列4页的三维矩阵,矩阵的所有元素都
%是0。
for k = 1:4
Stdvk(k) =
std(reshape(data(:,:,k),[599*648,1]),0,1); %将data_new重定义成M*N行1列后,通过STD
%函数计算data_new矩阵的标准差
end
DNk = mean(mean(data,1),2); %DNK返回沿着标量1指定的维数上的元素的平 %均值后在次计算出每一行平均值的列向量
% 计算每个波段 第j列 所对应像元值得 标准差 平均值
Stdvjk = std(data,0,1);
DNjk = mean(data,1);
% 计算增益g、偏置b
Gjk = bsxfun(@rdivide,Stdvk,Stdvjk);
temp = bsxfun(@times,Gjk,DNjk);
Bjk = bsxfun(@minus,DNk,temp);
clear Stdvk DNk Stdvjk DNjk;
% 去除条纹
data_new_new = bsxfun(@times,data_new,Gjk);
data_new_new = bsxfun(@plus,data_new,Bjk);
if opt==1%把去条纹对背景带来的影响去掉
data_new_new = bsxfun(@times,data_new,SD);
end
End
(系统自动生成,下载前可以参看下载内容)
下载文件列表
压缩包 : verstripewipe_new.zip 列表 verstripewipe_new.m
本网站为编程资源及源代码搜集、介绍的搜索网站,版权归原作者所有! 粤ICP备11031372号
1999-2046 搜珍网 All Rights Reserved.