Extracción del centro de la franja láser: método de valor extremo python

Extracción del centro de la franja láser: método de valor extremo python

método de valor extremo

El método de valor extremo primero necesita obtener la función de distribución de grises de la sección transversal de la franja de luz y realizar una operación de gradiente en ella. El punto de píxel donde el valor de degradado es igual a cero es el punto de valor de gris máximo de la sección transversal en la franja de luz, y este punto se toma como el punto central de la franja de luz. El método del valor extremo requiere que la distribución de grises de la sección de la franja láser se aproxime a una distribución gaussiana ideal. Debido a la influencia del ruido ambiental, la distribución de grises de la franja láser en la superficie del juego de ruedas del tren no es una distribución gaussiana ideal. Si se utiliza el valor extremo en este caso, el método extrae la línea central de la franja de luz y el punto central de la franja de luz obtenido puede ser un punto extremo local, lo que genera un gran error en el resultado de la extracción. Como se muestra en la figura de la izquierda de la Figura 1-5, cuando la distribución en escala de grises de la barra de luz es una distribución gaussiana ideal, el método del valor extremo puede extraer rápidamente el centro de la barra de luz láser. Cuando se ve perturbado por el ruido, como se muestra en la figura de la derecha de la Figura 1-5, el valor máximo ya no está en la posición original, sino en el lugar del ruido, por lo que habrá un error de Δo con el centro real de la luz. bar. En el entorno de detección del juego de ruedas del tren con una baja relación señal-ruido, el método es difícil de aplicar a la extracción de la línea central de la franja láser del juego de ruedas en el entorno dinámico.
inserte la descripción de la imagen aquí

código pitón

# Maximum value method
import cv2
import numpy as np
import time

def Extreme(img, thresh):
    row,col,chanel = img.shape
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    points= []
    newimage = np.zeros((row,col),np.uint8)
    for i in range(col):
        #Pmax = np.max(gray[:,i])
        Prow = np.argmax(gray[:,i])
        if Prow > thresh:
            points.append([Prow,i])
    for p in points:
        newimage[p[0],p[1]] = 255
        img[p[0],p[1],:] = [0,0,255]
    # cv2.namedWindow("origin",0)
    # cv2.namedWindow("centerLine",0)
    # cv2.imshow("origin",img)
    # cv2.imshow("centerLine",newimage)

    return img, newimage

# start_time = time.time()
# img = cv2.imread("./image/2-3.png")
# Extreme(img)
# tack_time = time.time() - start_time
# cv2.waitKey(0)
# print("One image need tack time: ", tack_time)

if __name__ == "__main__":
    import time
    import os
    image_path = "./image/"
    save_path = "./paper/mvm/"
    if not os.path.isdir(save_path): os.makedirs(save_path)

    sum_time = 0
    for img in os.listdir(image_path):
        image = cv2.imread(os.path.join(image_path, img))
        start_time = time.time()
        _, image_c = Extreme(image, 100)
        end_time = time.time()
        sum_time += end_time - start_time
        cv2.imwrite(os.path.join(save_path, img), image_c)
    average_time = sum_time / len(os.listdir(image_path))
    print("Average one image time: ", average_time)

Supongo que te gusta

Origin blog.csdn.net/CharmsLUO/article/details/123263835
Recomendado
Clasificación