내 이미지 편집 응용 프로그램에는 32 비트 부동 소수점 이미지를 sRGB에서 선형 색상 공간으로 변환하는 함수가 있습니다. 공식은 다음Numpy에서 sRGB를 선형 변환으로 올바르게 벡터화
if value <= 0.04045: (value/12.92)
if value > 0.04045: ((value + 0.055)/1.055)^2.4)
내 화상 img32라는 입체 numpy.ndarray이다. 지금까지
내 구현 :
boolarray = img32 <= 0.04045
lower = (img32/12.92) * boolarray.astype(np.int)
upper = np.power(((img32 + 0.055)/1.055), 2.4) * np.invert(boolarray).astype(np.int)
img32 = lower + upper
그래서, 나는 = <에 대한 0.04045를 진리 값을 갖는 새 배열 boolarray를 생성하고 그 곱입니다.
더 나은 솔루션은 무엇입니까? np.power에 싸여 때 작동하지 않습니다 아마도 때문에
img32[img32 >= 0.04045] = np.power(((img32 + 0.055)/1.055), 2.4)
:
img32[img32 < 0.04045] = img32/12.92
두 번째의 첫 번째 단계에서 작동하지만 실패 : 내가 좋아하는 뭔가를 시도
기능
도움을 주시면 감사하겠습니다.
'더 나은 solution'을 - 어떻게 더 나은? 메모리 또는 현명한 성능? – Divakar
뭔가 좀 더 깔끔 해지는 이유는 이것이 나에게 해킹 비트를 좋아하기 때문입니다. 나는 이것을하기위한 표준 방법을 찾고있다. 속도는 아직 테스트하지 않았지만 (합리적으로 빠름) 기억이 낭비되는 것은 분명합니다. 불분명하게해서 유감입니다. – tde