摄像头Optical Center检测算法简单实现
光线通过透镜时,都会产生偏折,使光线传播方向发生变化;但透镜上有一点,任意方向的光线通过该点时,光线的传播方向不变,即出射方向和入射方向相互平行,这一点叫透镜的光学中心 。Optical Center检测是摄像头检测中用于衡量光与芯片物理中心的偏差,一般在自动化检测中是以图片的亮度中心与芯片物理中心的偏差作为一个门限卡控,分X方向和Y方向两个方向,测试环境是白板。读取白板照片的亮度中心,一般是以光斑的重心作为一个等价替换。将白板照片视为一个光斑,求光斑重心则等同求出白板的亮度中心。
一般求重心采用的是cvFindContour等轮廓函数,再将图像阈值分割二值化等操作实现轮廓提取,最终出现的实际上是轮廓的形心。这样的处理方式,会导致最终的图像ROI的灰阶值只有0和1两个值,很多灰度信息被丢失,整体的灰度值变化影并没有反应出来。
所以需要一种可按目标光强分布求出光强权重质心坐标作为跟踪点的算法来针对白板这种亮度不均匀的目标,这便是灰度重心法(也叫密度质心算法)
对于一副m*n大小的图像F,像素的灰阶值凡是超过阈值T的均参与中心处理计算,因此重心坐标为:
Xi表示第i行的坐标,Xj表示第j行的坐标,f(i,j)表示第i行第j列的像素值Gray。
相关代码如下:
//灰度重心法求质心
static double xy[1];
IplImage *image;
image = cvLoadImage(filepath,0);//filepath为图