주요 문제는 동적 범위 중 하나라고 생각합니다. 알고리즘은 옳았지만 잘못된 유형의 데이터를 작업하고 있습니다.
그렇지 않으면 순수한 흰색으로 클리핑되고 점이 찍히는 포인트 광원은 초점이 맞지 않는 렌즈에 의해 더 넓은 영역에 퍼져서 밝지 않아서 클리핑되지 않는 디스크를 형성합니다.
그렇기 때문에 실제 보케 이미지에 멋진 원이 생깁니다. 신호를 잘라 내고 (그렇지 않은 경우보다 밝게 만든 다음 보케 시뮬레이션으로 확산하면 눈에 띄지 않아서 현실적으로 보이지 않는 희미한 원 (또는 육각형 등)을 얻을 수 있습니다.
실제 이미지 체인에는 다음이 있습니다.
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의 표준이 수학적 관점에서 크게 수정 된 경우에도) 매우 다른 결과를 얻을 수 있습니다.