Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Geavanceerde Gebogen Rijbaandetectie met OpenCV

Verhaal

Inleiding

Rijbanen zijn de ruggengraat van elk autonoom rijsysteem, die voertuigen veilig door het verkeer leiden. Opbouwend op mijn eerdere recht-rijbaandetectie-project, heb ik een robuuste gebogen-rijbaandetectie-pijplijn ontwikkeld die betrouwbaar presteert in complexe omgevingen zoals schaduwen, occlusies, en oneffen wegoppervlakken.

De complete beeldverwerkingsworkflow is geïmplementeerd in Python met OpenCV:

  • Verstoringscorrectie
  • Perspectief-transformatie
  • Sobel-filtering
  • Histogram-piekdetectie
  • Glijdend-venster zoekopdracht
  • Polynomiale kromme fitting
  • Overlay van gedetecteerde rijbaan
  • Real-time videoverwerking

Beperkingen van Vorig Systeem

Het eerdere model was beperkt tot rechte rijbanen en worstelde met curves, schaduwen, en gedeeltelijke occlusies. De nieuwe pijplijn adresseert deze tekortkomingen door edge-gebaseerde filtering en een dynamische glijdend-venster benadering te incorporeren.

Verstoringscorrectie

Camera-lenzen introduceren radiale verstoring die metingen kan vervormen. Door de camera te kalibreren tegen een bekend patroon — typisch een asymmetrisch schaakbord — genereren we een verstoringsmodel dat de gehele dataset corrigeert.

De kalibratieprocedure omvat het vastleggen van meerdere afbeeldingen van het schaakbord, hoekdetectie met cv2.findChessboardCorners(), en het berekenen van de camera-matrix en verstoringscoëfficiënten met cv2.calibrateCamera(). Gecorrigeerde afbeeldingen worden geproduceerd met cv2.undistort().

Hieronder is een zij-aan-zij vergelijking van een onverstoord schaakbordbeeld, wat de subtiele maar cruciale verbetering demonstreert.

Hier is de gebruikte kalibratiecode:

def undistort_img():
    # Prepare object points 0,0,0 … 8,5,0
    obj_pts = np.zeros((6*9,3), np.float32)
    obj_pts[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
    objpoints = []
    imgpoints = []
    images = glob.glob('camera_cal/*.jpg')
    for fname in images:
        img = cv2.imread(fname)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        ret, corners = cv2.findChessboardCorners(gray, (9,6), None)
        if ret:
            objpoints.append(obj_pts)
            imgpoints.append(corners)
    img_size = (img.shape[1], img.shape[0])
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size, None, None)
    dst = cv2.undistort(img, mtx, dist, None, mtx)
    dist_pickle = {'mtx': mtx, 'dist': dist}
    pickle.dump(dist_pickle, open('camera_cal/cal_pickle.p', 'wb'))
    return dst

def undistort(img, cal_dir='camera_cal/cal_pickle.p'):
    with open(cal_dir, 'rb') as f:
        file = pickle.load(f)
    mtx, dist = file['mtx'], file['dist']
    return cv2.undistort(img, mtx, dist, None, mtc)

undistort_img()
img = cv2.imread('camera_cal/calibration1.jpg')
dst = undistort(img)

De functies zijn ook beschikbaar in de bijbehorende Jupyter-notebook onder de Code sectie.

Hieronder is een voorbeeld van verstoringscorrectie toegepast op een rijscène. Hoewel het visuele verschil subtiel is, is accurate geometrie cruciaal voor downstream-verwerking.

Perspectief-transformatie

Gebogen rijbanen direct in camera-ruimte detecteren is uitdagend. Door de afbeelding te transformeren naar een vogelvlucht-weergave, kunnen we aannemen dat de rijbaan op een vlak vlak ligt en een polynoom met hoge precisie fitten.

De transformatie wordt uitgevoerd met cv2.getPerspectiveTransform() en cv2.warpPerspective(). De bron- en doelpunten worden gekozen om de rijbaangeometrie te behouden terwijl zichtbaarheid gemaximaliseerd wordt.

def perspective_warp(img, dst_size=(1280,720), src=np.float32([(0.43,0.65),(0.58,0.65),(0.1,1),(1,1)]), dst=np.float32([(0,0),(1,0),(0,1),(1,1)])):
    img_size = np.float32([img.shape[1], img.shape[0]])
    src = src * img_size
    dst = dst * np.float32(dst_size)
    M = cv2.getPerspectiveTransform(src, dst)
    return cv2.warpPerspective(img, M, dst_size)

Sobel-filtering

Kleurfiltering alleen kan licht beton verkeerd classificeren als rijbaanmarkeringen. In plaats daarvan gebruiken we gradient-gebaseerde randedetectie. De Sobel-operator berekent horizontale gradienten in de HLS-kleurruimte, wat hoog-contrast rijbaneranden benadrukt en het wegoppervlak onderdrukt.

De resulterende binaire masker is robuust tegen verlichtingsvariaties en wordt gebruikt als invoer voor de glijdend-venster zoekopdracht.

Histogram-piekdetectie

Voordat we het glijdend venster toepassen, identificeren we de benaderde horizontale posities van de rijbaanlijnen door een histogram van de binaire afbeelding langs de x-as te berekenen. De hoogste pieken aan elke kant corresponderen met de linker- en rechter-rijbaanbasis-punten.

Glijdend-venster Zoekopdracht

Vanaf de basispunten verzamelt het glijdend-venster algoritme iteratief pixel-indices die tot elke rijbaan behoren. Het fitst dan een tweedegraads polynoom aan elke rijbaan, wat nauwkeurige krommingsschatting en voertuigpositie ten opzichte van het rijbaanmidden mogelijk maakt.

De finale overlay toont het gedetecteerde rijbaangebied, kromming, en voertuigoffset in real-time.

Lees Meer Details: Gebogen Rijbaandetectie

Productieproces

  1. Foutdetectie & Diagnostiek: Apparatuur Betrouwbaarheid en Onderhoudsefficiëntie Verbeteren
  2. Bewegingsdetectie Alarmsysteem met Java & Reactive Blocks – Implementeren op Raspberry Pi & SMS Sturen
  3. Farmaid: Autonome Robot voor Precieze Plantziektedetectie & Markering
  4. Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
  5. Precisie CNC-frezen voor gekromde oppervlakken
  6. Omron E3AS-F fotoelektrische sensoren bereiken 1,5-meter Time-of-Flight detectie
  7. 8051-gebaseerde Ultrasonische Afstandssensor – Ontwerp, Schakeling en Toepassingen
  8. Inbraakdetectiesystemen: Uw Netwerk Beschermen met Slimme Alerts
  9. Hydra3D ToF Sensor levert snelle, nauwkeurige 3D-detectie voor industriële & outdoor toepassingen
  10. AEye onthult long-range LiDAR die voertuigen tot 1.000 m detecteert voor autonome voertuigen
  11. Microarray Technologie voor Genexpressiedetectie in Klinisch Onderzoek