灰度重心法提取光条纹中心

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z649431508/article/details/78562165

灰度重心法提取激光光条纹中心其实是将光条纹截面的灰度值分布中的质心记作为光条纹的中心。
在一列线激光中先利用极值法求取光强最大的一点gmax,然后确定一个阀值K=gmax-g(g取10-20),在阈值两边判断大于K的元素,求出其重心位置作为光条纹的中心。
这里写图片描述
在线激光条纹的灰度分布图中,假设所有大于阈值K的点的像素坐标为Ui(i=0,1,2…)其相应的灰度值则为gi(i=0,1,2…),则光心的位置为:
这里写图片描述
由灰度重心法来求取线激光光条纹的中心,每一列线激光条纹的阈值都是不同的,即使线激光灰度分布不均匀或者发生了改变,也不会对线激光光条纹中心位置的确定带来很大的误差,提高了重心提取的精度。
下面附上Python代码:

import cv2
import numpy as np
#图像预处理
img = cv2.imread("D:\opencv_camera\digits\shiyan2\\20.jpg")
print(img.shape)
img=img[100:400,450:1000]
cv2.imshow('img',img)
cv2.waitKey(0)
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret1,th1 = cv2.threshold(emptyImage3,100,255,cv2.THRESH_BINARY)
cv2.imshow('img',th1)
cv2.waitKey(0)
#灰度重心法提取光条纹公式函数
def Cvpointgray(img):
    x=[]
    for i in range(img.shape[1]):
        x0=0;y0=0
        for j in range(1,img.shape[0]):
            x0=x0+img[j,i]
            y0=y0+img[j,i]*j
        y=y0/x0
        y=round(y)
        x.append(y)
    return x
print(len(Cvpointgray(th1)))
print(Cvpointgray(th1))
print(sum(Cvpointgray(th1))/550)

猜你喜欢

转载自blog.csdn.net/z649431508/article/details/78562165