보케를 시뮬레이션하기 위해 어떤 알고리즘을 사용할 수 있습니까?


12

사진의 각 픽셀을 반복하고 이미지에 보케를 전체적으로 적용하는 스크립트를 작성하려고합니다.

이 링크를 기반으로 스크립트를 작성 했지만 해킹 인 것 같습니다.

흑백 깊이 맵, 사진 및 보케 "브러시"이미지 (현재 육각형)의 세 가지 입력 이미지가 있습니다. 사진의 모든 픽셀에 대해 보케 브러시를 각인하여 해당 픽셀과 해당 픽셀의 색상을 중심으로합니다.

작은 보케 브러시에서는 괜찮아 보이지만 보케 브러시 크기를 늘리면 가우시안 블러처럼 보입니다. 내 알고리즘으로 흐리게 처리 된 타임 스퀘어 사진은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

어두운 가장자리를 신경 쓰지 말고 고칠 수 있습니다.

가우시안과 다르다는 것을 알 수 있지만 여전히 가장자리가 선명하고 보케라고 불리는 것과는 거리가 멀다.

여기에 이미지 설명을 입력하십시오

알고리즘이 수행하는 이유를 이해합니다. 보케를 더 정확하게 시뮬레이션하려면 어떻게해야합니까?



@ 나는 차이점을 이해하고 있으며 Bokeh는 일반적으로 렌즈에 의해 발생하고 가우시안은 후 처리에 의해 발생하지만 Bokeh를 시뮬레이션하고 싶습니다.
엔티티

@Entity : 정확한 깊이 맵으로 샘플 이미지를 어떻게 찾습니까? 당신의 정확한가요? 나는 이것을 직접 시도하고 싶다 (결승 후). 아마 몇 주 후에 답변을 드리겠습니다. 당신이 공개라면, 그 링크를 가질 수 있습니까?
Martijn Courteaux

@MartijnCourteaux 초기 테스트를 위해 평평한 깊이 맵을 사용하여 모든 것이 흐릿합니다. 간단한 지오메트리 (예 : 테이블 위의 컵)의 경우, 잘 보이는 깊이 맵을 만드는 것이 상당히 간단하다고 생각합니다. 더 복잡한 이미지의 경우 실제 깊이 맵이 필요할 수 있습니다. 이것은 두 개의 이미지 또는 단일 이미지에서만 계산할 수 있습니다 .
엔티티

답변:


20

주요 문제는 동적 범위 중 하나라고 생각합니다. 알고리즘은 옳았지만 잘못된 유형의 데이터를 작업하고 있습니다.

그렇지 않으면 순수한 흰색으로 클리핑되고 점이 찍히는 포인트 광원은 초점이 맞지 않는 렌즈에 의해 더 넓은 영역에 퍼져서 밝지 않아서 클리핑되지 않는 디스크를 형성합니다.

그렇기 때문에 실제 보케 이미지에 멋진 원이 생깁니다. 신호를 잘라 내고 (그렇지 않은 경우보다 밝게 만든 다음 보케 시뮬레이션으로 확산하면 눈에 띄지 않아서 현실적으로 보이지 않는 희미한 원 (또는 육각형 등)을 얻을 수 있습니다.

실제 이미지 체인에는 다음이 있습니다.

bokeh (from the lens) -> digitisation (clipping) -> gamma correction & dynamic range compression

당신이하고있는 것은

sharp image -> digitisation (clipping) -> gamma correction & dynamic range compression -> bokeh simulation

선형 데이터로 작업하지 않기 때문에 올바른 결과를 얻지 못합니다.

데이터 선형화, 클리핑으로 손실 된 동적 범위 교체, 보케 시뮬레이션 수행 비선형 작업 재실행이 가능합니다!

다음은 예입니다. 톤맵 된 HDR 이미지로 시작하여 매우 비선형적인 결과를 얻었습니다. 이것은 보케 시뮬레이션을 시도하는 최악의 이미지 유형입니다!

보케를 시뮬레이션하기 위해 표준 컨벌루션 작업을 수행하면 (포토샵의 렌즈 흐림 도구 사용)이 결과를 얻을 수 있습니다.

더 나은 결과를 얻기 위해 나는 극단적 인 곡선을 적용하여 이미지를 톤 매핑 이전의 상태로 되돌리려 고했습니다. 하이라이트는 나머지 이미지보다 훨씬 밝습니다. 레벨 도구를 사용하여 센터 입력을 오른쪽에서 먼 방향으로 1.0에서 약 0.2로 밀어 냈습니다. 그런 다음 이전과 마찬가지로 렌즈 흐림 도구를 적용했습니다. 마지막으로 첫 번째 커브와 반대 방향으로 극단적 인 커브를 적용했습니다. 완벽한 결과와는 거리가 멀지 만 결과는 실제 렌즈 보케와 훨씬 비슷합니다.

 

코드에서이 작업을 수행하는 경우 각 값을 큐빙 한 다음 보케 시뮬레이션 루틴을 적용한 다음 각 값의 제곱근을 구하십시오. 당신은 개선을 볼 수 있습니다. 약간의 조정이 필요할 수 있습니다.

tl; dr 완벽한 수학적 보케 모델을 구현 했더라도 잘리지 않은 선형 데이터에 적용해야합니다. 크게 수정 된 데이터에 동일한 계산을 적용하면 (카메라 JPEG의 표준이 수학적 관점에서 크게 수정 된 경우에도) 매우 다른 결과를 얻을 수 있습니다.


12

우선, 광학 분야에서는 빛만 추가되고 어둠은 없습니다. 알고리즘이 원래 위치에서 어두운 픽셀을 외부로 흘리지 않도록하십시오. 결과 픽셀은 평균보다 주변 소스 픽셀의 최대 값과 비슷해야합니다. 또는 더 정확하게 말하자면 소스 픽셀에 영향을 미치는 로그를 합산 한 것입니다.

마스크의 가장자리가 날카롭지 않은 경우 가장자리가 날카 로워지지 않는 다른 원인이있을 수 있습니다. 참조로 제공 한 페이지의 애니메이션은 마스크에서 원본 픽셀이 밝고 다른 픽셀이 점차 어둡게 잘못 인식 될 수 있습니다. 이것은 계산 된 보케에서 진흙 가장자리로도 변환됩니다. 사진에서 조리개는 점진적인 가장자리가 아니라 명확한 가장자리를 갖습니다. 따라서 실제로 마스크의 대부분의 픽셀은 밝기가 같아야하며 가장자리 만 (픽셀보다 작은 선은 부드러운 선으로 채색되어야 함) 회색 음영일 수 있습니다.

또한 언급 가진 깊이지도 만에 어떤 단어를 사용 하여. 보케 마스크 크기는 픽셀 깊이 및 초점면 깊이 차이와 상관 관계가 있어야합니다. 픽셀이 초점면에서 멀어 질수록 (어느 방향이든) 마스크는 커야합니다. 초점면에서 마스크 크기는 1 × 1 픽셀이어야합니다.


작업이 모두 부가적인 경우 어두운 영역이 퍼지는 문제가 발생하지 않습니다. 날카로운 원을 얻으려면 날카로운 마스크가 필요하다는 것이 사실이지만 주요 문제는 그의 보케 작업이 비선형 데이터에 적용되고 있다는 것입니다.
매트 그럼
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.