Python 으로 사진의 시정거리 파악하기

안녕하세요,

최근 교육받고 있는 항공교육기관의 기상정보시스템을 만들어볼까 해서 여러모로 알아보고 있습니다.

그중에 비행을 할지 말지 결정하는 가장 중요한 정보중 하나인 시정거리(가시거리)에 대해 이야기 해보려 합니다.

경비행기는 보통 비행 시작전 시정거리가 짧아 위험하다고 생각되면 비행을 하지 않습니다. IFR(계기비행/계기판을 보며 비행하는 방식) 로 비행하면 비교적 안전할수는 있겠지만 여객기와 같은 안전장비가 모두 탑재된 환경이 아니기때문에 VFR(시계비행/주변을 눈으로 보며 비행하는 방식) 환경이 충족되지 않으면 비행을 나가지 않는 경우가 많습니다.

따라서 그만큼 중요한 시정거리를 비행장이나 공항을 가기전에 미리 파악할수 있다면 굳이 비행장까지 가지 않아도 되니 편하지만 시정거리를 측정하는 장비의 가격이 대당 1000만원이 넘어 소형 비행장에서는 쉽게 설치하지 못하는 상황입니다.

일반 공항에서 사용하는 시정거리 측정계는 짧은 거리에서 빛을 투과시켜 통과되는 빛의 양을 측정하여 이 정도면 몇 km 까지 보일것이라는 공식을 가지고 측정하는것으로 알고 있습니다.

우리에게는 눈이 있어서 눈으로 보고 이 정도면 몇 km 정도까지 보이는구나 할 수 있지만 컴퓨터로는 쉽지 않습니다.

그래서 영상처리를 이용하여 안개나 해무, 미세먼지 등을 감지하여 가장 멀리 보이는 곳을 파악하는 Python 프로그램을 만들었습니다.

Github 링크 : https://github.com/taylor224/visibility_detection_system

 

이 프로그램은 Contrast 방식으로 제작되었으며, 이미지의 콘트라스트 값을 가지고 가장 콘트라스트 값들이 높은 곳의 위치를 찾는 프로그램입니다.

보통 이미지의 윗부분이 거리가 가장 멀고 아랫부분이 거리가 가깝기 때문에 이 프로그램도 위에서 아래로 내려가며 물체가 보이는 위치를 찾게 제작되었습니다.

본 사진은 맑은 날 촬영된 사진으로 아주 멀리있는 산까지 보이는것을 확인할수 있습니다.

하지만 본 사진의 윗부분 부터 처리를 하게 되면 하늘이 측정범위에 들어가기 때문에 아래와 같은 타겟팅을 해주어 하늘을 제외하고 땅만 처리하도록 해줍니다.

흰색 부분만 분석하도록 프로그램을 제작하였고 선명하게 보이는 곳을 찾기 위해서 콘트라스트 분석을 진행합니다.

해당 분석을 진행한 이미지 결과입니다.

위 사진에서 보시다시피 타겟으로 지정된 땅 부분을 위에서부터 아래로 내려가며 가장 선명한 부분을 찾기 때문에 가장 윗쪽이 선택된 것을 볼 수 있습니다.

그럼 최종 결과값을 보면 이렇게 됩니다.

위 사진을 보면 시정거리가 거의 맞게 표시가 된 것을 볼 수 있습니다.

 

그럼 안개낀 날을 보겠습니다.

본 사진의 윗부분은 안개와 미세먼지로 가려져 잘 보이지 않는것을 볼 수 있습니다.

그럼 본 사진을 콘트라스트 분석을 통해 분석하면 아래와 같은 결과가 나오게 됩니다.

눈으로 보일락말락 하는 정도의 수준에서 시정거리를 측정한것을 볼 수 있습니다.

그럼 실제 이미지에 합성한 최종사진을 보겠습니다.

아주 정확하진 않지만 대략적으로 맞는것을 볼 수 있습니다.

카메라 성능과 위치, 주변환경에 따라 시정거리 측정 감도가 달라질수 있으므로 해당 프로그램에서는 해당 감도를 조절할수 있도록 구현해놓았습니다.

보통 시정거리를 측정하는 카메라는 고정되어 설치되기 때문에 처음 한번만 셋팅해주면 건들일 일은 별로 없을것으로 보입니다.

 

지금까지 구현된것은 이미지를 영상처리 하여 보이는 곳까지를 표시하는 것이었고 앞으로 구현해야 될 것은 이미지의 위치들을 실제 거리와 맵핑하여 해당 위치가 현재 위치에서 몇 km 떨어진 곳인지를 알 수 있도록 하여 최종적으로 오늘의 시정거리가 몇 km 인지 파악할수 있도록 하는 것 입니다.

그건 2편으로 찾아뵙겠습니다!

 

본 프로그램은 본 Github 를 참고하여 제작되었습니다.https://github.com/ZhengPeng7/detect_visual_limits

Leave a Reply

Your email address will not be published. Required fields are marked *