【红外技术】非均匀校正之两点校正(原理&标定方法&MATLAB代码&效果)

创作时间:2022-05-06
非均匀校正之两点校正(原理&MATLAB代码&效果)
目录:
1.原理&标定方法
2.代码
3.效果

正文:

先看下效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.原理

红外焦平面的响应非均匀性,其主要由焦平面制造的工艺,材料原因造成。因此,图像处理之前,需要进行预处理,包括非均匀校正和盲元校正。
非均匀校正的一种方法就是两点校正。

在这里插入图片描述
前提条件:
1)假设各个像元的影响都是线性的
2)忽略1/f电流噪声
实验室标定
准备:
黑体,镜头(可加可不加),电源,线缆等
步骤:
1) 固定一个积分时间
2) 将黑体设置为20℃,用采集卡连续保存100张raw图
3) 将黑体设置为35℃,用采集卡连续保存100张raw图
4) 按照一定的步进,改变积分时间,重复上述步骤
将20℃-35℃的盲元检测与校正做完之后,可以再进行扩展温度范围。建议值为10℃-40℃。

2.代码



%两点校正代码
%  '06-May-2022'
%1)读低温黑体原始图像数据
%2)读高温黑体原始图像数据
%3)加载一张未校正的原始图像数据
%4)计算校正参数KB
%5) 进行校正

%----------------------
%1)读低温黑体数据
filename="低温黑体原始图像数据.raw";
if ~exist (filename,'file')
    errordlg('文件不存在');
    return
end
if ~isequal(filename(end-3:end),'.raw')
    errordlg('文件格式必须是Raw');
    return
end
numRows=640;
numCols=512;
Num=numRows*numCols;
L=100;
fid=fopen(filename,'r');
fseek(fid,0,'eof');
totalpixel=ftell(fid);
L_frame=floor(totalpixel/(2*Num));
L=min(L,L_frame);
if  L<=0
    errordlg({'图像大小不够一张!!';'单张640*512的16bit图大小为640kB!'});
    return
end
A=zeros(Num,L);
for  ii=1:L
    fseek(fid,2*Num*(ii-1),'bof');
    temp=fread(fid,Num,'uint16');
    A(:,ii)=temp;
end
fclose(fid);
A=double(A);
T0_avg=mean(A,2);
T0_DN=mean(T0_avg);

h_load_t0=msgbox('T0温度下的原始图像加载完毕');
pause(0.5);
close(h_load_t0);


%2) 读高温黑体数据
filename="高温黑体原始图像数据.raw";
if ~exist (filename,'file')
    errordlg('文件不存在');
    return
end
if ~isequal(filename(end-3:end),'.raw')
    errordlg('文件格式必须是Raw');
    return
end
numRows=640;%高
numCols=512; %宽   
Num=numRows*numCols;
L=100;
fid=fopen(filename,'r');fseek(fid,0,'eof');totalpixel=ftell(fid);
L_frame=floor(totalpixel/(2*Num));L=min(L,L_frame);
if  L<=0
    errordlg({'图像大小不够一张!!';'单张640*512的16bit图大小为640kB!'});
    return
end
A=zeros(Num,L);
for  ii=1:L
    fseek(fid,2*Num*(ii-1),'bof');
    temp=fread(fid,Num,'uint16');
    A(:,ii)=temp;
end
fclose(fid);
A=double(A);
T1_avg=mean(A,2); 
T1_DN=mean(T1_avg);

h_load_t1=msgbox('T1温度下的原始图像加载完毕');
pause(0.5);
close(h_load_t1);

%3)加载一张未校正的原始图像
filename="校正的原始图像数据.raw";
if ~exist (filename,'file')
    errordlg('文件不存在');
    return
end
if ~isequal(filename(end-3:end),'.raw')
    errordlg('文件格式必须是Raw');
    return
end
numRows=640;
numCols=512;
Num=numRows*numCols;
L=1;
fid=fopen(filename,'r');
fseek(fid,0,'eof');
totalpixel=ftell(fid);
L_frame=floor(totalpixel/(2*Num));
L=min(L,L_frame);
disp(L);
if  L<=0
    errordlg({'图像大小不够一张!!';'单张640*512的16bit图大小为640kB!'});
    return
end
A=zeros(Num,L);
for  ii=1:L
    fseek(fid,2*Num*(ii-1),'bof');
    temp=fread(fid,Num,'uint16');
    A(:,ii)=temp;
end
fclose(fid);
T=double(A);

%4)计算校正参数KB
% 注:这里是不扣除盲元计算的KB,实际使用中可以考虑去除盲元,会更加精准

K=(T0_DN-T1dn)./(T0_avg-T1_avg);
K=max(K,0);
B=(T1dn.*T0_avg-T0_DN.*T1_avg)./(T0_avg-T1_avg);

% 5)进行校正&结果对比
T_NUC=K.*T+B;

%numRows=640;%高
%numCols=512; %宽   

imgT=reshape(T,[numCols,numRows]);
imgT=imgT';

imgT_NUC=reshape(T_NUC,[numCols,numRows]);
imgT_NUC=imgT_NUC';

imtool( uint16([imgT,imgT_NUC]) );%结果对比


3.效果

写在前面了,这里略。


THE END~

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三青山上种萝卜

红外图像核心算法,高质量解析

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

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

打赏作者

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

抵扣说明:

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

余额充值