매트랩 비교과 마지막 수업날 교수님께서 이미지 프로세싱에 관해 짧게 말씀 해주셨다.
요즘 핫한 자율주행에서 이용되는 이미지 처리 방식도 매트랩에서 간단하게 구현할 수 있다.
예를들어 자동차 범퍼쪽에 카메라를 달고 도로사진을 찍는다고 가정해 보자.
카메라로 찍힌 화면에는 차선, 앞차, 가로등, 사람 등 수많은 요소들이 보일 것이다.
그중 차선만 골라내도록 이미지프로세싱을 할 수 있다는 얘기를 하셔서 심심하니까 한번 해보자.
문제해결방법
1. 우선 인터넷에서 도로사진을 다운받은 후 매트랩에서 호출한다.
%% 이미지 불러오기
I=imread('road.jpg');
imshow(I);
이 사진은 r, g, b가 전부 혼합되어 있어서 곧바로 도로만 구분하기란 불가능 하다.
2. 따라서 해당 이미지에서 r, g, b영역만 추출하여 각각의 색깔 영역에서 관측한다.
%% 색깔별 영역 관찰
Im=I;
rmat=Im(:,:,1);
gmat=Im(:,:,2);
bmat=Im(:,:,3);
subplot(2,2,1),imshow(rmat);
title('Red Plane');
subplot(2,2,2),imshow(gmat);
title('Green Plane');
subplot(2,2,3),imshow(bmat);
title('Blue Plane');
subplot(2,2,4),imshow(I);
title('Original Image');
3. 각각의 색상 구역에서 임계값을 설정 후 도로부분이 선명하도록 조절한다.
이러한 과정을 이미지의 이진화라고 한다. (black & white로만 표현하기 때문)
%% 색상별 임계값 설정
levelr=0.67; //소수점을 조절하면 휘도설정 가능
levelg=0.68;
levelb=0.61;
i1=imbinarize(rmat,levelr);
i2=imbinarize(gmat,levelg);
i3=imbinarize(bmat,levelb);
Isum=(i1&i2&i3); //세개의 영역에 있는 이미지를 전부 합치면 보다 명확한 이미지 추출가능
% 그래프 그리기
subplot(2,2,1),imshow(i1);
title('Red Plane');
subplot(2,2,2),imshow(i2);
title('Green Plane');
subplot(2,2,3),imshow(i3);
title('Blue Plane');
subplot(2,2,4),imshow(Isum);
title('Sum of all plane');
세개의 이미지를 만든 후 전부 더하면 차선의 경계를 더욱 명확하게 구분 할 수 있다.
(많은 데이터가 모여야 더욱 적확한 정보를 얻을 수 있기 때문)
마지막에 나온 화면을 보면 도로의 차선 부분이 선명하게 나왔지만 하늘도 하얗게 나온것을 볼 수 있다.
실제로 자율주행을 한다면 이런 이미지로 주행을 할 수 없다.
이를 해결하기 위해서는 도로부분의 영역만 인식하도록 설정하는 방법이 가장 좋지만
매트랩에서 그러한 기능을 어떻게 하는지 도저히 알아낼 수가 없었다.
사실 이미지 프로세싱에서는 open cv라는 툴을 많이 사용하고 매트랩은 음성신호, 그래프(신호)해석을 위주로 하는 것 같다.
따라서 고심끝에 도달해 낸 방법은 매트랩 영상처리 툴에서 지원하는 '영상 분할기'를 통해 배경과 차선을 구분 해 보겠다.
4. 마지막으로 생성된 이미지를 jpg혹은 png파일로 저장하여 영상분할기에서 호출한다.
해당 화면에서 범람 채우기라는 메뉴를 누르면 태두리로 감싸진 부분을 칠할 수 있다.
따라서 차선 부분을 칠해준 후 다시 이진화를 시켜주면 차선만 명확하게 구분을 할 수 있다.
이로써 r, g, b 이미지에서 차선영역만 구별한 이미지를 도출해 냈다.
(다른 이미지 처리)
사실 이번 이미지프로세싱에는 부족한점이 많다.
이번 과정은 단일 이미지 하나만 색상에 따라 이미지를 추출 해 낸 반면
실제로는 카메라를 통해 실시간으로 이미지를 매우 빠르게 처리를 할 수 있도록 구현해야 한다.
또한 화면에서 도로와 배경의 구역을 따로 설정한 후 배경은 인식하지 못하도록 도로의 차선만 구별해 내도록 하는것이 가장 정확한 방법이다.
다음에 기회가 되면 딥러닝과 open cv를 이용해서 더욱 정확한 이미지 프로세싱을 해 보겠다.
'MATLAB' 카테고리의 다른 글
[MATLAB] Exponential Random Variable(지수분포) (1) | 2021.11.01 |
---|---|
[MATLAB] 이산확률변수(Discrete Random Variable) (0) | 2021.10.31 |
[MATLAB] 신호의 주파수 해석(Fourier Analysis in Frequency Domain) (0) | 2021.07.10 |
[MATLAB] 악보 만들고 연주하기 & 파형분석 (0) | 2021.07.10 |
[MATLAB] 이미지 분석 & 히스토그램(RGB histogram) (0) | 2021.07.09 |