βμ»΄ν¨ν°λΉμ β μμ #2 κ³Όμ β Automatic-Lane-Guidance System
- μ΄μ μκ° μ£Όνν λ νμν μ°¨μ μ 보 κ²μΆ: 2~3μ΄κ° μ£Όνν 거리λ§νΌμ μ°¨μ μ 보. μ°¨μ κ²μΆ κΈ°λ₯
- νμ¬ μ΄λνκ³ μλ μ°¨μ μ μ΄νν κ²½μ°, WARNING β μ°¨μ μ΄ν κ°μ§ κΈ°λ₯
-
Hough Transformμ μ΄μ©ν΄μ λλ‘μ μλ μ μ κ²μΆ
- κ·Έλ μ΄μ€μΌμΌ μμμΌλ‘ λ³ν
- μΊλ μ£μ§ κ²μΆ
- line κ²μΆ
- μ λΆ μ°μ₯ν΄μ μ°¨μ 그리기
-
μ°¨μ μ΄ν κ°μ§
- κ²μΆν μ°¨μ μ μ΄νν κ²½μ°, λΆμ μ warning νμ
π¨Β μ£Όμ: ν°μ/λ Έλμ μ°¨μ λΏλ§ μλλΌ νλμ μ°¨μ λ μ‘΄μ¬ν¨
try 01) νμ€ν κ·Έλ¨ ννν ν, μ£μ§ κ²μΆ
β νλμ μ°¨μ λλ ·ν΄μ§μ§λ§, λλ‘μ λ§λͺ¨λ λΆλΆλ ν¨κ» λλ ·ν΄μ§
try 02) HSVλ‘ λ³ννκ³ , 3κ°μ μ±λλ‘ λΆλ¦¬ν΄μ νλμ κ²μΆμ μν H λ²μ μ‘°μ (40-130)
β νλμ μ°¨μ μ΄ μ£μ§λ‘ μ λλ‘ κ²μΆλμ§ μμ
try 03) HSVλ‘ λ³ννκ³ , 3κ°μ μ±λλ‘ λΆλ¦¬ν΄μ νλμ κ²μΆμ μν H λ²μ μ‘°μ (40-130)
+ Edge detectionμ μν S, V λ²μ λν μ‘°μ
β λλ‘μ λ§λͺ¨λ λΆλΆ(κ²μμ)μ΄ νν°λ§λμ΄ μ£μ§λ‘ κ²μΆλμ§ μμ
1. 1μ°¨ νν°λ§: μ»¬λ¬ λ²μλ₯Ό ν΅ν΄ ν보 μμ νν°λ§
β filterByColor(frame, ROI_colors)
2. RGB μμμ κ·Έλ μ΄μ€μΌμΌ μμμΌλ‘ λ³ν
β cvtColor(ROI_colors, gray, COLOR_BGR2GRAY)
3. κ°μ°μμ λΈλ¬λ‘ μ‘μ μ κ±° ν μΊλ μμ§ κ²μΆ
β Canny(gray, edges, 100, 200)
4. ROI μ§μ ν΄μ μ°¨μ μ κ²μΆν μμ μ ν
μ°¨κ° μ΄λν λλ‘λ₯Ό μ€μ¬μΌλ‘ μ μ κ²μΆν μ μλλ‘ ROI μμμ μ§μ ν΄μ£Όμλ€. μ΄ λ²μ μ΄μΈμ λλ‘μ μ 보λ νμμλ€.
β edges = setROI(edges, points)
5. HoughLineP APIλ₯Ό ν΅ν edgeμμ line κ²μΆ
β HoughLineP(edges, lines, rho, theta, hough_threshold, minLength, maxLineGap)
- μμμ λ¬λ¦¬λ μ°¨, μ§νμ , μ μ°¨μ λ±μμ κ°μ’
lineμ΄ ν¨κ» κ²μΆ
κΈ°μΈκΈ°λ₯Ό ν΅ν΄ νμ¬ μ°¨μ κ²μΆνκΈ°(2μ°¨ νν°λ§)
6. 2μ°¨ νν°λ§: κΈ°μΈκΈ° λ²μλ₯Ό ν΅ν΄ νμ¬ μ°¨μ λ§ κ²μΆ
β detectionLane(mark, detected, lines)
κΈ°μΈκΈ° λ²μ: slope_min_threshold μ΄μ, slope_max_threshold μ΄ν
π‘Β μ€λ₯Έμͺ½ μ°¨μ κ³Ό μΌμͺ½ μ°¨μ κ΅¬λΆ κΈ°μ€
- μ€λ₯Έμͺ½ μ°¨μ μ κΈ°μΈκΈ° > 0, μΌμͺ½ μ°¨μ μ κΈ°μΈκΈ° < 0
- μ€μμ x μ’ν κΈ°μ€
7. μλ³Έ μμμ κ²μΆν μ°¨μ λ³ν©
β addWeighted(frame, 1, detected, 0.2, 0.0, result)
WARNING μν μ μ
- μ°¨μ μ΄νμ κ²½μ°, μ°¨μ μ΄ νλ μμ μ€μ¬μ λ€μ΄μ€κ² λλ€.
- νλ μμ μ€μ¬μ μλ μ°¨μ μ κΈ°μΈκΈ°κ° κ±°μ μμ§μ κ°κΉλ€.
- β κΈ°μΈκΈ°κ° ν° Lineμ΄ νλ μ μ€μ¬μμ κ²μΆλλ©΄ WARNING!
bool warning = false
λ³μ μΆκ°ν΄μ warning 쑰건 κ²μ¬
- κΈ°μΈκΈ° > 2.0 μΈκ°?
- line λμ μ xμ’νκ° μμμ μ€μμ μμΉνλκ°?
- β 쑰건 λ§μ‘±μ, warninig = true
- μ€λ₯Έμͺ½κ³Ό μΌμͺ½μ λν Line κ²μΆ β
detectionLane(mark, detected, lines)
- μλ³Έ μμμ κ²μΆν μ°¨μ λ³ν© β
addWeighted(frame, 1, detected, 0.2, 0.0, result)
#1. κ° λλ‘μ μ°¨μ λ²μμ μ°¨μ΄, μλμ°¨ λμ΄μ λ°λ₯Έ μμ λ²μμ μ°¨μ΄κ° μ‘΄μ¬
- λμ μ°¨μ λ²μλ₯Ό ν¬ν¨νκΈ° μν΄ ROIμ λλΉλ₯Ό λν
- λ λ§μ μ£μ§ κ²μΆ(λΆνμν)
- β 2μ°¨ νν°λ§ μ§ν
#2. μ€μ¬ μ°¨μ (μ€λ₯Έμͺ½, μΌμͺ½) κ²μΆμμ μ¬λ¬κ°μ μ κ²μΆ/κ²μΆλ μ μ νλ€λ¦Όμ΄ νΌ
- μ¬λ¬ κ°μ μ μ΄ κ²μΆλ κ²½μ°, νκ· κ° κ³μ°ν΄μ νλλ‘ μ·¨κΈ
- μ΅κ·Ό κ²μΆν 10κ°μ μ μ μ μ₯νλ save_lines λ²‘ν° μ μΈ
- μ΅κ·Ό λμ λ 10κ°μ μ μ νκ· κ°μ μ΄μ©ν΄ λν line μ§μ
- β μ°¨μ μ΄λ μ, κ²μΆ line λΆλλ¬μ΄ μ΄λ
- 1μ°¨ νν°λ§
- canny edge κ²μΆ
- ROI μμ μ€μ
- λ¬Έμ ν΄κ²°: νλμ κ²μΆ μ€ν¨
- μμ λ³ν(RGB β HSV, λ²μ μ‘°μ ) β νλμ κ²μΆ μ±κ³΅
- 2μ°¨ νν°λ§
- threshold κ° μ‘°μ
- μ°¨μ μ΄ν κ°μ§
- HSVλ‘ κ²μμμ νν°λ§ν μ μμΌλ, νΈλ₯ΈλΉμ κ²μμμ νν°λ§ X
- μ¬λ¬μ€μ΄ κ²μΆλμ΄ lineλ€μ νκ· μ λν lineμΌλ‘ μ§μ νλλ°, νκ· μ΄λ―λ‘ outlierμ λ―Όκ°
- μμ νν°λ§μ΄λ―λ‘ μ‘°λͺ μ λ§μ μν₯ λ°μ