Выполнение фильтра «Светимость» в Photoshop

У меня есть два JPEG и хотелось бы накладывать один на другой с теми же результатами, что и режим «Luminosity», доступный в Photoshop (и Fireworks). Вы можете больше узнать о режиме Luminosity здесь: http://www.adobetutorialz.com/articles/662/1/Photoshop%92s-Luminosity-Mode

Как я могу это сделать? Язык программирования не имеет большого значения, но я лучше всего владею Python и PHP (в этом порядке). Библиотека изображений Python выглядит идеально, но яркость не является встроенной функцией, и я не знаю правильной процедуры. См. Http://effbot.org/imagingbook/imagechops.htm

Я не знаю об этом конкретном фильтре, но я могу рассказать вам, как следовать шагам Coincoin в PIL . Я действительно не запускал код, но вы можете использовать его в качестве ссылки:

Загрузите как исходные, так и целевые файлы JPEG

from PIL import Image img1 = Image.open('image1.jpg') img2 = Image.open('image2.jpg') 

Преобразуйте пиксели из цветового пространства RGB в цветовое пространство L или b (или любое другое цветовое пространство с информацией luminosirty)

 # Color matrix for Lab colorMatrix = ( x1, y1, z1, 0, x2, y2, z2, 0, x3, y3, z3, 0 ) img1 = img1.convert("RGB", colorMatrix) img2 = img2.convert("RGB", colorMatrix) 

Сохранять целевые цветовые каналы и заменять его канал яркости по яркости источника

 l1, a1, b1 = img1.split() l2, a2, b2 = img2.split() img1.putdata(zip(l1.getdata(), a2.getdata(), b2.getdata())) 

Преобразование обратно в пространство RGB

 # Color matrix for RGB RGBcolorMatrix = ( x1, y1, z1, 0, x2, y2, z2, 0, x3, y3, z3, 0 ) img1 = img1.convert("RGB", RGBcolorMatrix) 

Сохранить JPEG

 img1.save('new_image.jpg') 

Сначала вам нужно понять, что делает Photoshop.

Он сохраняет информацию о цвете восприятия слоя и заменяет ее яркость информацией о перцептивной освещенности верхнего уровня. Для этого вам нужно преобразовать изображения в нужное цветовое пространство.

Вот список покупок, который вам нужно будет сделать, если вы решите реализовать все самостоятельно:

  • Загрузите как исходные, так и целевые файлы JPEG
  • Преобразуйте пиксели из цветового пространства RGB в цветовое пространство L или b (или любое другое цветовое пространство с информацией luminosirty)
  • Сохранять целевые цветовые каналы и заменять его канал яркости по яркости источника
  • Преобразование обратно в пространство RGB
  • Сохранить JPEG

Если вы считаете, что Лаборатория слишком сложна, вы также можете использовать цветовое пространство HSL, это намного проще, но это даст более низкие результаты.

В псевдокоде:

 foreach rgb_pixel1, rgb_pixel2 in image1, image2 { hsl1 = RgbToHsl(rgb_pixel1); hsl2 = RgbToHsl(rgb_pixel2); hsl3 = hsl(hsl1.h, hsl1.s, hsl2.l); output_rgb = HslToRgb(hsl3); } 

Конверсия из rgb в hsl и обратно здесь .

Gimp был бы еще одним вариантом – он имеет интерфейс сценариев и api python – вот статья о светимости и Gimp . Не уверен, что это тот же эффект, что и вы.

Вы можете посмотреть библиотеку обработки изображений OpenCV . Он имеет привязки Python и обрабатывает многие из этих задач управления изображениями меньшего уровня для вас или, по крайней мере, облегчает их работу.