-
迈克尔逊干涉仪是一种利用分割光波振幅的方法实现干涉的精密光学仪器,对近代物理学的发展产生过重大影响.由于迈克尔逊干涉仪装置简明、光路直观、精度高,能以极高的精度测量长度或者折射率的微小变化,它的调整和使用方法在光学技术中具有典型性和代表性,所以它在干涉测量技术中具有重要的地位和作用,根据迈克尔逊干涉仪的基本结构原理设计和研发的各种精密仪器已广泛应用于生产和科学研究领域[1].
在使用到迈克尔逊干涉仪的实验中,不可避免地要得到干涉圆环的级次变化量Δk.而为了提高实验结果的准确度,需要的Δk从几百到几千不等,用肉眼观察计数是不现实的.用CCD采集到干涉图样变化的视频后,可使用MATLAB对视频进行进一步的处理,以得到Δk的值.
本文计算Δk的基本思路是对干涉圆环中心的明暗交替情况进行记录,干涉圆环中心明暗交替次数的1/2即为Δk的值.
由CCD得到的视频画面一般会含有许多噪点,且干涉圆环的中心不一定在画面中心,所以需要先对视频进行预处理,并找到干涉圆环的中心.
全文HTML
-
由CCD得到的视频画面一般会含有噪声,且干涉圆环的中心不一定在画面中心,所以需要先对视频进行预处理,并找到干涉圆环的中心.
-
中值滤波是一种常见的降噪算法,其基本原理是把图像中一点的值用该点的一个邻域中各点值的中值代替,使得该范围内的各点像素值趋于相同,此算法可有效消除图像中孤立噪声点.
其中,Vout是待处理像素的输出值,median是取平均值,{an}是待处理像素值某邻域中各点的像素值.所以,中值滤波后的图像g(x,y)是(x,y)为中心的N×N窗口的各像素的灰度中间值[2-3].
-
图像的二值化即把灰度图中所有像素点的值变为0或者255,进一步增强图像的对比度[4],消除干涉圆环边缘强度递减对搜索圆环圆心造成的影响.图像的二值化需要确定一个阈值,把灰度值在阈值以上的像素点的像素值变为255,在阈值以下的像素点的像素值变为0,即完成了图像的二值化.
由于本问题中的原图像不同部分灰度差异明显,图像的直方图类型是典型的双峰直方图(图 1).可以通过文献5中的方法来确定阈值的大小,步骤为[5]:
1) 计算像素灰度平均值(avg)、标准偏差(sigma);
2) 以像素平均值为分界点,分别求出左右部分最大值的位置;
3) 以两峰值位置的中点作为所要求的阈值.
本文中将阈值取为127.5.
1.1. 中值滤波
1.2. 二值化
-
虽然干涉圆环的中心不在画面中心,但整段视频中,只要确保仪器在实验过程中未被移动,干涉圆环中心的位置就不会改变,所以只需要确定视频中任意一帧干涉圆环中心的位置,就能确定所有帧中圆环圆心的位置(图 2).
-
通常使用霍夫(Hough)变换[6]在图像中搜索圆或直线,但对于大量同心圆环,Hough变换的效率较低.鉴于本问题具有一定的特殊性,可简化算法以提高效率.
在干涉图像中寻找圆心的思想为:
设视频帧的分辨率为w*h,在已经过预处理的某一视频帧中,取一适当大小的探测圆C,保证圆C能与干涉圆环图像相交.将圆周上等间距的n个点的像素值进行对比,若这n个点的像素值全为0或全为255,则说明此时圆C与干涉图样的某个亮环或某个暗环重合,圆C的圆心在误差允许范围内可以认为是干涉图样的中心.
若圆周上n个点的像素值不完全相同,则圆C未与干涉圆环重合,此时应多次微调探测圆位置,重复检测圆周上n个点的像素值,直到它们全部相同为止.微调的步长应取一个小值,避免出现探测圆C越过干涉圆环导致搜索失败的情形.但如果干涉圆环宽度过大,采取小步长会导致探测圆搜索到的位置与干涉圆环相切,导致搜索到的圆心与实际圆心偏离较大的情况出现.对于这种情况,可以让探测圆分别从左上角和右下角开始搜索两次,取两次搜索到的圆心位置的平均值以消除误差.
若探测圆已遍历图像,还是没有使圆周上24点的像素值相同,说明探测圆的半径过大.此时应减小探测圆半径,重复上述步骤,直到找到为止.
-
设视频帧的宽为w,高为h,圆心移动在x方向或y方向移动的次数为loop,探测圆的圆心位置为O(oxi,oyi).在本问题中对圆半径的要求并不严苛,只要不太大或太小都不影响圆心的搜索,可取一适中大小,这里取为w与h中较短的那个的1/4,即
由于探测圆的圆周最多与图片边缘相切,所以圆心移动的范围位于图像中一大小为
$(w-2 r) *(h-2 r)$ 的矩形之中.而因为移动次数为loop,所以圆心在x方向每次移动的距离为$(w-2 r)$ /loop,在y方向每次移动的距离为$(h-2 r)$ /loop,所以圆心位置可表示为:其中ix与iy分别为在x方向上的迭代次数.
-
采用极坐标,先取n个离散的等角间距的角度值为
则圆周上n个点的坐标可以表示为
其中f(x)=[x]为取整函数,因为二值化后的图像在MATLAB中是一个矩阵,若要把xk与yk作为矩阵索引,则它们必须是整数.
-
设经过预处理后的视频帧对应一个大小为w*h的矩阵I,则可取到n个像素值
若对于某个O(oxi,oyi),有I1=I2=…=In,说明这n个点处于某个亮环或某个暗环上,此O(oxi,oyi)即为同心圆的圆心.圆心搜索结果见图 3,圆心搜索函数源代码为:
function[center_x,center_y]=SearchCircle(pct)
%输入预处理后的图片数据,输出同心圆圆心坐标
%%参数设定
[h,w]=size(pct);%获得图像尺寸
r=min(w/4,h/4);%探测圆初始半径设定
cx=zeros(1);cy=zeros(1);cx(1)=r;cy(1)=r;%[cx,cy]为探测圆圆心坐标
loop_num=100;n=0;theta=0:pi / 36:2 * pi;
temp=zeros(1,length(theta));
temp(1)=1;%temp为用于储存遍历中被探测点上颜色信息的数组
%%探测圆遍历
while sum(temp) / length(temp)~= temp(1)
for nx=1:loop_num
for ny=1:loop_num
cx(nx)=r + (nx - 1)*(w - 2 * r) / loop_num;
cy(ny)=r + (ny - 1)*(h - 2 * r) / loop_num;%根据式(5)计算出探测圆圆心的位置
sx=round(cx(nx) + r*sin(theta));
sy=round(cy(ny) + r*cos(theta));%计算相应圆周上的各点的位置
sx(sx == 0)=1;sy(sy == 0)=1;
%如果temp中的所有元素均为1或均为0,则说明找到了圆环,跳出循环.反之则继续
for i=1:length(theta)
temp(i)=pct(sy(i),sx(i));
end
if sum(temp) / length(temp) == temp(1)
break;
end
end
if sum(temp) / length(temp) == temp(1)
break;
end
end
n=n + 1;r=r - 2;cx(1)=r;cy(1)=r;
end
end
2.1. 方法概述
2.2. 具体步骤
2.2.1. 确定探测圆圆心位置
2.2.2. 确定对应某个圆心O(oxi,oyi),圆周上n个等间距的点的位置(xk,yk).
2.2.3. 比较2.2.2中n个点上的像素值是否一致.
-
找到同心圆环圆心后,记录视频中每一帧圆心处的像素值并存入一个数组中,可得到长度为总帧数的一维数组,其元素均为0或255.将数组内相邻元素进行对比,若相邻元素相等,则对应帧圆环中心的颜色没有改变;若相邻元素不等,则对应帧圆环中心颜色改变.每两次改变对应一个干涉圆环的“冒出”或“缩进”,遍历数组,获取改变次数N,则
得到Δk后,即可根据光程差公式,计算出单色光波长、未知介质折射率等数据.
-
基于MATLAB的干涉视频处理方法,若结合CCD和LabVIEW等硬件相关的部分,可实现迈克尔逊干涉仪相关实验的高度自动化.本文通过圆心搜索算法确定计数区域,并通过计数区域内像素值的变化得到条纹级数的变化,避免繁琐的实际操作.用多个不同的干涉视频进行测试后,与手动计数所得的准确值进行对比,可发现本方法具有高精确度.且因图像处理的步骤不复杂,较其他的自动计数方法而言本方法具有更快的运行速度,可用于快速测量材料的物理性能(比如树脂玻璃板的折射率或金属棒的热膨胀系数等)等领域的研究工作,在教学科研领域均具有一定的实践价值.