Ruby-библиотека обработки изображений VIP-персон.Есть ли какие-нибудь хорошие примеры использования?
-
13-12-2019 - |
Вопрос
Я совершенно новичок в обработке изображений.Я ничего не знаю о том, что такое внутренний формат JPEG и как он работает.
Интересно, смогу ли я найти где-нибудь фрагмент ruby-кода, выполняющий следующую простую операцию:
- Откройте файл jpeg.
- Выполните итерацию по каждому пикселю и установите для него цвет fx green.
- Запишите результат в другой файл.
Меня особенно интересует, как это может быть достигнуто с помощью библиотеки ruby-vips
https://github.com/ender672/ruby-vips
Моя цель - научиться выполнять базовые операции обработки изображений с помощью ruby-vips (гамма-коррекция, яркость, оттенок, ...)
Любые ссылки на рабочие примеры, более сложные, чем "hello world" - например, на странице ruby-vips на github, были бы высоко оценены!
Если есть альтернативы ruby-vips, я был бы благодарен и за них.
Обновить
Многое произошло с тех пор, как я задал этот вопрос:
- ruby-vip-персоны - это драгоценный камень: http://libvips.blogspot.co.uk/2012/06/ruby-vips-launches.html
- полная перепись для vips8, теперь основанная на ruby-ffi
- Репозиторий исходного кода находится здесь: https://github.com/jcupitt/ruby-vips/
- Примеры использования: https://github.com/jcupitt/ruby-vips/wiki/Examples
- Основные концепции обработки изображений vip-персон: https://github.com/jcupitt/ruby-vips/wiki/Basic-concepts
- интеграция ruby-vips в плагин CarrierWave uploader для Ruby on Rails: https://github.com/eltiare/carrierwave-vips
- ruby-vips - один из официальных бэкэндов ActiveStorage в rails6
Решение
Обновить ruby-vips немного изменился с тех пор, как был написан этот ответ.Я переработал его для текущей версии (2018).
Я один из разработчиков libvips, библиотеки обработки изображений, которую использует ruby-vips.
Репозиторий ruby-vips Тима некоторое время никто не трогал.У меня здесь есть форк, который работает с текущими libvips:
https://github.com/jcupitt/ruby-vips
Здесь есть несколько примеров:
https://github.com/jcupitt/ruby-vips/tree/master/example
Чтобы установить красный и синий каналы равными нулю и просто оставить зеленое изображение, вы можете умножить R и B на ноль и G на 1.ruby-vips использует массивы для представления пиксельных констант, так что вы можете просто написать:
out = in * [0, 1, 0]
Полным работоспособным примером может быть:
#!/usr/bin/ruby
require 'vips'
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg'
im *= [0, 1, 0]
im.write_to_file 'x.jpg'
Есть один трюк, который вы можете использовать для new_from_file
:если вы знаете, что будете выполнять простые операции с изображением сверху вниз, такие как арифметика, фильтрация или изменение размера, вы можете сообщить ruby-vips, что вам нужен только последовательный доступ к пикселям:
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential
Теперь ruby-vips будет транслировать ваше изображение.Он будет выполнять загрузку, умножение и сохранение параллельно и никогда не сохранит в памяти более нескольких строк сканирования пикселей одновременно.Это может дать действительно хорошее улучшение скорости и использования памяти.
Чтобы изменить гамму изображения, вы можете попробовать что-то вроде:
im = im ** 0.5 * 255 / 255 ** 0.5
Хотя это будет немного медленно (он вызовет pow () три раза для каждого пикселя), было бы намного быстрее создать таблицу поиска, запустить pow () для нее, а затем сопоставить изображение с таблицей:
lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut
Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь задавать их на странице отслеживания проблем rubyvips:
Другие советы
Мне жаль, что я не знаком с ruby-vips, но ImageMagick - Магия изображений это классика, когда дело доходит до обработки изображений.Существуют привязки Ruby в виде Рмагик (текущее репо), и вы можете извлечь множество функциональных возможностей из документов ImageMagick, но есть также три руководства здесь, а также множество примеров в Интернете.
Если вы действительно хотите углубиться в теорию обработки изображений, которая по своей сути является формой обработки сигналов (это очень увлекательно и полезно, поскольку часто позволяет применять к изображениям очень похожие алгоритмы и аудио / видеосигналы, но в конечном итоге это сильно повлияет на математику - преобразования Фурье), тогда, если математика вас не пугает, я могу только порекомендовать прочитать книга автор Гонсалес и Вудс, я бы сказал, что это определенный ориентир в этой области.Это дорого, но там есть все, что вам нужно для начала работы и далеко за ее пределами. Вот также есть страница со ссылками на бесплатные электронные книги, если вы хотите начать, не тратя сначала много денег.