在国内红外公司绝大多数一直以来国外进口的成像芯片,能够进行红外芯片自助开发的电学应该只有大立光电和广微积电光学方法只有上海巨哥和一直未能产品化的昆山光微电子。由于政治和历史原因,欧美对中国大陆还是实行武器以及相关的禁运。红外作为重要的军品广发应用于单兵夜视和武器制导也被有条件的封锁。国内拿到的电学红外探测器一般为B类品或C类,这就会导致会有相对于A类品更多比率的盲元。B;类品盲元的比例一般为320*240 探测器在五十左右。红外探测器本身的工艺成熟度也决定了了相对于cmos的可见光成像芯片更多的盲元。在可见光图像处理中一般已将无需盲元处理了。
对于盲元的定义,现在一般是定义为低于或高于平均相应的多少百分点。具体的百分点各公司研究所不近相同,也因应用的区域和行业不同而有所区别。
对于盲元处理一般采取的方式:
1.对于低硬件和运算周期的消耗,低复杂度一般采用相邻位像素直接替代、相邻位上下左右四位或周围八位像素进行差值运算。
2.对于资源多切要求高的应用,可以采用滤波找到边缘进行盲元位相应的趋势预测而不是简单的平均
本文只做原理示例 故采用第一种
一般盲元数相对于温度会呈现出线性上升的特性,故以下的处理方式可采用分段方式检测盲元,这里知识采用了一个温度段。产品上盲元的偏出平均响应比较多的是定位为偏出平均10%,本文为了效果明显就定的比较高。
具体源码如下:
clear;
clc;
%%%%%%%%%%%%%%低温单帧图像取值%%%%%%%%%%%%%
save3 =zeros(3,2,'uint16');
fid = textread('3005b.txt','%s');
fid1 = hex2dec(fid);
save3(:,:) = reshape(fid1,3,2);
sample1 = zeros(3,2,'double');
sample1 = save3(:,:);
subplot(2,2,1),imshow(uint8(sample1));
title('T1温度原始图');
%%%%%%%%高温单帧图像取值%%%%%%%%%%%%%%%
save3 =zeros(3,2,'uint16');
fid = textread('7005b.txt','%s');
fid1 = hex2dec(fid);
save3(:,:) = reshape(fid1,3,2);
sample2 = zeros(3,2,'double');
sample2= save3(:,:);
subplot(2,2,2),imshow(uint8(sample2));
title('T2温度原始图');
%%%%%%%%%%%%%%%计算平均响应率%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
avr1=sum(sample1(:))/(3*2);
avr2=sum(sample2(:))/(3*2);
avr_response = avr2 - avr1;
%%%%%%%%%%%%%%%设定门限%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H_rat = 0.4;%定义盲元的象元偏差率
H_threshold = avr_response*(1+H_rat);%临界阈值上限
L_threshold = avr_response*(1-H_rat);%临界阈值下限
%%%%%%%%%%%%%%计算盲元%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sample3 = reshape(sample1,1,6);
sample4 = reshape(sample2,1,6);
signal_pixel = zeros(1,6,'double');
for i = 1:6;
signal_pixel(1,i) = sample4(1,i)- sample3(1,i);%各象元响应率
if signal_pixel(1,i)>H_threshold || signal_pixel(1,i)<L_threshold
signal_pixel(1,i) = signal_pixel(1,i-1);%盲元后一象元替代
end
end
%%%%%%%%%%%%%%显示盲元补偿后效果%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sample3 = zeros(3,2,'double');
sample3 = reshape(signal_pixel,3,2);
subplot(2,2,3),imshow(uint8(sample3));
title('盲元补偿后');
可以自己造图才跑,数据文件上传太繁琐了就没上传,如果有兴趣可以找我来要。
QQ:356636122