車線検出アルゴリズム

2696 ワード

1.ガウスファジイアルゴリズム
blur_gray = cv2.GaussianBlur(gray,(kernel_size,kernel_size),0)
Mathematically, applying a Gaussian blur to an image is the same as convolving the image with a Gaussian function.
    ,                     。
Since the Fourier transform of a Gaussian is another Gaussian, applying a Gaussian blur has the effect of reducing the image’s high-frequency components; a Gaussian blur is thus a low pass filter.
                   ,                 ,            。

パラメータ:grayは階調図です.(kernel_size,kernel_size):ガウス行列の長さと幅がkernel_であることを示すsize,3番目のパラメータ0はGauss行列の標準差である.
ガウスファジイは本質的にローパスフィルタであり、出力画像の各画素点は元の画像上の対応画素点と周囲の画素点の重み付け和であり、原理は複雑ではなく、ガウス分布重み行列と元の画像行列をボリューム演算することである.ニューラルネットワーク内のボリューム層のようなボリュームです.
ここで(kernel_size,kernel_size)は、ガウス行列の長さと幅がkernel_であることを示すsize,標準差が0の場合OpenCVはガウス行列の寸法に基づいて自己計算する.要約すると,Gauss行列のサイズが大きいほど標準差が大きくなり,処理された画像のぼかし度が大きくなる.
2.Cannyエッジ検出アルゴリズム
edges = cv2.Canny(blur_gray, low_threshold, high_threshold)

パラメータ:blur_grayはぼやけた階調図である.low_thresholdはしきい値の下限である.high_thresholdしきい値上界;2つのしきい値は勾配の大きさを判断するために使用される.
Cannyアルゴリズムの基本思想は,1枚の画像の中で階調強度の変化が最も強い位置を探すことである.変化が最も強いとは、勾配が最も大きいことを指す.平滑化された画像中の各画素点の勾配は、Sobel演算子(ボリューム演算)によって得ることができる(opencvには、画像中の各画素点のn次導関数を求めるカプセル化された関数がある).
まず、水平(x)と垂直(y)の方向に沿った勾配G_を、以下のような核を用いてそれぞれ求めるXとG_Y.
        K_{GX} = [-1 0 1; -2 0 2; -1 0 1],  K_{GY} = [-1 -2 -1; 0 0 0; 1 2 1] 

その後、各画素点の勾配値を式で求めることができ、
G=Gx2+Gx2‾‾‾‾‾‾‾‾‾‾√ G = G x 2 + G x 2
計算を簡単にするためにG_を使うこともありますXとG_Yの無限大の範数は二の範数に代わる.平滑化された画像の各点をGに置き換えると勾配図が得られる.
Cannyアルゴリズムには二重閾値という技術が適用されている.すなわち、画像中の画素点が閾値上界より大きい場合には、閾値上界と閾値下界(opencvでは通常人為的に指定される)を設定する
high_thresholdは必然的に境界(強い境界、strong edgeと呼ばれる)であり、しきい値の下限より小さいと考えている.
low_thresholdは必然的に境界ではないと考え,両者の間は候補(弱い境界,weak edgeと呼ぶ)と考え,さらなる処理が必要である.
3.ホフ変換
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]),
                        min_line_length, max_line_gap)

パラメータ:edges:二値画像でなければなりません.cannyエッジ検出の結果画像を推奨します.rho:セグメントが画素単位の距離精度、doubleタイプの場合、1.0が推奨されます.theta:線分の弧度単位の角度精度はnpを推奨する.pi/180; threshold:累積平面のしきい値パラメータ、intタイプ、設定しきい値を超えて検出される線分、値が大きいほど、基本的に検出される線分が長いほど、検出される線分の個数が少ないことを意味する.np.array([])このパラメータはプレースホルダであり、結果に影響を及ぼさない.min_line_length:セグメントのピクセル単位の最小長さは、適用シーンに基づいて設定されます.max_line_gap:同じ方向の2つのセグメントを1つのセグメントの最大許容間隔(破断)と判定し、設定値を超えると、2つのセグメントを1つのセグメントと見なし、値が大きいほど、セグメントの破断が大きいほど、潜在的な直線セグメントが検出される可能性があります.