Edge detect что это

Обновлено: 07.07.2024

Последнее время, на Хабре часто стал упоминаться алгоритм выделения границ Канни (который, к моему удивлению, переводится дословно: хитрый). Итак, я созрел поделиться с общественностью своим опытом реализации этого детектора.

В свободное время, в целях самообразования, я изучаю алгоритмы (в том числе и машинного зрения). Занимаюсь этим непрофессионально, во многом придерживаясь научнопопулярной литературы или собственных алгоритмических решений.
Чтобы с одной стороны, упростить кодирование, а с другой – придать повествованию нотки brainfuck-программирования, я покажу реализацию в среде компьютерной алгебры Mathcad (алгоритмы протестированы в версиях 13 и 14), с как можно меньшим использованием специфических встроенных методов. Подобный поход, на мой взгляд, улучшает восприятие демонстрации, и облегчает возможный перенос алгоритмов в другие среды проектирования/разработки. Следует отметить, что некоторые этапы работы детектора Канни могут подразумевать не только различную оптимизацию (например, программная реализация оператора Собеля с использованием SIMD-расширения системы команд процессора), но и возможность замены одних операторов (методов) другими (например, оператор Собеля может быть заменён оператором Робертса или Прюитта), и возможность варьирования коэффициентов, задающих параметры работы операторов.
Приведённая версия создана из соображений максимальной простоты реализации в среде Mathcad, возможно, в ущерб производительности по скорости и качеству детектирования, и приводится как демонстрация основных этапов функционирования детектора Канни.

Выделение границ Канни

Канни (John F. Canny; 1953 г.) изучил математическую проблему получения фильтра, оптимального по критериям выделения, локализации и минимизации нескольких откликов одного края. Это означает, что детектор должен реагировать на границы, но при этом игнорировать ложные, точно определять линию границы (без её фрагментирования) и реагировать на каждую границу один раз, что позволяет избежать восприятия широких полос изменения яркости как совокупности границ. Канни ввел понятие Non-Maximum Suppression (подавление не-максимумов), которое означает, что пикселями границ объявляются точки, в которых достигается локальный максимум градиента в направлении вектора градиента.
Хотя его работа была проведена на заре компьютерного зрения (1986 г.), детектор границ Канни до сих пор является одним из лучших детекторов. Кроме особенных частных случаев трудно найти детектор, который бы работал существенно лучше, чем детектор Канни.

Задача

  1. Сглаживание. Размытие изображения для удаления шума.
  2. Поиск градиентов. Границы отмечаются там, где градиент изображения приобретает максимальное значение.
  3. Подавление не-максимумов. Только локальные максимумы отмечаются как границы.
  4. Двойная пороговая фильтрация. Потенциальные границы определяются порогами.
  5. Трассировка области неоднозначности. Итоговые границы определяются путём подавления всех краёв, несвязанных с определенными (сильными) границами.
Преобразование в оттенки серого

Для преобразования исходного изображения в изображение в градациях серого, необходимо получить его «яркость»-составляющую. Для этого удобно представить изображение в цветовой модели YUV (или HSL, HSV, других).
Изначально рисунок представлен в RGB цветовой модели, причём функция загрузки возвращает три компонента в виде одной матрицы.

Для перевода изображения в модель YUV выполним следующие операции.
Получим матрицы, описывающие компоненты модели (R,G,B):

image

Рассчитаем Y-компоненту YUV модели:

image

Коэффициенты перевода (они постоянны и определяются особенностями человеческого восприятия, а ведь именно с позиции человека мы здесь оцениваем границы):

image

Результат преобразования:

Сглаживание

Для подавления шума, воспользуемся размытием изображения фильтром Гаусса.
Функция Гаусса для двумерного случая:

Метод, составляющий ядро фильтра размером size с параметром σ:

Процедура, применения фильтра с ядром размера size и параметром σ к матрице изображения Matrix:

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

Выберем σ=1.0.
Ядро фильтра очень быстро убывает к нулю при удалении от точки (0, 0), и потому на практике можно ограничиться сверткой с окном небольшого размера вокруг (0, 0) (например, руководствуясь правилом трёх сигм, возьмём радиус окна равным 3σ). Ниже представлен результат применения фильтра с фиксированным значением параметра σ, и разным размером ядра (параметром size).

Выберем size=7. Результат применения фильтра с выбранными параметрами изображён на рисунке выше.

Поиск градиентов

Оператор Собеля часто применяют в алгоритмах выделения границ. По сути, это дискретный дифференциальный оператор, вычисляющий приближенное значение градиента яркости изображения. Результатом применения оператора Собеля в каждой точке изображения является либо вектор градиента яркости в этой точке, либо его норма. Оператор Собеля основан на свёртке изображения небольшими целочисленными фильтрами в вертикальном и горизонтальном направлениях, поэтому его относительно легко вычислять. С другой стороны, используемая им аппроксимация градиента достаточно грубая, особенно это сказывается на высокочастотных колебаниях изображения.
Ядра фильтров:

Реализация (сопоставляет каждой точке вектор градиента):

Угол вектора квантуется по 45° — именно такие значения необходимы для одного из следующих этапов.
На рисунке ниже показан результат применения оператора к размытому (А) и исходному (в градациях серого) изображению (Б).

Подавление не-максимумов

Пикселями границ объявляются пиксели, в которых достигается локальный максимум градиента в направлении вектора градиента. Значение направления должно быть кратно 45°.

Принцип подавления проиллюстрирован на рисунке выше. Почти все пиксели в примере «имеют ориентацию вверх», поэтому значение градиента в этих точках будет сравнено с ниже- и вышерасположенными пикселями. Обведённые белым контуром пиксели останутся в результирующем изображении, остальные – будут подавлены.
Реализация проверки точки на принадлежность изображению:

Сравнение значения:

Реализация подавления:

После подавления не-максимумов, края стали более точными и тонкими.

Ниже, на первом рисунке, представлено векторное поле градиентов (углы кратны 45°) всего исходного (то есть, до подавления) изображения, а на втором – небольшого фрагмента.

Двойная пороговая фильтрация

Следующий шаг — применение порога, чтобы определить находится или нет граница в данной точке изображения. Чем меньше порог, тем больше границ будет находиться, но тем более восприимчивым к шуму станет результат, выделяя лишние данные изображения. Наоборот, высокий порог может проигнорировать слабые края или получить границу фрагментами.
Выделение границ Канни использует два порога фильтрации: если значение пикселя выше верхней границы – он принимает максимальное значение (граница считается достоверной), если ниже – пиксель подавляется, точки со значением, попадающим в диапазон между порогов, принимают фиксированное среднее значение (они будут уточнены на следующем этапе).
Реализация:

Результат применения с порогами 55% и 60% от диапазона приведён на рисунке далее.

Трассировка области неоднозначности

Список источников

upd А вот и критика. Спасибо andreyivanoff за указание на принципиальные ошибки в алгоритме и ссылке на статью (тут).

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

Aliasing Antialiasing


Начнем с того, что AA (Anti-Aliasing, Сглаживание) — способ устранения "ступенчатости" на краях объектов, линий, которые находятся под наклоном и не являются ни строго вертикальными и ни строго горизонтальными. Особенно "лесенка" заметна на стыках полигонов с разными цветами.
В играх может использоваться, когда видеокарте не хватает мощности для вывода изображения в высоком разрешении, где все детали плавные и приятны глазу. Если AntiAliasing отрабатывает хорошо и качественно, то из-за этого страдает производительность, падает фпс в играх. Если сглаживает плохо, то страдает графика, появляется замыливание картинки, артефакты. Поэтому, если есть возможность играть при высоком разрешении и фпс при этом падает не на много, не включайте AA, играйте на высоком. Так же из особенностей, сглаживание "лесенки" может быть включено на уровне настроек видеокарты и при этом еще и на уровне приложений. Эффект при этом "усиливается", если используется первый и второй тип сглаживания. Поэтому если собрались испытывать антиальясинг, убедитесь чтобы оно было включено где то в одном месте, дабы не получить замыленность.

Первый тип

Влияние на фпс прямое, в зависимости от метода и пропускной способности видеопамяти.

SSAA (SuperSample Anti-Aliasing, Избыточная выборка сглаживания) — Самое тяжелое, но и самое качественное и жутко нагружающее видеокарту. В ускорителях применяется регулярная маска размером от 2x1 до 4x4. От этого и появляется нагрузка, при разрешении 1920x1440 и маске 2х2 строится кадр с разрешением 3840х2880 (что требует памяти в 4 раза больше), после этого, усредняются цвета всех суб-пикселей в маске и уже после кадр сжимается и подается на вывод на экран в исходном разрешении.
Существовала технология в основном до DirectX 8, пока не появился MSAA. Из-за большого влияния на фпс от него отказались. Но так как мощность видеокарт перманентно росла, NVIDIA его вернули в строй и используется для игр с поддержкой DX9, DX10, DX11.
Хотите 60 фпс? Тогда сами сможете прикинуть под какой нагрузкой будет работать видеоадаптер. Однако, от картинки вы получите наслаждение. Данный метод рекомендуется обладателям производительных видюх для современных игр.

MSAA (MultiSample Anti-Aliasing, Множественная выборка сглаживания) — пришел на смену SSAA, потребляя меньше ресурсов, но и результат дает немного другой. Изображение по-прежнему рендерится в большем разрешении, но производительность достигнута за счет AA только краев объекта, а не всей картинки как в SSAA. Из минусов, на прозрачных полигонах (стекла, вода..) данный метод не работает, поэтому лесенку иногда можно лицезреть. И так как сглаживается только часть изображения, то можно наблюдать еще и артефакты. Плюс несовместимость с методом отложенного освещения. Нужно помнить, что MSAA выгоднее юзать на низких разрешениях. Чем оно выше, тем накладнее по ресурсам. Так же рекомендуется обладателям топовых видеокарт, с большим количеством видеопамяти.

CSAA (Coverage Sampling Anti-Aliasing, Выборка сглаживания с перекрытием)
— это продолжение эволюции SSAA->MSAA->CSAA, который сохранил совместимость с алгоритмами используемых в железе. Улучшение достигнуто за счет того, что в буфер кадра передается еще информация о субсэмпле с соседнего пикселя. Что в итоге помогает рассчитать более качественное сглаживание.
При равных уровнях (4,8..) CSAA и MSAA, качество кадра всегда будет у CSAA выше, а по производительности они друг другу не будут уступать.

Другими словами:
SSAA - сглаживает всю сцену
MSAA - сглаживание происходит только по краям объектов
CSAA - за счет добавления сэмплов перекрытия, сглаживание краев объектов происходит с учетом соседних пикселей. Т.е. тут сделан упор на качество кадра, практически при том же уровне уровне нагрузки на видеокарту, что и у MSAA.

FSAA (Full Scene Anti-Aliasing, Полноэкранное сглаживание) — То же что и SSAA, но от AMD и с небольшими отличиями.

QCSAA (Quality Coverage Sampling Anti-Aliasing, Выборка сглаживания с перекрытием) — не трудно догадаться, что это улучшенная версия CSAA, только использует вдвое больше сэмплов для анализа

EQAA (Enhanced Quality Anti-Aliasing, Сглаживание повышенного качества) — У NVidia - CSAA, у AMD - EQAA. Отличаются положениями сэмплов и в зависимости от режима их количеством.

AAA (Adaptive Anti-Aliasing, Адаптивное сглаживание) — Как известно у MSAA есть проблема при сглаживании краев на прозрачных объектах. Данный способ призван устранить такую проблему. Является синергией мультисемплинга (MSAA) и суперсемплинга (SSAA). Как можно догадаться, данный вид ресурсоемок и рекомендуется обладателям топ карт. Используется у AMD.

TrAA (Transparency Anti-Aliasing, Прозрачное сглаживание) — тоже что и AAA, только от NVIDIA.

TrAAA (Transparency Adaptive Anti-Aliasing, Адаптивное Прозрачное сглаживание) см. TrAA

TrMSAA (Transparency Multi-Sampling Anti-Aliasing, Прозрачная множественная выборка сглаживания) использует краевой метод (MSAA) для прозрачных объектов. Разновидность TAAA. Может обозначаться как TMAA

TrSSAA (Transparency Super-Sampling Anti-Aliasing, Прозрачная полноэкранная выборка сглаживания) использует полноэкранное сглаживание (SSAA) для прозрачных объектов. Разновидность TAAA. Может обозначаться как TSAA

OGSSAA (Ordered Grid SuperSampling Anti-Aliasing, Избыточная выборка сглаживания с упорядоченной решеткой) — Классический SSAA в котором используется решетка с упорядоченной выборкой, выровненная по вертикали и горизонтали.

RGSSAA (Rotated Grid SuperSampling Anti-Aliasing, Избыточная выборка сглаживания с повернутой решеткой) — Все тот же SSAA, с уточнением расположения решетки наклоненной под определенным углом. Данный метод показывает качество немного лучше, чем OGSSAA, при почти горизонтальных или вертикальных краях объектов (слегка наклоненных).

SGSSAA (Sparse Grid SuperSampling Anti-Aliasing, Избыточная выборка сглаживания с разряженной решеткой) — выборки располагаются на регулярной сетке, как в OGSSAA. Но выборка производится лишь на некоторых узлах сетки. Здесь заложен компромиссный подход между производительностью и качеством изображения. Метод используется у NVidia

JGSSAA (Jittered Grid Super-sampling Anti-aliasing, Избыточная выборка с искаженной решеткой) - каждый пиксель так же разбивается на субпиксели, но выборка сэмплов располагается случайно (Стохастическая) или со смещением внутри субпикселя.

HRAA (High-Resolution Anti-Aliasing, Полноэкранное сглаживание для высоких разрешений) — метод полноэкранного сглаживания в NVIDIA с 5-ю сэмплами. Качество как 4xSSAA, по нагрузке как 2xSSAA.

HRAA (Hybrid Reconstruction Anti-Aliasing, Гибридное сглаживание) — решение использующее лучшие практики, на основе краевого метода (MSAA, CSAA), постобработки с аналитикой и временного антиалиасинга.

EDAA (Edge Detect Anti-Aliasing, Краевое сглаживание) — так же краевой метод + обсчитываются контрастные переходы еще и на объектах и текстурах. Что в итоге сильнее садит fps. Условно можно назвать это аналогом CSAA, только от AMD. Это разновидность CFAA, описанного ниже.

CFAA (Custom Filter Anti-Aliasing, Специализированные фильтры сглаживания) — Детище AMD. Включает в себя 4 фильтра: box, narrow-tent, wide-tent, edge-detect. Каждый фильтр, это разный подход к реализации того же MSAA.
box - стандартный подход к MSAA
narrow-tent - аналог CSAA
wide-tent - так же аналог CSAA, только количество субпикселей больше в два раза
edge-detect - при проходе фильтра edge detection по отрендеренному изображению, для определенных им пикселей, которые определяются как границы полигонов или резкие цветовые переходы, используется более качественный метод антиалиасинга с большим количеством сэмплов, а для остальных пикселей с меньшим.

QAA ( Quincunx Anti-Aliasing, Шахматное сглаживание ) — метод от NVidia, в основе которого лежит учет не только своих субпикселей, но и данные берутся от соседних. При этом, при расчете финального цвета, свой сэмпл имеет вес больше, чем данные с соседних. В расчет берется 5 точек. По качеству 2xQSAA, приблизительно так же выглядит как 4xMSAA.

FAA (Fragment Anti-Aliasing, Частичное Сглаживание) — разработана компанией Matrox. Сглаживание применяемое к краям объектов. Отличие от SSAA и MSAA, в том, что края и сами объекты не увеличиваются в несколько раз по маске. Каждый пиксель делится на 16 частей и если покрытие полное, то пиксель отправляется в кадровый буфер, если неполное, то уходит в отдельный буфер. Такой пиксель считается фрагментированным, при чем в дальнейшем над ним проводится анализ и он видоизменяется. Такая реализация очень сильно экономит ресурсы видеокарты. Но есть и проблема, алгоритм определения краев не всегда корректно обнаруживает те самые края. Проблема с прозрачными объектами во всей красе.

TXAA (Temporal approXimate Anti-Aliasing, Временное приблизительное сглаживание) — технология от Nvidia, которая использует основу MSAA. В формуле расчета используется время, данные по пикселям из предыдущих кадров и данные из обрабатываемой сцены. После чего происходит усреднение по цвету. Это позволяет избавиться от мерцания и дерганья объектов в игре. Вдали дает качественную картинку, однако немного мылит близкие объекты и требования к ресурсам почти как для MSAA, хотя качество при тех же значениях лучше.
Со слов производителя, TXAA 2x сравнимо по качеству с 8xMSAA, но при по затратам производительности сопоставимо как с 2xMSAA, а TXAA 4x выше по качеству чем 8xMSAA, но по затратам производительности сопоставимо как с 4xMSAA. Отлично подходит для сглаживания в динамике.

TSSAA (Temporal Super Sampling Anti-Aliasing, Временная избыточная выборка сглаживания) — Этот метод, что и TXAA, только не привязан к видеокартам NVIDIA и завязана на суперсэмплинг.

csgo antialiasing


Второй тип
Влияние на фпс слабое. Так называемые методы пост-обработки, когда сглаживание происходит в момент вывода изображения на экран.

FXAA (Fast approXimate Anti-Aliasing, Быстрое приблизительное сглаживание) — разработка NVidia. Из названия видно, что это более производительное сглаживание по-сравнению с традиционным MSAA. Алгоритм использует простой способ обнаружения разрыва цветов фигур. В момент вывода изображения на экран усредняются по цвету все соседние пиксели. Это не нагружает видеокарту, но жутко мылит кадр. Далекие и затуманенные объекты в игре будут почти не узнаваемы. Такое сглаживание имеет смысл включать на слабых машинах, ноутбуках, нетбуках и прочих эконом вариантах.

MLAA (MorphoLogical Anti-Aliasing, Морфологическое сглаживание) — условный аналог FXAA. Методика придумана компанией Intel. Алгоритм, ищет пиксельные границы на каждом кадре, похожие на Z, L и U буквы и смешивает цвета соседних пикселей, входящих в каждую такую часть. Алгоритм переведен на использование процессора, а не GPU. Отсюда можно рекомендовать его обладателям слабых видеокарт и с более менее производительным процессором. Из-за более сложного алгоритма изображение получается более качественным, чем с FXAA. Имеется реализация у AMD, но технически может использовать и NVidia. Есть проблема: сглаживание не отрабатывает на прозрачных текстурах. Поэтому в довесок этой постобработки нужно подключать еще и TrAA для улучшения изображения. Время обработки занимает 0,9 мс. Так же есть методики MLAA реализованные на GPU.

SRAA (Subpixel Reconstruction Anti-Aliasing, Субпиксельное восстанавливаемое сглаживание) - новый двухпроходный алгоритм от NVidia. SRAA очень схожа с MLAA , но работает с буферами глубины и картами нормалей, из-за чего лучше определяет границы для сглаживания и затененные края. Время выполнения в целом очень низкое, основное время в алгоритме уходит на обработку затенения. На выходе могут появляться артефакты. Для сравнения на сглаживание изображения с разрешением 1280×720 методом SSAA уходит около 5-10 мс, а у SRAA примерно 1,8 мс.

  • SMAA 1x : классический алгоритм SMAA, включающий точный поиск расстояний, работа с локальным контрастом для определения краев, геометрических объектов и поиск диагональных линий. Время обработки занимает 1,02 мс.
  • SMAA T2x : SMAA 1x +техники из TSAA. Время обработки занимает 1,32 мс.
  • SMAA S2x : SMAA 1x +техники из MSAA. Время обработки занимает 2,04 мс.
  • SMAA 4x : SMAA 1x +техники из SSAA/MSAA и TSAA/TMSAA. Время обработки занимает 2,34 мс.

CMAA (Conservative Morphological Anti-Aliasing, Консервативное морфологическое сглаживание) — среднее между FXAA и SMAA 1x. Идеально подходит для слабых и средних графических процессоров. Отличие от FXAA происходит за счет обработки линий краев длиной до 64 пикселей. Используется алгоритм, с обрабатыванием только симметричных разрывов цветов, чтобы избежать ненужного размытия. Отличие от SMAA 1x происходит за счет менее полного сглаживания объектов, т.к. обрабатывается меньше типов фигур и обладает повышенной временной стабильностью, т.е меньше мерцаний объектов.

MFAA (Multi-Frame Sampled Anti-Aliasing, Мультикадровое сглаживание) — производится выборка двух сэмплов для каждого пикселя из текущего кадра и двух сэмплов из предыдущих, после чего применяетя фильтр. MFAA, по сути, соответствует 2xMSAA по нагрузке на видеокарту, но даёт качество картинки на уровне 4xMSAA. При этом этот метод работает примерно на 30 процентов быстрее. Падение производительности из-за фильтра минимальное. Для MFAA необходим определенный уровень частоты кадров, чтобы сглаживание можно было рассчитывать на основе двух кадров. NVIDIA утверждает, что частоты кадров 30-40 fps должно быть достаточно.
GPAA (Geometric Post-process Anti-Aliasing, Сглаживание с геометрической постобработкой) — в работе техники заложено копирование буфера с отрендеренными данными и повторной обработки ребер.

GBAA (Geometry Buffer Anti-Aliasing, Сглаживание с буфером геометрии) — усовершенствованный GPAA, в котором границы обрабатываются несколько иначе. За счет чего улучшена производительность.

Q: Что такое антиалиасинг и каков принцип его работы?
A: Антиалиасинг - фильтр, позволяющий устранить эффект алиасинга, который возникает, когда видеокарта попиксельно рассчитывает картинку для ее вывода на монитор. При проецировании трехмерных полигональных моделей на двухмерную плоскость всегда находятся группы пикселей, занятые объектом / объектами лишь частично, в результате чего на картинке появляются неровности на гладких границах объектов и стыках текстур, а часть «пограничных» деталей пропадает. Самое неприятное, что при движении эти неровности начинают менять форму и мерцать / шевелиться, что и некрасиво, и утомляет глаза.

Q: Что такое суперсэмплинг и каков принцип его работы?
A: Суперсэмплинг, он же полноэкранное сглаживание, он же Full-scene Anti-aliasing (FSAA) - самая старая разновидность антиалиасинга. Принцип его работы такой: вся картинка целиком рассчитывается в более высоком разрешении, кратном тому, что будет выведено на экран. Затем на основании цветов тех пикселей, которые образуют один в низком, конечном разрешении, принимается решение о цвете соответствующей точки на дисплее. Варианты расположения субпикселей (то есть точек в промежуточном высоком разрешении, из которых состоит пиксель) и оценки их значимости для формирования окончательного цвета могут быть разными. Кратность суперсэмплинга описывает, сколько субпикселей было задействовано для расчета цвета пикселя.
Главная проблема этого вида антиалиасинга в том, что в более высоком разрешении приходится рассчитывать всю сцену целиком, что дает большую нагрузку на видеопамять и ее шину. Более современные методы фильтрации точно так же используют субпиксели, но при этом обрабатывают не все изображение.

Q: Что за странные фильтры такие - Box, Narrow-tent, Wide-tent, Edge-detect - доступны для выбора в ATI Catalyst Control Center в настройках антиалиасинга?
A: При задействованном фильтре Box карта будет обсчитывать сглаживание по стандартному алгоритму мультисэмплинга, Narrow-tent и Wide-tent - два варианта Coverage Sampling (CSAA), второй отличается от первого вдвое большим количеством внешних субпикселей, a Edge-detect - собственный алгоритм антиалиасинга от ATI /AMD.

Q: Что означает «xQ» в настройках антиалиасинга ForceWare (например, 8xQ)?
A: Ничего конкретного, кроме самого факта отличия режима с этой литерой от режима без нее, - например, 8х не то же самое, что 8xQ. Привязки к алгоритмам фильтрации нет: Coverage Sampling Anti-aliasing (CSAA), например, используется и в режиме 16х, и в 16xQ. Возможно, «Q» означает «Quality» и как бы намекает юзеру, что стоит попробовать сдвинуть ползунок качества еще на одно деление вправо.
Режимы с литерой «S» подразумевают использование антиалиасинга с обработкой не только краев объектов, но и текстур, однако это не суперсэмплинг, как можно было бы подумать. На современных карточках NVIDIA на смену старому тяжеловесному методу пришел алгоритм Transparency Anti-aliasing, сочетающий элементы мультисэмплинга и суперсэмплинга. Тоже не легкий, но пошустрее FSAA.

Q: Что такое мультисэмплинг и каков принцип его работы?
A: Мультисэмплинг отличается от суперсэмплинга меньшим количеством расчетов: при сглаживании обрабатываются только пиксели, которые находятся на границах полигонов моделей. Нагрузка на видеокарту сильно уменьшается, fps растет, но качество изображения получается хуже, чем при использовании суперсэмплинга: FSAA улучшает отображение не только границ объектов, но и текстур.
Еще одно отличие от суперсэмплинга: в современных картах субпиксельная решетка располагается не параллельно краям пикселя, а повернута под углом. Такой метод отбора позволяет добиться более высокого качества сглаживания. С кратностью дела у мультисэмплинга дела обстоят примерно так же, как и у полноэкранного сглаживания, - она означает количество субпикселей, выбранных для определения цвета точки на экране.

Q: Что такое Custom Filter Anti-aliasing и каков принцип его работы?
A: Более современная и совершенная разновидность мультисэмплинга. Сглаживание по алгоритму CFAA означает, что при
вычислении цвета пикселя карта принимает в расчет не только «внутренние» субпиксели (то есть те, что лежат в пределах обрабатываемой точки), но и внешние, из соседних пикселей. Из внешних субпикселей отбираются приграничные, те, что находятся неподалеку от интересующего видюху пикселя. Разумеется, они имеют меньший приоритет при расчетах, чем внутренние, однако их использование позволяет получить более точный цвет и более качественную картинку.
В общем-то, CFAA не то чтобы совсем нов. Идея со внешними субпикселями была впервые реализована компанией NVIDIA в технологии Quincunx. Custom Filter - ее улучшенная версия: усовершенствования коснулись алгоритмов выбора внешних субпикселей, их количество при той же кратности антиалиасинга не изменилось. Кратность CFAA по-прежнему соответствует количеству точек, которые были задействованы при вычислении цвета пикселя. Общему количеству - и внешних, и внутренних.

Q: Что такое Edge Detect (ED, EDAA) и каков принцип его работы?
A: В отличие от мультисэмплинга, карты с активным Edge Detect рассчитывают цвет не только для пикселей, которые расположены на границах полигонов: обработку проходят все точки, которые лежат на стыках контрастных цветовых переходов. Таким образом, Edge Detect улучшает и отображение объектов, и качество текстур. Разумеется, при этом нагрузка на видеокарту возрастает, и при переключении в драйверах антиалиасинга с мультисэмплинга на новый алгоритм fps существенно проседает.

Q: Что такое адаптивный антиалиасинг и каков принцип его работы?
A: Это антиалиасинг, который применяется к границам прозрачных текстур. Под названием Adaptive Anti-aliasing этот вид фильтрации фигурирует только у ATI, у NVIDIA та же функция называется Transparency Anti-aliasing.

Q: 3a что отвечает параметр Mipmap Detail Leveling?
A: Этот параметр лимитирует количество уменьшенных копий текстур (МIР-текстур), которые создает видеокарта (Performance - минимум, Quality - максимум;
приблизительно влияние на качество можно оценить на превью в окне драйвера). Вместе с количеством текстур меняется и число MIP-уровней, меньшее количество текстур подразумевает более ранний переход к текстурам низкого разрешения.

Q: Чтo такое MIP-текстуры, МIР-уровни, МIР-текстурирование?
A: MIP-текстурирование - метод ускорения работы видеоадаптера. Суть том, что карта создает уменьшенные копии исходных текстур. Нет никакого смысла наносить полноценную текстуру на удаленный объект, который занимает на экране совсем небольшую площадь; тут-то уменьшенные копии, они же MIP-текстуры, и пригодятся. А MIP-уровнями называются переходы от одних текстур к другим, более высокого или, наоборот, низкого разрешения.

Q: Что такое анизотропная фильтрация и на что она влияет?
A: Это наиболее актуальная и распространенная на сегодня разновидность текстурной фильтрации. Обработка текстур нужна для того, чтобы вывести на экран монитора наиболее правильный цвет. Пикселю на картинке в конечном разрешении может соответствовать несколько текселей (тексель - это пиксель текстуры), и алгоритмы фильтрации определяют, как именно более или менее удаленный объект в результате будет выглядеть на дисплее.
Уровни анизотропии означают количество текселей, кратное шестнадцати, которое используется для определения цвета пикселя: 2х - 2 х 16 текселей, 4х - 4 х 16 текселей и так далее. Выбранные тексели имеют разный приоритет, он зависит от их положения и от угла наклона полигона (относительно плоскости экрана), на который нанесена текстура.

Refine Edges в Фотошопе

Настройка краев выделения

Итак, зачем же нужно настраивать какие то края? Вроде бы, выделил и выделил. Все хорошо. Выделил криво, вышло криво. Значит старайся, выделяй лучше. Выделятор my ass. Все кажется очень просто, пока выделяешь яблоко на белом фоне из урока для начинающих. Обычно мне приходится выделять людей на фотографиях с совершенно разными условиями съемки. Плохое качество, плохой свет, различный фон и разная степень размытости. Если выделение четких границ не вызывает особенных вопросов, то с выделением шерстянистых поверхностей все не просто. О чем идет речь? О кромках мехов, шуб, волосянистых поверхностей, растрепанных причесок. Скажу честно, я редко использую Refine Edges. Разрешение печати большое, и такие детали, как пару волосков просто не видно, если конечно герой откровенно не кучерявый. Но чаще всего я предпочитаю срезать растрепанные волосы, чем возиться с их выделением. Такова специфика работы, на подобную роскошь просто нет времени. Но как только дело доходит до женщин, с их растрепанными на ветру прическами без инструмента Refine Edges не обойтись.


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

Выделяем фотографию в Фотошопе

Я выбрал фотографию и сделал нехитрое выделение при помощи инструмента Polygonal Select Tool. По сути все равно как вы сделаете его, простым лассо или магнитиком. На голове мы имеем как раз те самые проблемные места, которые я обычно предпочитаю халтурно срезать.


Выделение туловища сделано хорошо, но прическа выделена произвольно, что понятно. Закончите с выделением и найдите в контрольной панели кнопочку Refine Edges. Она находится в опциях всех инструментов выделения. Если у вас нет контрольной панели включите её Windows > Options


View Mode

Это первая группа настроек Refine Edges. В ней можно выбрать режим просмотра изображения. Сразу скажу, если задний фон фотографии, с которой вырезается объект светлый, выбирайте черную подстилку. Если задний фон темный, выбирайте белую. Кроме того имеются две нехитрые галочки: Show Original и Show Radius. Их значение я раскрою попозже.


Edge Detection


Итак, вы уже поняли, что инструментом Radius надо пользоваться с осторожностью. Много плохо, и мало плохо. Надо найти золотую середину. Вернемся к галочкам Show Original и Show Radius. Кликните для начала по Show Original. Изображение вернулось к первоисходнику. Таким образом можно быстро сравнивать, как было и как стало. Отключите галочку Show Original.

Кликните по Show Radius. Если все верно, вы увидите, как тело объекта залилось черным цветом, а область радиуса выделилась. Приглядитесь к нему. Радиус распространяется как наружу, так и внутрь. В этом промежутке Refine Edges ищет края, волоски Show Radius и кликните по галочке Smart Radius. Вот и наглядный пример разницы в работе режимов радиуса.



Adjust Edge

Эта область относится к корректирующим настройкам уже найденных краев объекта.

Output

Ну да, и ещё, вам ничто не мешает обработать края объекта и после того как вы закончили с выделением. Например я слегка ужесточил края инструментом Sharpen Tool. Одним словом, поиграйтесь с настройками, точных рецептов тут нет.


Вы скажете мне, а зачем вообще так возиться с героем Лоста, да и кому нужны эти пять волосков и пару неровностей на голове. С какой-то стороны вы будете правы. Но ситуации при изоляции объекта, как и сам объект могут быть совершенно разными. В подтверждение этого прилагаю фотографию Кейт.


Здесь уж без инструмента Refine Edges просто никуда. Качественно выделите плечи, и примерно очертите края головы. Выделите Refine Radius Tool просветы в волосах и доведите настройки до ума. На этом все!

Читайте также: