Чем измерить эстетичность. Энтропия и вариативность гармонизированного изображения

«Вовсе не обязательно, что бы всюду был смысл: смешно — ну и ладно.»  
(Пол Маккартни)

А займемся-ка мы сегодня изучением такого важного параметра как энтропия информации и её производного: энтропии изображения и всем тем, что к ней приводит. И главное, осознаем чем она нам может быть интересна. К примеру, почему бы нам не придумать какой-то численный индикатор эстетики в изображении, и попробовать в этом контексте энтропию в плане измерения «эстетичности» изображения, выяснив предварительно, что можно под этим термином понимать.

Читать далее

Реклама

Мифическая скорость GPU. Параллелизация расчетов GPU+DSP на A7

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

Читать далее

Расчет гистограммы изображения на GPU. Атомарные типы данных Metal и операции над ними

Не далее как месяц назад я описал незатейлевый процесс создания собственной версии фото приложения портящего замечательные цифровые фотографии до приемлемого результата. В качестве основного инструмента обработки (Image Processing) мы использовали гомогенные преобразования цветового пространства через так называемые таблицы поиска или CLUT. Этот замечательный, надежный, супер быстрый и незаменимый способ работает всегда и с возбуждающим успехом. При одном условии: исходная картинка должна быть получена при определенных условиях. А это, как хорошо не известно многим, не достижимое условие, хотя и воспроизводимое с некоторым приближением за неприятный прайс.

Читать далее

Оптимизация шейдеров Apple Metal на примере работы с конвертером цветовых пространств: RGB/HSV.

Баталии в блоге Degradr по поводу эстетики и математики в эстетике и эстетической математики, и еще какого-то другого творчества, которое все несли не стесняясь, разгорелись не шуточные. Хочется немного уйти от гуманитарного и погрузиться в наше любимое: в технодр@черство. Прошу дам меня извинить: сегодня попытаемся выжать из GPU последние капли крови производительности. A по простому — мы будем пытаться оптимизировать код, который, казалось бы и оптимизировать уже невозможно. Но…

Читать далее

Как написать свой Metalagram. Color Lookup Tables или CLUT-ы в Metal

Смоки, тут не Вьетнам. Это — боулинг. Здесь есть правила.
Уолтер Собчак/Большой Лебовски

В самом первом посте этого блога я обещал, что мы напишем свою версию приложения фото-камеры с фильтрами, что-то вроде Instagram-а или встроенной Камеры iOS. В 100500й раз. Приложение будет конечно же круче в тоже самое количество раз. Все дело в количестве припоя кода которого мы нальем в программу, что-бы сделать её работающей. Его практически не будет. Сомневаюсь, что у отцов-основателей Instagram были наши сегодняшние возможности. А еще у нас будут большие файлы формата Cube LUT Specification Version 1.0. В общем пишем свой Instagram!

Приложение будет выглядеть как-то так:

Metalling App

Вот сегодня это и сделаем: возьмем в руки отвертку и паяльник XCode и напаямем накодируем кода: быстренько обернем Metal в свой фреймворк и сосредоточимся, в итоге, исключительно на разработке фильтров не отвлекаясь на детали. А еще проще использовать готовый через cocoapods: DPCore3. Эта штука находится еще на стадии активных доработок, но вполне сгодится для использования в качестве слоя абстракции уменьшающего количества кода на единицу  времени программиста. Но обо всем по порядку.

Читать далее

Шаблоны функций Metal Shading Language

Metal Shading Language (MSL) — универсальный язык программирования для создания графических и вычислительных функций используемых с приложениями написанными с использованием Metal Framework. Так говорит тутонхамон Apple.

И это в действительности так. Мало того, что MSL реализует синтаксическое подмножество C++, фактически это C++ базирующийся на спеках C++11. Например в MSL реализованы атомарные типы. Об этой фишке я как-нибудь расскажу отдельно с примерами. Однако надо понимать, что GPU не CPU и не поддерживает некоторые специфические вычисления или реализует их крайне не эффективно по сравнению с CPU, поэтому MSL — это некое ограниченное подобие C++11. К слову, MSL не поддерживает лямбда-функции (чорт, а было бы круто конечно, если бы да…). В любом случае это, хоть и маленький шаг одной яблочной компании, но огромный шаг всего человечества.

Читать далее

Фильтр реалистичной, «пленочной» коррекции теней

Сегодня я не буду подробно описывать как с помощью Metal Framework и Metal Shading Language запрограммировать фильтр. Т.е. не буду останавливаться на деталях реализации. В целом, предыдущего поста должно было быть достаточно для уверенного понимания как варится программа с использованием этих средств.

Сегодня мы сосредоточимся на идее нового фильтра с точки зрения разработчика этого фильтра (инженера или математика) и покажем как от идеи до воплощения в коде заставить железку работать на благо, например, эстетики. Подумаем как сделать изображение более «привлекательным» в некоторых, специальных случаях.

Читать далее