본문 바로가기

내가 작업한 것들/소프트웨어

보케 효과를 만들어 보기 #2 - 성능향상


 이 글은 이전 "보케 효과를 만들어 보기 #1" 에 이어지는 글 입니다. 혹시 이 글을 이전 글 보다 먼저 보신 분은 먼저 앞선 글을 읽고 오시면 더 이해 하시기 편할 것으로 예상 됩니다.


향상된 보케(빛망울) 효과

 이전 글 에 소개된 보케효과 알고리즘은 0.1 초판으로서 현재 마지막 0.1.7.31 버젼에 비해 많은 것들이 모자란 버젼 이었습니다만, 그간 짬짬히 여러 문제를 수정 하고 성능을 비약적으로 향상 하여 근대의 다중 코어 CPU ( x86 및 ARM 계열 모두 해당 됨 ) 들에서 가장 효과적인 구동을 하도록 발전 하였습니다.

 그 중 몇가지 수정 사항은 먼저, 효과를 적용하면서 발생하던 메모리 누수 ( 제 실수 였습니다만 ) 를 제거 하고, OpenMP 의 효과적인 구동으로 각 CPU thread 가 wait 가 발생하여 사용률이 저하되고 시간이 오래 걸리던 것을 최소 2배에 가까운 성능을 내도록 하였습니다.

 또한 필터 알고리즘 상 발생하는 이미지 쉬프팅 현상을 제대로 계산하도록 하였기 떄문에 효과를 준 영상의 이미지가 살짝 오른쪽과 상단으로 이동하여 만들어 지는 문제점과, 이미지 주변부에 없던 빛망울이 생기던 고스트 현상을 제거 하였습니다.

분당에 살 떄 찍은 오래된 사진 원본

개선된 알고리즘으로 만든 결과 ( omask 16x16 )

또한 부동소수점으로 연산치환 되는 빛의 intesity(강도) 도 80% 에서 90% 도 높게 잡아 좀 더 강한 빛에 빛망울이 맺히도록 하였습니다.

 또한 근래 고성능 CPU 에서는 Core 갯수에 따라 더욱 더 빠르게 결과를 볼 수 있도록 OpenMP 처리 부분을 개선 하였기 떄문에 다음과 같은 성능 발전을 이뤄 냈습니다.

0.1.5.28 버젼 성능

0.1.7.31 성능

0.1.5.28 버젼에서는 이전의 간단한 OpenMP 만을 쓰도록 디자인 되어 Intel Core i7-7700 에서 16x16 짜리 보케 마스크를 사용하 약 4.2 초의 처리속도를 보인 반면, 최신의 0.1.7.31 에서 2배에 가까운 2.4초만의 시간을 소비하였습니다. 또한 이런 성능향상은 물리적인 thread 수가 많은 ARM Cortex A53 이상에서 더욱 더 효과적으로 구동될 수 있습니다.


아직 남은 문제점

 처음 만들어진 알고리즘이 완벽하지 않은 단점들이 있다 보니, 다음 이미지 처럼 색상이 틀어지는 듯한 문제점이 발생 하는 경우가 있습니다.

자세히 보면 우측 상단에 좀 더 밝아 보이는 부분의 색이 왜곡되어 붉은 빛망울이 남은 결과가 생기는데, 이는 알고리즘상 간단히 RGB 채널이 90% 에 해당하면 단순히 intensity 를 3배로 올리는 알고리즘 때문에 발생 하는 문제점 입니다. 이를 좀 더 실제 낮은 심도의 렌즈에서 만들어진 결과처럼 되려면 전체 illumination 을 측정 하고, 이에 기준하여 intensity 기준을 정하도록 설계가 변경 되어야 합니다. 물론 이로 인해 처리 속도는 더 느려질 것으로 보입니다만 결과는 정말 낮은 심도의 렌즈로 찍은 효과를 낼 수 있을 것으로 기대 하고 있습니다.


앞으로 남은 실험들

 이미지 한장으로는 어렵겠지만, 함꼐 찍힌 교차된 2장의 스트레오 이미지가 있을 경우, 이론상으로 해당 피사체의 depth 를 알수 있으므로, 이에 따라 보케 마스크의 크기를 조정하여 여러 단계로 처리 할 수 있게 됩니다. 이런 경우 초점을 맞추는 위치는 필터링을 주지 않고, 해당 영역 외엔 필터링을 거리에 맞게 적용하게 되면 거의 DSLR 등에서 찍은 낮은 심도의 이미지 그대로를 표현 할 수 있게 되고, 이는 아마 아이폰7+ 과 같이 포트롤리오 촬영과 동일한 결과로 나올 수 있게 될 것으로 예상 하고 있습니다.

 또한 이미지를 처리 하기 전에 계조를 비약적으로 향상 하는 기존에 만들어 둔 HDR 중 Reinhard 알고리즘을 응요하게 되면 이미지의 Dynamic range 로 부터 얻어지는 illumination 을 구함은 물론, 좀 더 밝거나 화사한 이미지를 만들면서, 이에 따른 좀 더 아름다운 빛망울을 만들어 낼 수 있지 않을까 하는 예상을 하고 있습니다.


오픈소스

 본 프로젝트는 100% 오픈소스로서, 다음 위치에서 누구나 참여하거나 자신의 프로젝트로 fork 할 수 있습니다. 혹시라도 좀 더 뛰어난 분이 이에 참여를 하실 기회가 있으면 더 좋겠습니다만 ... 희박하겠죠.


윈도우즈 64 용 프리릴리즈 다운로드

 또한 타 POSIX 호환 플랫폼과 달리 빌드 환경 조성이 어려운 윈도우즈에 한해서 다음 프리 릴리즈 다운로드를 지원합니다. 아래 URL 에서 미리 빌드된 console 용 프로그램을 버젼별로 받을 수 있습니다.


추가 테스트 이미지

 위에 소개된 소스코드 위치에 testimgs 디렉터리 안에 제가 예전에 찍은 분당의 대충 찍은 야경 외에도 빵 이미지나, 16x16 짜리 마스크 이미지를 테스트로 써 보시려면 아래 첨부파일을 사용해 주시기 바랍니다.

fltk_bokeh_effect_additional_images.zip