카테고리 없음

[자율주행자동차대회] 차선 검출을 위한 기본 영상처리 이론

흑요석s 2023. 5. 21. 13:15

 

- color space 변경 (00:15:00~) : RGB -> HSV

 

- Image Thresholing  (01:11:00~) : 임계값을 처리함 ( 예 : 차선검출 시 노란색 OR 흰색 차선만 검출)

-  Simple Thresholding [cv2.threshold()]
-  Adaptive Thresholding [cv2.adaptiveThreshold()]
- Otsu's Thresholding

- Geometric Transformation (01:24:00~ ) : 기하학적 변환 ( 예 : 차선을 인식할수 있는 형태로 변환)

- Translation : 이동변환, 크기와 각도 보존
- Euclidean(Translation + Rotation) : 이동+회전, 크기와 각도 보존
- Similarity (Euclidean + Scaling) : 이동+회전+크기, 각도 보존
- Affine : 이동+회전+크기+반전, 3개의 점 기준으로 선 수평성을 유지하며 변환
- Perspective(Projective) : affine + 수평유지x , 4개의 점 기준 변

- Image Smoothing(01:37:30~) : 이미지 필터링 1단계 (예 : 부드럽게 만드는 작업)

- 고주파 이미지 : 밝기 변화가 많은 곳 (경계면)
- 저주파 이미지 : 밝기 변화가 적은곳 (일반적인 배경)
- LPF(Low Pass Filter) : 고주파 영역 제거 ( blur 처리 : 노이즈와 경계선 흐리게 함.)
- HPF(High Pass Filter) : 저주파 영역 제거 ( 경계면 검출 : 배경 사라짐 )
- [cv2.filter2D()] 를 이용하여, 이미지에 필터(커널) 적용
- 커널 : 적용할 필터에 해당하는 행렬 => 행,열의 개수가 많을수록 이미지 전체가 blur처리가 많이 됨.

<filter 적용 방식>
- 이미지의 각 픽셀에 커널 적용
=> 5x5 윈도우를 올리고, 그 영역에 포함된 값을 곱하여 더한후, 25로 나누어서 현재 픽셀에 대입
(곱들의 합) / N   ==> 윈도우 내부의 평균값으로 픽셀값 병

- Averaging : Box 형태이 커널 적용, 평균값으로 변환
- Gaussian Fitering : Gaussian 분포(함수)의 커널 적용, 사이즈는 양수&홀수로 지정해야함. Gaussian Noise제거에 좋음.
- Medean Filtering : 커널에 있는 값들을 정렬후 중간값 사용, salt-and-pepper noise 제거에 효과적.
- Bilateral Filtering : 경계선 유지하면서 Gaussian Blur를 처리함. 두개의 Gaussian 필터 적용하여 필터링.

- Morphologicla Transformation(02:01:00~) : 이미지를 Segmentation 하여, 단순화&제거&보정을 통해 형태를 파악하기위해 사용.

=> 이진화된 이미지(흑백)에 사용 

Erosion : Structuring Element를 적용해 하나라도 0이 있으면 대상 픽셀 제거
=> 작은 Object 제거

Dilation : Structuring Element를 적용해 겹치는 부분이 하나라도 있으면 이미지 확장
=> 경계면 부드럽게, 비워진 픽셀 채우기

Opening (Erosion => Dilation) : 작은 Object & 돌기 제거에 적합
Closing(Dilation => Erosion) : 전체적인 윤곽파악에 적합

 

- Image Gradient(03:25:00)

- Sovel & Scharr Filter : Gaussian Smoothing과 미분 활용, X축과 Y축을 미분하여 경계값 계산
- Laplacian : 가로&세로에 대한 Gradient를 2차 미분한 값, Sobel Filter에 대해 미분의 정도가 더해진 것과 결과물이 비슷함. Blob 검출 사용됨.

- Canny Edge Detection
1. Noise Resuction -> 5x5 Gaussian Filter를 이용하여, Noise 제거
2. Edge Gradient Detection -> 이미지에서 Gradient의 방향 및 크기를 확인 후, 경계값 후보군 선별
3. Non-Maximu Superssion -> 이미지에서 전체 픽셀을 확인, Edge가 아닌 픽셀 제거
4, Hysteresis Thesholing -> 현재까지 Edge로 판단된 결과를 진짜 Edge인지 확인하는 작업.
=> 최소및 최대값 지정해 약한 edge와 강한 edge 구분 후, 두 edge가 연결되어있으면 남기고 아니면 제거.

 

- Image Pyamid(03:27:00) : 동일 이미지의 다른 사이즈 set [cv2.pyrUp(),cv2.pyrDown)


1. 두개의 이미지에 대해 Gaussian Pyramid 생성
2. Gaussian Pyramid를 이용하여 Laplacian Pyramid를 생성 
3. Laplacian Pyramid를 이용하여, 좌측 및 우측 결합
4. 가장 작은 이미지를 확대하면서 같은 사이즈의 결합 결과와 Add 하여 외곽선을 선명하게 처리.

결과

 

- Image Contours : Contour을 찾고 Contour을 그림. 

=> 대상의 외형을 파악하는데 사용.

- Contour : 동일한 색,강도를 가지고 있는 영역의 경계선을 연결한 선.(등고선과 같은 역할)

 

 

- Image Histogram(03:41~) : 이미지의 밝기의 분포를 그래프로 나타낸것 (이미지의 밝기 분포 및 채도확인)

- Histogram : 이미지의 밝기 그래프를 나타낸 그래프, 전체 이미지의 밝기 분포 및 채도 확인
=> [cv2calcHist(image,channels,mask,histSize,rages[, hist[,accumulate]])
(channels = 분석 채널, grayscale이면 [0], color면 [0],[0,1] 처럼 사용
(mask = 분석영역, None 값이면 전체이미지 분석)

Histogram Equalization : 히스토그램이 특정영역에 집중되어 있지 않게, 골고루 분포시키는 작업

- CLAHE(Contrast Limited Adaptive Histrogram Equalization)
: 밝기의 불균형이 심해, 일반적인 Histogram Equalization 으로는 좋은 처리가 되지 않는 경우, 이미지를 나누어서 나누어진 영역에서 Equalization을 적용하는 방법.

 

 

- Templae Matching (03:48:00~): 원본 이미지에서 특정 이미지를 찾는 방법. cv2.matchTemplate()함수 이용

- 원본 이미지에 템플릿 이미지를 좌측 상단부터 이동하면서 비교 진행.
- Return의 결과는 흑백이미지로, 원본과 템플릿이 유사한 정도를 나타냄.
- cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED는 가장 어두운 곳이 매칭 지점이며, 나머지 방법은 밝은 곳을 기준으로 함.

 

- Hough Transformation : 이미지에서 모양을 찾는 방법. 이미지의 형태를 찾거나 누락&깨진 영역 복원할 수 있음.

- 허프 변환의 직선 방정식을 사용하며, 특징 점에서 r=xcon + ysin 의 식을 통해 세타를 변환 시키고 (r,세타) 2차원 배열 구함.

- 여러 점에 대해서 위의 과정을 반복한 후, r, 세타에 대한 그래프를 구한 후, 그래프의 선이 만나는 교점이 직선인 확률이 높은 점을 의미.