Мышление: градиент значение и виртуальная глубина с использованием значений пикселей между восстановлением изображения, чтобы имитировать степень изменения яркости интенсивности в соответствии с человеческим зрением.
от в PIL Импорт изображений Импорт NumPy NP AS = np.asarray (Image.open ( ' ./beijing.jpg ' ) .convert ( ' L ' )). asType ( ' поплавком ' ) глубина = 10. # по умолчанию виртуальной глубины 10, диапазон (0-100) Град = np.gradient (а) # извлекает изображения серого значение градиента grad_x, grad_y = Град # были взяты значения градиентного изображения в направлениях х и у grad_x = grad_x * глубина / 100. # регулировка глубины направление х и у значения градиента grad_y grad_y * = глубина / 100 . = np.sqrt (grad_x ** ** 2 + 2 + grad_y. 1 ) . uni_x = grad_x / uni_y = grad_y / uni_z = 1. / vec_el = np.pi / 2.2 # источник верхний угол, в радианах vec_az = np.pi /. 4. # азимутальный угол источника света, радианная значение дх = н.п. .cos (vec_el) * np.cos (vec_az) # источник воздействия ось х Dy = np.cos (vec_el) * np.sin (vec_az) # световой эффект на ось у DZ = np.sin (vec_el) # Влияние света на г-оси B = 255 * (DX + Dy uni_x * * * uni_z uni_y + ДЗ) # источник нормализованное в = b.clip (0255) # избежать данных вне диапазона, генерируемый градаций значения от 0 до урожая -255 диапазон им Image.fromarray = (b.astype ( ' uint8 ' )) # восстановленное изображение im.save ( ' ./beijingHD.jpg ' )
Примечание: Вы должны установить сторонние библиотеки подушку