인접차량인식 PGM FOR ADAS
Contents 1 Introduction 2 Method & Function 3 Trial and Error & Improvement
1 Introduction 21 세기 < 기계로서의자동차 > < 자율주행자동차 > 사람이직접제어 컴퓨터가자율적으로제어
PGM 의목적 Recognition Information V2V Communication
구현요건및필요기능 구현 Tools Distance Speed Status 영상처리라이브러리인 OPENCV 다양한기능구현가능한 Visual Studio C++ Position Real time + 실시간영상처리가가능한 CAM
2 Method & Function 컴퓨팅 앞차와의정보송신 앞차량 Driver 뒤차량 뒤차와의정보송신 컴퓨팅
Blob Labeling 인접한 Blob 에모두같은번호 (Label) 를붙이고연결되지않은다른성분에는다른번호를붙이는일 이진화 Gray 화
Blob Labeling 의원리 (1) 좌측상단부터검색하여최초로만난하얀픽셀 (value=255) 의 num=1 로설정 현재픽셀의방문기록을 True 로설정 ( 초기값 = false 인상태 ) 상하좌우인접한픽셀중값이 255 이고방문기록이 False 인픽셀의 num=1 로설정 픽셀의방문기록 True, 회귀좌표 (2,2) 로설정 상하좌우인접한픽셀중값이 255 이고방문기록이 False 인픽셀의 num=1 로설정 픽셀의방문기록 True, 회귀좌표 (2,3) 로설정
Blob Labeling 의원리 (2) 상하좌우인접한픽셀중값이 255 이고방문기록이 False 인픽셀이없으므로회귀좌표 (2,3) 를통해이전픽셀로돌아감 상하좌우인접한픽셀중값이 255 이고방문기록이 False 인픽셀이없으므로회귀좌표 (2,2) 를통해이전픽셀로돌아감 회귀좌표가없어이전픽셀로돌아갈수없으면루틴종료 이어서다시우측으로검사후 Value=255 이고방문기록이 False 인픽셀찾으면 num=2 로지정하며위의루틴반복수행
Labeling 을통한 Draw Rect 번호판영역추출 잡영제거 Which Rect? 비율크기위치
잡영제거 비율 신형번호판의가로 : 세로비율이약 4:1 임을미루어보아 3:1 ~ 5:1 내의레이블만인식하도록함 크기 최대최소크기의제한을둠으로써화면의 90% 이상차지하는레이블, 약 40 pixel 이하의레이블은제거 위치 번호판으로인식되는레이블의좌측상단좌표는전체화면 width/2, height/2 에존재하므로이외의레이블은제거 + Some Else Idea ( Position of CAM 최적화, Optimized Threshold Value)
function 구현 영상 1,2 1 거리및속력 speed=((-0.3303)*(double)blob.m_recblobs[i].width +227.38-num)*9; num=(-1)*(double)blob.m_recblobs[i].width/3 +231; if(num < 90) cvputtext(image, "Warning", cvpoint(460, 50), &font, cvscalar(0, 0, 255, 0)); tmp=1; 속도 거리 상태 전 frame 의거리이용 1 초당 frame 수계산 실제측정한거리당 Label Width 비교 거리를이용한안전성
function 구현 영상 5,6 2 후방차량위치표시 CvPoint ptm = cvpoint( blob.m_recblobs[i].x + blob.m_recblobs[i].width/2, blob.m_recblobs[i].y + blob.m_recblobs[i].height/2); // if(ptm.x < image->width*3/8) cvputtext(image, "->", cvpoint( 500, 450), &font,cvscalar(0, 0, 255, 0)); if(ptm.x > image->width*5/8) cvputtext(image, "<-", cvpoint( 50, 450), &font,cvscalar(0, 0, 255, 0)); 블랍 조건 출력 pt1 과 pt2 의중심으로블랍의위치선언 화면의좌측우측임을전체비율로판단 좌 / 우측의화살표로차량을나타냄
function 구현 영상 3 3 초근접상태시경고표시등지속 if(num < 90) cvputtext(image, "Warning", cvpoint(460, 50), &font, cvscalar(0, 0, 255, 0)); tmp=1; if(tmp==1) cvputtext(image, "Warning", cvpoint(460, 50), &font, cvscalar(0, 0, 255, 0)); 출력 조건 유지 기능 1 warning 일때변수 tmp 의값을지정 Tmp 입력받아 warning 유지
function 구현 4 특정 Key 입력시기능 On/Off 영상 4 flow; if(c == 32) while(1) c=cvwaitkey(80); cvgrabframe(capture); image2 = cvqueryframe(capture); cvshowimage( "car video", image2 ); cvwriteframe( writer, image2 ); if(c==32) goto flow; 처리영상 space space 원본영상
function 구현 영상 7,8 5 차선변경위험감지 cvputtext(image, "entry", cvpoint( 200, 450), &font, cvscalar(0, 0, 255, 0)); l=1; if(l==1) if(y!=50) cvputtext(image, "entry", cvpoint( 200, 450), &font, cvscalar(0, 0, 255, 0)); y++; else if(y==50) y=0; l=0; 출력 조건 부가 좌 / 우측의화살표로차량을나타냄 좌우측차량의근접성 후방차량의접근으로좌우차선변경경고
function 구현 영상 11 6 일정조도이하 Light on 권고 for(int i=0;i<gray->width;i=i++) for(int j=0;j<gray->height;j=j++) int index = i + j *gray->widthstep; unsigned char value = image->imagedata[index]; sum = sum + value; int avg= sum/((gray->height)*(gray->width)); if(avg<100) cvputtext(image, "light on", cvpoint( 500, 230), &font, cvscalar(0, 255, 0, 0)); // light on 조건 조건 부가 gray image 의각픽셀값의평균 0 255 scale 중문턱값판정 기준이하어두운화면에 light 출력
function 구현 Front View CAM Rear View CAM
3 Trial and Error & Improvement (1) 거리공식 Trial and Error Solution 카메라의왜곡으로인해하나의식으로거리를표시할경우에특정거리에서오차가생김 1 차방정식으로표현할경우수의변화가비교적제한적 최소자승법을통해최소의오차율을가진식을구함 일차방정식이아닌역수식을통해나타냄으로써다양한수의변화표현가능
Trial and Error CAM 과 PGM 내의 WaitKey Delay 를복합적으로고려해야했기에초당 Frame 수를얻는데어려움을겪음 (2) 속력 Solution 다양한경우에서 Waitkey Delay 를달리하며실시간으로 Stopwatch 의시간과 Frame 수를확인하면서비교적구체적으로속력을구할수있게됨 Trial and Error (3) Code Optimization Solution While LOOP 내에서다양한조건문과 Labeling 을실시하면서일반영상보다작업을수행하는데 Delay 가생김을확인함 LOOP 낭비를최소화시키며기능 ON/OFF 시의재생속도가서로같도록코딩을최적화시키며끊임없이수정
Improvements V2V ADAS 자율주행자동차로서차량간통신, 정보전달에있어중요한역할 Optimized With Other Devices 적외선, 초음파센서등의기기와상호보완기능성과정밀성향상 Various Function Make it Detailed 날씨, 온도, 이정표인식등다양한기능추가및연동 보다높은정밀성신뢰성및안전성확보