今回は、手順の2番目と6番目についてです。
1.PiCameraから画像の取り込み
2.オリジナル画像から作業領域をクロップ
3.画像をBGRからHSVへ変換
4.OpenCV – inRangeで画像を2値化
5.OpenCV – cannyによるエッジ検出
6.region of interest(注目する領域)を設定
7.OpenCV – HoughLinesPによる直線の検出
私の環境でPiCameraで撮影したオリジナルの画像は例えば下の写真のようになっています。
私たちが必要としているのは、これから車が進むであろう写真中央部の道路の位置情報(中央はどのあたりか?)ですから、写真上部はこの後の作業には要らない部分であり、そればかりか後の作業で不要な線分を拾ったりして、多くのノイズを発生させる原因ともなり得ます。また足元に近い部分も不要になりますので、必要と思われる部分だけを切り取ることにしました。これが2番目の操作です。
# オリジナル画像から作業領域をクロップ cropped_image = image[int(Image_height/2):int(Image_height/2+100), 0:int(Image_width)]
画面中央の高さから100ピクセルほどの高さの画像を切り取っています。
さらに少しでもノイズを拾わないために、下の画像のピンク色の台形で囲った部分だけを以下の処理に使うことにしました。これが6番目の操作です。
def reg_of_interest(image): Image_height = image.shape[0] Image_width = image.shape[1] polygons = np.array([[(100, 0),(0, Image_height), (Image_width-40,Image_height), (Image_width-100, 0)]]) image_mask = np.zeros_like(image) cv2.fillPoly(image_mask, np.int32([polygons]), 255) masking_image = cv2.bitwise_and(image,image_mask) return masking_image
切り取る台形の形は適当に決めています。
これで画像データの前処理は終了です。次回は最終回、その画像から中央の位置を数値化します。
今回、カメラで撮った写真を元にライントレースして、PiCar-Xを自動走行させていますが参考テキストそのままでは上手くいきません。参考テキストでの走行環境、私の走行環境、その他の環境で条件パラメーター(いわゆるハイパーパラメーター)を変えていかないと上手く動かないようです。
0 件のコメント:
コメントを投稿