面阵CCD系统设计
童列树
一 采集线性CCD像素信息的实现,包括弱信号的提取。描述一种算法,找到特征点,如最大点。 二 采集29×29的CCD点阵信息,提取边界。将点阵当成圆或椭圆,找出圆心并输出.txt格式。
完成内容:
1、分析CCD系统结构;
2、描述信号采集及调理的方案;
3、在MATLAB中从“write.raw”中提取第一行1024个像素点信息,找出其信息最大点,并输出“LinearArrayCCD_Max.txt”文件。从“write.raw”中提取29×29光斑,并找出光斑中心,输出“AreaArrayCCD_Max.txt ”文件。
1,光电成像系统基本组成的框图 CCD、CMOS、CID等 光源光信号传输介质背景噪声光信号光学系统(信号分析器)背景噪声光信号光电摄像器件(信号变换器)噪声信号显示器信号人眼噪声物体(信号源)
CCD (Charge Coupled Device)图像采集系统是指光电成像系统的后半部分。主要由CCD传感器、时序电路、采集电路、信号处理电路等部分组成。
2,CCD图像采集系统
内部数据采集
(采样保持电路)
噪声、干扰 除噪 CCD传感器 外部信号采集 放大输出 有用信号 A/D转换
驱动的时序电
A CCD传感器
(a)为单沟道,(b)为双沟道,φ1、φ2为移位脉冲
B 驱动电路
驱动电路产生驱动CCD传感器工作的各种时序。如复位时钟、移位脉冲φ1、φ2和转移脉冲等。常用的有四种实现方式:EPROM驱动法;IC驱动法;单片机驱动法以及可编程逻辑器件(PLD)驱动法。后两者可以实现在不改变硬件的条件下,对驱动电路进行更改。 C 内部采样电路
是指CCD传感器内部封装的采样电路,此时所采信号为原始信号。 D 外部信号采样
CCD器件输出的原始信号中除了有用的信号外,还夹杂着各种噪声和干扰,主要有光子噪声、散粒噪声、暗电流噪声、复位噪声以及输出噪声等,而影响最大的是复位噪声。
外部电路对CCD信号采集主要包括除噪和A/D转换,前者是为了在不损失图像细节的前提下尽可能消除噪声和干扰,以获取高质量的图像;后者则是为了完成对输出信号的数字化,以便进一步进行软件处理。 D1 除噪
上述对有用信号影响最大的复位噪声,可以利用相关双采样是来消除。其原理是利用复位噪声在同一像素周期内近似为常数,因此,只要把同一像素周期内的参考电平和信号电平进行两次采样,再进行相减,即可消除复位噪声。
此外,设计合适的滤波器,可以很大程度的降低总体噪声,提高信噪比。先进行高通滤波,接着运放放大信号,再低通滤波。
高通滤波器:为滤掉白噪声和器件不稳定等引起的各种噪声,同时为了达到边缘强化的目的,应设置一高通滤波器,截止频率应在1—3kHz。
放大器:原信号幅值为3mV,应放大1000倍,达到3V,以匹配ADC的量程。
低通滤波器:由于CCD输出的视频信号中,混杂有各种噪声信号,为了获得高质量的图像视频信号,在CCD的输出端设计一个截止频率为2f(f为CCD像元同步脉冲频率)的低通滤波器, D2 A/D转换
在进行实际的硬件电路设计时,存在着这样一个问题,由于CCD 的驱动频率较高(1MHz),而一般的A/D转换器件的转换时间为几十微秒到一百微秒。这样将会导致量化过程中有效数据的丢失,使检测结果的精度大为降低。采用隔点采样,然后再重新拼接图象信号的方法,可以很好地解决这个问题。
在A/D转换之前大多数都经过差动放大、采样保持处理。 E 输出
将微弱信号放大,然后可以通过USB接口与计算机连接,将采集的图像信息直接接入计算机显示,也方便用其他工具对所采图像进行处理。
3 图像处理
3.1 对已采集的图像信息“white.raw”进行处理提取线阵并进行处理。MATLAB程序如下: clear all
file=strcat('E:\\white.raw'); fid=fopen(file,'rb');
aa=fread(fid,[1,1024],'uint16'); fclose(fid); for i=1:1023 b= aa(i);
if (aa(i+1)>=aa(i)) b=aa(i+1);
end i=i+1; end i=i-1;
if aa(1024)>b b=a(1024); end
data=aa ;
data=double(data); b
x = 1:1024; y = [x; data(x)];
fid = fopen('LinearArrayCCD_Max.txt', 'wt'); %输出LinearArrayCCD_Max.txt文件 fprintf(fid, 'The maxium of 1×1024 linear array CCD is %d, ',b); fprintf(fid, 'It is aa(%d) .\\n',i); fprintf(fid, 'd d\\n', y); fclose(fid) ; 3.2 对已采集的图像信息“white.raw”中提取面阵,并采用灰度重心法处理得到光斑的中心坐标。MATLAB程序如下:
clear all;
filename='E:\\white.raw';
raw_data=zeros(1000,1000); fid=fopen(filename,'rb');
data_raw=fread(fid,[1000,1000],'uint16'); fclose(fid);
data_array=data_raw;
data_array=imcomplement(double(data_array))+65535; I=data_array;
figure(1);subplot(1,3,1),imshow(uint16(data_array)); figure(gcf) xlabel('原图像');
I(205:820,210:840)=0; data_arrec=I;
figure(1);subplot(1,3,2),imshow(uint16(data_arrec)); figure(gcf) xlabel('图窗');
J=data_array-data_arrec; figure(1);subplot(1,3,3),imshow(uint16(J)); figure(gcf) xlabel('提取的有像素区域'); M=J;
point_num=0;
radius=10; while 1
[a,b]=max(M); [c,d]=max(a);
max_row_index=b(d); max_column_index=d;
if c<=25000
break; end
sum_row_centroid=0; sum_column_centroid=0; sum_intensity_centroid=0;
for i =(max_row_index-radius):(max_row_index+radius)
for j =(max_column_index-radius):(max_column_index+radius)
if (M(i,j)>20000) sum_row_centroid=sum_row_centroid+ M(i,j)*i;
sum_column_centroid=sum_column_centroid+ M(i,j)*j;
sum_intensity_centroid=sum_intensity_centroid+M(i,j); M(i,j)=0; end end end
point_num=point_num+1;
position2(point_num)=sum_row_centroid/sum_intensity_centroid;
position1(point_num)=sum_column_centroid/sum_intensity_centroid;
end
if point_num== 841 disp('OK!');
else disp('There is an error!') end
figure(2);scatter(position1(),position2()); figure(gcf) xlabel('行'); ylabel('列');
axis([100 900 100 900]) axis equal
fid = fopen('AreaArrayCCD_centroid.txt', 'wt'); fprintf(fid, 'The locations of centroid of every facula in a 29?á29 area array CCD are represented below. \\n\\n\\n'); for x = 1:29 for y = 1:29
fprintf(fid, '(? ?)',position1(x),position2(y)); end
fprintf(fid, '\\n'); end
fclose(fid) ;
900800700600列500400300200100100200300400500行6007008009001000