Манипуляция изображениями iOS (искажение)

Я изначально подошел к этому вопросу, имея в виду CoreImage (потому что мне тоже нужно делать распознавание лиц), но понял, что, к сожалению, фильтры CI Distortion еще не включены в iPhone.

Я попытался погрузиться в GLImageProcessing, CImg и ImageMagick, хотя у меня было много проблем с поиском отправной точки для изучения любого из них.

Учитывая количество приложений, которые искажают изображение, я знаю, что это не может быть невероятно сложно.

Я не знаю C или C++, и у меня нет времени изучать эти языки без крайней необходимости. Это было бы необходимо, если бы одна из этих библиотек была окончательной библиотекой для решения этой задачи.

У кого-нибудь есть опыт работы с какой-либо из этих библиотек?

Есть ли какие-нибудь книги, посвященные этому конкретно для iOS5?

Ресурсы, которые я нашел:


person Matisse VerDuyn    schedule 16.02.2012    source источник
comment
Я использовал ImageMagick раньше, и было немного сложно настроить его для нашего продукта OS X, но в конце концов оно того стоило. К сожалению, у меня больше нет этого make-файла, поэтому я не могу его вам дать.   -  person Paul Cezanne    schedule 17.02.2012
comment
Если вы хотите использовать одну из этих библиотек, вам придется потратить время на изучение языка, на котором она написана. Возможно, я не понимаю вашего вопроса.   -  person rob mayoff    schedule 17.02.2012
comment
Спасибо за ответы, ребята, просто это не то, что я хотел услышать :( глупая Apple за то, что эти фильтры еще не доступны разработчикам!   -  person Matisse VerDuyn    schedule 17.02.2012


Ответы (1)


Как вы сказали, текущие возможности Core Image немного ограничены на iOS. В частности, разочаровывает отсутствие пользовательских ядер, которые вы найдете на рабочем столе. Другие альтернативы, которые вы перечисляете (за исключением GLImageProcessing, который не сможет выполнять такую ​​​​фильтрацию), являются библиотеками, привязанными к ЦП, и будут слишком медленными для выполнения фильтрации в реальном времени на мобильном устройстве.

Однако я могу указать вам на платформу с открытым исходным кодом под названием GPUImage, которую я только что развернул, потому что не мог не найти что-то, что позволит вам реализовать пользовательские эффекты. Как следует из названия, GPUImage выполняет ускоренную на GPU обработку неподвижных изображений и видео с использованием шейдеров OpenGL ES 2.0. Вы можете написать свои собственные эффекты, используя их, так что вы сможете делать практически все, что только сможете придумать. Сам фреймворк представляет собой Objective-C и имеет довольно простой интерфейс.

В качестве примера фильтра искажения следующий шейдер (на основе кода в ответе Дэнни Пфлюгхофта) выполняет своего рода эффект рыбьего глаза:

varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;

const mediump float bulgeFactor = 0.5;

void main()
{
    mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5);
    mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y;
    mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5);

    gl_FragColor = texture2D(inputImageTexture, distortedCoordinate);
}

Это производит такой эффект на видеопоток:

Фильтр с эффектом

В моих тестах GPUImage обрабатывает изображения в 4 раза быстрее, чем Core Image на iPhone 4 (в 6 раз быстрее, чем обработка, связанная с ЦП), а видео — в 25 раз быстрее, чем Core Image (в 70 раз быстрее, чем на ЦП). Даже в худшем случае, который я мог бы использовать, он соответствует Core Image по скорости обработки.

Фреймворк все еще довольно новый, поэтому количество стандартных фильтров, которые у меня сейчас есть, невелико, но я скоро добавлю еще кучу. Тем временем вы можете написать свои собственные шейдеры искажения для обработки ваших изображений, а исходный код для всего доступен для настройки по мере необходимости. моя вступительная статья об этом содержит более подробную информацию о том, как использовать это в своих приложениях.

person Brad Larson    schedule 17.02.2012
comment
Бред, очень крутая штука! Можем ли мы компостировать изображения с помощью ваших шейдеров и вашего фреймворка? - person Jeshua Lacock; 18.02.2012
comment
@JeshuaLacock - Еще нет. Мне нужно добавить небольшое расширение к фильтрам, чтобы они могли принимать более одного изображения за раз. Сначала я сосредоточился на том, чтобы все фильтры для отдельных изображений работали правильно, но я посмотрю, смогу ли я быстро реализовать что-то для композитинга. - person Brad Larson; 18.02.2012
comment
Хороший! Есть ли место, где я могу следить за вещами, или я должен просто периодически проверять ваш GIT? Кроме того, меня очень интересует шейдер с обратным эффектом (меньше в середине и больше по краям). Должен ли я опубликовать новый вопрос? - person Jeshua Lacock; 18.02.2012
comment
@JeshuaLacock - просмотр репозитория GitHub, вероятно, будет лучшим местом, где можно быть в курсе новых дополнений. Я иногда упоминаю об этом и в Твиттере: twitter.com/#!/bradlarson . Что касается эффекта сжатия, изменение bulgeFactor на -0,1 дает интересное сжатие, но в целом выглядит не совсем правильно. Я уверен, что есть более чистая реализация этого шейдера, которую вы можете найти где-нибудь. - person Brad Larson; 18.02.2012
comment
@JeshuaLacock - В качестве обновления я добавил возможности смешивания изображений и начал добавлять фильтры режимов смешивания. - person Brad Larson; 20.02.2012
comment
Это очень полная библиотека. У вас есть обнаружение краев - хитрый и осторожный, у вас есть размытие, даже размытие по Гауссу, обнаружение линий, локальная адаптивная фильтрация и даже еще одно, чего нет в OpenCV. Плюс эрозия и расширение. - person Rob; 15.01.2014