Градиент изображения: Градиент изображения — Image gradient

Содержание

Градиент изображения - Image gradient

Два типа градиентов с синими стрелками, указывающими направление градиента. Темные области указывают на более высокие значения

Градиентное изображение является направленное изменение интенсивности или цвета в изображении. Градиент изображения - один из основных строительных блоков при обработке изображений . Например, детектор краев Canny использует градиент изображения для обнаружения краев . В графическом программном обеспечении для редактирования цифровых изображений термин градиент или цветовой градиент также используется для постепенного смешения цветов, которое можно рассматривать как равномерную градацию от низких до высоких значений, как используется от белого к черному на изображениях справа. Другое название этого - прогрессия цвета .

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

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

Градиенты изображения часто используются в картах и других визуальных представлениях данных для передачи дополнительной информации. Инструменты ГИС используют последовательность цветов для обозначения высоты и плотности населения , среди прочего.

Компьютерное зрение

Слева интенсивное изображение кошки. В центре градиентное изображение в направлении x, измеряющее изменение интенсивности по горизонтали. Справа - изображение градиента в направлении y, измеряющее вертикальное изменение интенсивности. Серые пиксели имеют небольшой градиент; черные или белые пиксели имеют большой градиент.

Градиенты изображения могут использоваться для извлечения информации из изображений. Для этой цели градиентные изображения создаются из исходного изображения (обычно путем свертки с фильтром, одним из самых простых является фильтр Собеля ). Каждый пиксель градиентного изображения измеряет изменение интенсивности той же точки исходного изображения в заданном направлении. Чтобы получить полный диапазон направлений, вычисляются градиентные изображения в направлениях x и y.

Одно из наиболее распространенных применений - обнаружение краев. После того, как изображения градиента были вычислены, пиксели с большими значениями градиента становятся возможными краевыми пикселями. Пиксели с наибольшими значениями градиента в направлении градиента становятся краевыми пикселями, и края могут отслеживаться в направлении, перпендикулярном направлению градиента. Одним из примеров алгоритма обнаружения краев, использующего градиенты, является детектор краев Canny .

Градиенты изображения также можно использовать для надежного сопоставления функций и текстур. Различное освещение или свойства камеры могут привести к тому, что два изображения одной сцены будут иметь совершенно разные значения пикселей. Это может привести к тому, что алгоритмы сопоставления не смогут сопоставить очень похожие или идентичные функции. Один из способов решить эту проблему - вычислить текстуру или сигнатуры признаков на основе изображений градиента, вычисленных из исходных изображений. {2}}}}

Смотрите также

Ссылки

дальнейшее чтение

внешние ссылки

<img src="https://en.wikipedia.org//en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="">

Что такое градиент изображения? - CodeRoad



В настоящее время я изучаю работу резьбы по швам , а также изменение размера контента .

Резьба по шву включает в себя расчет

энергии каждого отдельного пикселя в изображении. Где энергия может быть рассчитана с использованием нескольких методов, одним из которых является величина градиента (градиент изображения).

Ранее я использовал фильтр/оператор Собеля , который включает в себя вычисление градиентов в направлении X и Y , где выход этих двух используется для поиска ребер. Но я не совсем уверен, что такое градиент по определению.

P.S.:- я читал страницу Википедии градиента изображения , но не смог понять ее, ясно.

image image-processing gradient
Поделиться Источник Vasu Deo.S     06 июля 2019 в 03:59

1 ответ


  • Как применить градиент для изображения в представлении изображения в android

    Может ли кто-нибудь сказать, можно ли дать градиент для изображения в представлении изображения в android, если да, может ли кто-нибудь сказать, как это сделать Любая помощь будет оценена по достоинству спасибо

  • Градиент изображения к фону

    Я хотел бы создать градиент изображения на фон, примерно так: http://jsfiddle.net/yw9v7zm5 / но вместо того, чтобы исчезать снизу вверх, я бы хотел, чтобы он шел справа налево или наоборот. даже когда я пытался с: background: -moz-linear-gradient(right, rgba(255,255,255,0) 0%, rgba(255,255,255,1). ..



1

С помощью Sobel вы вычислили производные в направлениях x и y.

Эти две производные вместе образуют градиент . То есть градиент имеет два значения (вектор 2D) в каждом пикселе. Поскольку у нас есть вектор в каждом пикселе, у нас есть векторное поле .

Градиент дает силу и направление наклона в каждой точке. Величина градиента дает силу наклона.

Поделиться Cris Luengo     06 июля 2019 в 13:17


Похожие вопросы:


Что такое градиент в круговой анимации в ProgressDialog?

Что такое градиент в круговой анимации в ProgressDialog? Я хотел бы использовать его сам, и мне очень нравятся его цвета... не могли бы вы мне немного помочь?


Градиент изображения в точке

Я работаю с сегментацией изображений. Мне нужно вычислить градиент изображения в точке, поэтому я пытался понять сам (потому что я знаю, как вычислить градиент, когда у меня есть обычное уравнение),...


Как визуализировать градиент изображения в Python?

Как визуализировать градиент изображения этой картинки в Python, как на рисунке выше?


Как применить градиент для изображения в представлении изображения в android

Может ли кто-нибудь сказать, можно ли дать градиент для изображения в представлении изображения в android, если да, может ли кто-нибудь сказать, как это сделать Любая помощь будет оценена по...


Градиент изображения к фону

Я хотел бы создать градиент изображения на фон, примерно так: http://jsfiddle.net/yw9v7zm5 / но вместо того, чтобы исчезать снизу вверх, я бы хотел, чтобы он шел справа налево или наоборот. даже...


Что такое вектор изображения?

Может ли кто-нибудь объяснить мне, что такое вектор изображения? В библиотеке OpenCV функция imread используется для преобразования изображения в вектор. Где я могу увидеть исходный код imread ?...


Градиент прозрачности на границах изображения

Я хотел бы сделать градиентную непрозрачность от 100% до 0% только на границах изображения. Я могу, например, сделать градиентную непрозрачность в одном направлении изображения, как здесь( внизу...


Градиент развертки: что это такое и его примеры

Я наткнулся на градиент развертки на Android и был заинтригован, может ли он дать мне лучший контроль над цветовыми интервалами и переходами. Сделал быстрый поиск и почти ничего об этом не нашел!!...


Что такое градиент метода градиента pytorch floor()?

Я хочу использовать метод floor() в одной из моих моделей. Я хотел бы понять, что pytorch делает со своим градиентным распространением, поскольку как таковой floor является разрывным методом. Если...


Радиальный градиент прозрачности на фон изображения

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

Что такое градиент изображения?

Градиент изображения - это термин, используемый для описания непрерывного перехода от светлого к темному или от темного к светлому на изображении. Этот сдвиг относится конкретно к интенсивности одного цвета, что означает, что один цвет будет переходить от белого, максимальная интенсивность, к черному, минимальная интенсивность. Во время этого сдвига цвет будет двигаться через каждую перестановку своего конкретного оттенка. Подобный термин «градиент цвета» относится к переходу от одного цвета к другому без учета интенсивности. Хотя эти два термина имеют только поверхностное сходство, между ними существует большая путаница, и они часто обмениваются непреднамеренно.

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

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

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

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

ДРУГИЕ ЯЗЫКИ

Нахождение градиента вектор-функции

Дата публикации Oct 20, 2018

Название изображения:Источник

ВЧасть 1Нам поставили задачу: вычислить градиент этой функции потерь:

Изображение 1: функция потери

Чтобы найти градиент, мы должны найти производную функцию.

ВЧасть 2мы научились вычислять частную производную функции по каждой переменной. Однако большинство переменных в этой функции потерь являются векторами. Возможность найти частную производную векторных переменных особенно важна, поскольку нейронная сеть работает с большими объемами данных. Векторные и матричные операции - это простой способ представления операций с таким большим количеством данных. Как именно вы можете найти градиент вектор-функции?


Градиент скалярной функции

Скажи, что у нас есть функция,f (x, y) = 3x²y, Наши частные производные:

Изображение 2: Частичные производные

Если мы организуем эти части в горизонтальный вектор, мы получимградиентизР (х, у), или∇ f (x, y):

Изображение 3: Градиент f (x, y)

6yxэто изменение вР (х, у)в отношении изменения вИкс, в то время как3x²это изменение вР (х, у)в отношении изменения вY,

Что происходит, когда у нас есть две функции? Давайте добавим еще одну функцию,g (x, y) = 2x + y⁸, Частные производные:

Изображение 4: Частицы для g (x, y)

Таким образом, градиент g (x, y):

Изображение 5: градиент g (x, y)

Представляющие функции

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

Изображение 6: ВекторИкс

Следовательно,Р (х, у, г)станетF (x₁, x₂, x₃)который становитсяе (Икс).

Мы также можем объединить несколько функций в вектор, например так:

Изображение 7: ВекторY

В настоящее время,у = F (X)гдеF (X)является вектором из [f₁ (Икс), f₂ (Икс), f₃ (Икс) . .. п (Икс)]

Для нашего предыдущего примера с двумя функциями,f (x, y) ⇒ f (Икс)а такжеg (x, y) ⇒ g (Икс).Здесь векторИкс= [x₁, x₂], гдеx₁ = х, а такжеx₂ = у, Чтобы упростить его еще больше, мы можем объединить наши функции: [f (Икс),г(Икс)] = [f₁ (Икс), f₂ (Иксзнак равноf (x) = y.

Изображение 8: Уравнения в векторной функцииY

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


Градиент вектор-функции

Теперь, когда у нас есть две функции, как мы можем найти градиент обеих функций? Если мы организуем оба их градиента в одну матрицу, мы переместимся из векторного исчисления в матричное исчисление. Эта матрица и организация градиентов нескольких функций с несколькими переменными, известна какМатрица Якобиана,

Изображение 9: Якобиан

Есть несколько способов представления якобиана. Этот макет, где мы укладываем градиенты по вертикали, известен какмакет числителя, но другие документы будут использоватьрасположение знаменателя, который просто переворачивает его по диагонали:

Изображение 10: Расположение знаменателя якобиана

Градиент функции идентичности

Давайте возьмем функцию идентичности,у = ф (х) = х, гдеFi (Икс) = xiи найдите его градиент:

Изображение 11: функция идентификации

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

Изображение 12: Якобиан тождественной функции

Поскольку это функция идентичности, f₁ (Икс) = x₁, f₂ (Икс) = х₂ и тд. Следовательно,

Изображение 13: Якобиан тождественной функции

Частичная производная функции по переменной, которой нет в функции, равна нулю. Например, частная производная 2x² по y равна 0. Другими словами,

Изображение 14: частная производная функции по переменной, которой нет в функции, равна нулю

Поэтому все, что не на диагонали якобиана, становится равным нулю. Между тем, частная производная любой переменной по отношению к себе равна 1. Например, частная производнаяИксв отношенииИксравен 1. Следовательно, якобиан становится:

Изображение 15: Якобиан тождественной функции

Градиент комбинаций вектор-векторных функций

Элементарные бинарные операторыявляются операциями (такими как сложениевес+Иксиливес>Икскоторый возвращает вектор единиц и нулей), который применяет оператор последовательно, начиная с первого элемента обоих векторов, чтобы получить первый элемент вывода, затем второго элемента обоих векторов, чтобы получить второй элемент вывода… и так далее.

Эта статья представляет поэлементные бинарные операции с такими обозначениями:

Изображение 16: Поэлементная двоичная операция с f (x) и g (x)

Здесь ◯ означает любой поэлементный оператор (например, +), а не композицию функций.

Итак, как вы находите градиент поэлементной операции двух векторов?

Поскольку у нас есть два набора функций, нам нужны два якобиана, один из которых представляет градиент относительноИкси один по отношению квес:

Изображение 17: Якобиан по отношению квеса такжеИкс

Большинство арифметических операций нам понадобятся простые, поэтомуе (ш)часто просто векторвес, Другими словами,Fi (Wi) = Wi, Например, операцияW + хподходит к этой категории, так как она может быть представлена ​​каке (ж) + д (х)гдеfi (wi) + gi (xi) = wi + xi.

При этом условии каждый элемент в двух якобианах упрощается до:

Изображение 18: Элементы в якобиане

На диагонали i = j, поэтому существует значение для частной производной. Вне диагонали, однако, i ≠ j, поэтому частные производные становятся равными нулю:

Изображение 19: Диагональный якобиан

Мы можем представить это более кратко как:

Изображение 20: Якобиан по отношению квеса такжеИкс

Попробуем найти градиент функцииW + х, Мы знаем, что все вне диагонали равно 0. Значения частичных по диагонали относительновеса такжеИксявляются:

Изображение 21: Частичное в отношениивеса такжеИкс

Итак, оба якобиана имеют диагональ 1. Это выглядит знакомо ... это матрица тождеств!

Давайте попробуем это с умножением:ш * х, Значения частностей по диагонали относительновеса такжеИксявляются:

Изображение 22: Частичное в отношениивеса такжеИкс

Следовательно, градиент по отношению квесизш * хявляетсяDiag (Икс)в то время как градиент по отношению кИксизш * хявляетсяDiag (вес).

Применяя те же шаги для вычитания и деления, мы можем суммировать все это:

Изображение 23: Градиенты общих элементарных бинарных операций

Градиент векторных сумм

Одной из наиболее распространенных операций в глубоком обучении является операция суммирования. Как мы можем найти градиент функцииу = сумма (Икс)?

у = сумма (Икс)также может быть представлен как:

Изображение 24: у = сумма (Икс)

Следовательно, градиент может быть представлен как:

Изображение 25: Градиент у = сумма (Икс)

А так как частная производная функции по переменной, которой нет в функции, равна нулю, ее можно дополнительно упростить следующим образом:

Изображение 26: Градиент у = сумма (Икс)

Обратите внимание, что результатом является горизонтальный вектор.

Как насчет градиентау = сумма (Иксг)? Единственное отличие состоит в том, что мы умножаем каждый частный с константой, z:

Изображение 27: Градиент у = сумма (Икся) в отношенииИкс

Хотя это является производной по отношению кИкс, производная по скаляруZэто просто число:

Изображение 28: Градиент у = сумма (Иксz) относительно z

Градиент комбинаций векторных функций правила цепочки

ВЧасть 2мы узнали о правилах цепей с несколькими переменными. Однако это работает только для скаляров. Давайте посмотрим, как мы можем интегрировать это в векторные вычисления!

Давайте возьмем векторную функцию,Yзнак равное(Икс)и найти градиент. Давайте определим функцию как:

Изображение 29:Yзнак равное(Икс)

И то и другоеf₁ (х)а такжеf₂ (х)являются составными функциями. Введем промежуточные переменные дляf₁ (х)а такжеf₂ (х)и переписать нашу функцию:

Изображение 30:Yзнак равное(г(Икс))

Теперь мы можем использовать наше правило цепочки переменных, чтобы вычислить производную вектораY, Просто вычислите производнуюf₁ (х)а такжеf₂ (х)и поместите их один над другим:

Изображение 31: ГрадиентYзнак равное(г(Икс))

Вуаля! У нас есть наш градиент. Однако мы пришли к нашему решению со скалярными правилами, просто сгруппировав числа в вектор. Есть ли способ представить правило цепи с несколькими переменными для векторов?

Прямо сейчас наш градиент вычисляется с помощью:

Изображение 32: ГрадиентYзнак равное(г(Икс))

Обратите внимание, что первый член градиентов обоихf₁ (х)а такжеf₂ (х)включает частичноеg₁надИкси второй член градиентов обоихf₁ (х)а такжеf₂ (х)включает частичноеg₂надИкс Это как умножение матриц! Поэтому мы можем представить это как:

Изображение 33: Векторное представление градиентаYзнак равное(г(Икс))

Давайте проверим наше новое представление правила цепочки векторов:

Изображение 34: Правило векторной цепи

Мы получаем тот же ответ, что и скалярный подход! Если вместо одного параметраИксу нас есть векторный параметрИкснам просто нужно немного изменить наше правило, чтобы получить полное правило цепочки векторов:

Изображение 35: Правило векторной цепи

Другими словами:

Изображение 36: Правило векторной цепи

В нашем примере выше,еэто чисто функцияг; то есть,фиявляется функциейсолдатно нетGJ(каждая функцияесоответствует ровно 1 функцииг),В этом случае все вне диагонали становится равным нулю, и:

Изображение 37: Особый случай векторного правила цепочки

Теперь у нас есть все части, которые мы находим в градиенте нейронной сети, с которой мы начали нашу серию:

Изображение 38: Функция стоимости

Проверять, выписыватьсяЧасть 4чтобы узнать, как вычислить его производную!


Если вы еще этого не сделали, прочитайте части 1 и 2:

ЧитатьЧасть 4для грандиозного финала!

Скачать оригинал статьиВот,

Если вам понравилась эта статья, не забудьте оставить несколько хлопков! Оставьте комментарий ниже, если у вас есть какие-либо вопросы или предложения 🙂

Оригинальная статья

Границы CSS используя градиент — оформление границы на CSS

Благодаря технологии CSS мы можем создавать сайты и использовать при этом меньше изображений. Я думаю вы прекрасно знаете, что изображения действительно замедляют загрузку сайта. Раньше, чтобы создать границы css в виде перехода одного цвета к другому необходимо было использовать именно изображения. Но в CSS3 есть такое новое свойство как linear-gradient, с помощью которого можно осуществить нашу задумку.

Я подобрал некоторые статьи, в которых вместо изображений можно и нужно использовать свойства CSS3:

Границы CSS — СПОСОБ 1

1) Градиент границы сверху вниз

Живой пример:

В HTML это просто блок:

1
<div></div>

А CSS с первого взгляда кажется громоздким:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.box {  
    margin: 50px auto; /* отступ сверху, снизу и центрирование по горизонтали */
    width: 250px; /* ширина */
    height: 250px; /* высота */
    border-top: 20px solid #3ACFD5; /* размер тип и цвет верхней границы */
    border-bottom: 20px solid #3a4ed5; /* размер тип и цвет нижней границы */
 
    /* свойства width и height включают в себя значения полей и границ, но не отступов */
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
 
    background-position: 0 0, 100% 0; /* положение фонового изображения */
    background-repeat: no-repeat; /* запрещаем повторение фонового изображения */
 
    /* размер фонового изображения */
    -webkit-background-size: 20px 100%;
    -moz-background-size: 20px 100%;
    background-size: 20px 100%;
 
    /* само фоновое изображение, где указываем в линейном градиенте что цвет начинает меняться сверху (top) */
    background-image: -webkit-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%), -webkit-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%);
    background-image: -moz-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%), -moz-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%);
    background-image: -o-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%), -o-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%);
    background-image: linear-gradient(to bottom, #3acfd5 0%, #3a4ed5 100%), linear-gradient(to bottom, #3acfd5 0%, #3a4ed5 100%);
}

2) Градиент границы слева направо

Вот как это выглядит на реальной странице:

Как в и прошлый раз HTML очень простой:

1
<div></div>

А CSS сильно не изменился:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
. box {  
    margin: 50px auto;
    width: 250px; /* ширина */
    height: 250px; /* высота */
    border-left: 20px solid #3ACFD5; /* размер тип и цвет левой границы */
    border-right: 20px solid #3a4ed5; /* размер тип и цвет правой границы */
 
    /* свойства width и height включают в себя значения полей и границ, но не отступов */
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
 
    background-position: 0 0, 100% 0; /* положение фонового изображения */
    background-repeat: no-repeat; /* запрещаем повторение фонового изображения */
 
    /* размер фонового изображения */
    -webkit-background-size: 100% 20px;
    -moz-background-size: 100% 20px;
    background-size: 100% 20px;
 
    /* фоновое изображение, где указываем в линейном градиенте что цвет начинает меняться СЛЕВА (left) */
    background-image: -webkit-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%), -webkit-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%);
    background-image: -moz-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%), -moz-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%);
    background-image: -o-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%), -o-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%);
    background-image: linear-gradient(to right, #3acfd5 0%, #3a4ed5 100%), linear-gradient(to right, #3acfd5 0%, #3a4ed5 100%);
}

Границы CSS — СПОСОБ 2

Второй способ заключается в использовании CSS3 свойства border-image, которое нам значительно сократит и упростит код. Скоро вы сами в этом убедитесь.

Браузеры, которые поддерживают данное свойство: Chrome, Internet Explorer 11, Firefox, Safari, и Opera.

Также хочу сразу сказать что данное свойство работает только с «квадратными» блоками. То есть вы не сможете сделать закругленные углы границы с помощью свойства border-radius.

1) Градиент сверху вниз

Как видите, результат такой же (если ваш браузер поддерживает данное свойство):

В HTML также различий нет:

1
<div></div>

А вот CSS даже на глаз стал намного меньше:

1
2
3
4
5
6
7
8
9
10
11
12
13
. box {  
    width: 250px; /* ширина */
    height: 250px; /* высота */
    margin: 50px auto; /* верхний и нижний отступы и горизонтальное выравнивание */
    background: #eee; /* цвет фона */
    border: 20px solid transparent; /* задаем сплошную прозрачную границу шириной в 20 пикселей */
 
    /* наша собственная граница */
    -moz-border-image: -moz-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%);
    -webkit-border-image: -webkit-linear-gradient(top, #3acfd5 0%, #3a4ed5 100%);
    border-image: linear-gradient(to bottom, #3acfd5 0%, #3a4ed5 100%);
    border-image-slice: 1; /* смещение фона границы */
}

2) Градиент слева направо

Также сделаем градиент границы CSS, где цвет меняется слева направо:

HTML:

1
<div></div>

CSS также значительно меньше, чем в прошлом способе:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.box {  
    width: 250px; /* ширина */
    height: 250px; /* высота */
    margin: 50px auto; /* верхний и нижний отступы и горизонтальное выравнивание */
    background: #eee; /* цвет фона */
    border: 20px solid transparent; /* задаем сплошную прозрачную границу шириной в 20 пикселей */
 
    /* наша собственная граница */
    -moz-border-image: -moz-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%);
    -webkit-border-image: -webkit-linear-gradient(left, #3acfd5 0%, #3a4ed5 100%);
    border-image: linear-gradient(to right, #3acfd5 0%, #3a4ed5 100%); 
 
    border-image-slice: 1; /* смещение фона границы */
}

3) Диагональный градиент

Еще один интересный способ — диагональное изменение цвета границы:

HTML:

1
<div></div>

CSS код также значительно меньше, чем в прошлом способе:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
. box {  
    width: 250px; /* ширина */
    height: 250px; /* высота */
    margin: 50px auto; /* верхний и нижний отступы и горизонтальное выравнивание */
    background: #eee; /* цвет фона */
    border: 20px solid transparent; /* задаем сплошную прозрачную границу шириной в 20 пикселей */
 
    /* наша собственная диагональная граница, где мы указали что цвет начинает меняться от левого верхнего (top left) угла */
    -moz-border-image: -moz-linear-gradient(top left, #3acfd5 0%, #3a4ed5 100%);
    -webkit-border-image: -webkit-linear-gradient(top left, #3acfd5 0%, #3a4ed5 100%);
    border-image: linear-gradient(to bottom right, #3acfd5 0%, #3a4ed5 100%);
 
    border-image-slice: 1; /* смещение фона границы */
}

Вывод

Понравился ли вам этот способ оформления границы? Надеюсь что да! Потому что он экономит «килобайты» при загрузке. Я показал вам не только еще один способ как красиво оформить ваш сайт, но и как сделать его загрузку хоть чуточку быстрее 😉 !

 

Успехов!

С Уважением, Юрий Немец

Функция Свертка (Convolution)—Справка | ArcGIS for Desktop

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

Входные данные для этой функции:

  • Входной растр
  • Тип
  • Ядро

Типы фильтров свертки

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

Существует несколько типов фильтров свертки, которые вы можете использовать в этой функции. Вы также можете задать тип Заданный пользователем (User Defined) и ввести свои значения ядер.

Вы можете применить фильтр медианы к изображению, задав вес 1/9 для ядра 3 x 3, тем самым давая каждому пикселу в ядре равный вес. Этот фильтр можно использовать для сглаживания изображения. Есть другие ядра, которые можно использовать для выделения и подчеркивания границ (ребер). Вы можете объединять фильтры для достижения определенных результатов. Например, вы можете применить фильтр, которые удалит пятно или сгладит изображение, затем применить фильтр, который выявит ребра.

Для достижения лучших результатов отображения вы можете применить растяжку гистограммы, чтобы настроить контраст и яркость изображения для помощи в выделении пространственных объектов.

На примерах ниже показано одно из этих двух изображений:Нефильтрованное изображение в оттенках серогоНефильтрованное цветное изображение

Фильтры определения ребра

Типы градиента

Фильтры градиента могут использоваться для обнаружения ребер с шагом в 45 градусов.

ТипОписаниеПример:

Градиент Восток

Фильтр 3 х 3

 1  0 -1
 2  0 -2
 1  0 -1

Градиент Север

Фильтр 3 х 3

 -1 -2 -1
  0  0  0
  1  2  1

Градиент Северо-восток

Фильтр 3 х 3

 0 -1 -2
 1  0 -1
 2  1  0

Градиент Северо-запад

Фильтр 3 х 3

 -2 -1  0
 -1  0  1
  0  1  2

Градиент Юг

Фильтр 3 х 3

  1  2  1
  0  0  0 
 -1 -2 -1

Градиент Запад

Фильтр 3 х 3

 -1  0  1
 -2  0  2
 -1  0  1

Типы Лапласа

Фильтры Лапласа часто используются для выявления ребер. Он часто применяется к изображению, которое сначала было сглажено, для уменьшения его чувствительности к шуму.

ТипОписаниеПример:

Лапласиан 3x3

Фильтр 3 х 3

 0 -1  0
-1  4 -1
 0 -1  0

Лапласиан 5x5

Фильтр 5 х 5

 0  0 -1  0  0 
 0 -1 -2 -1  0
-1 -2 17 -2 -1
 0 -1 -2 -1  0
 0  0 -1  0  0

Типы обнаружения линий

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

Вы можете получить лучшие результаты, если примените алгоритм сглаживания до алгоритма обнаружения ребер.

ТипОписаниеПример:

Обнаружение линий По горизонтали

Фильтр 3 х 3

-1 -1 -1
 2  2  2 
-1 -1 -1

Обнаружение линий По левой диагонали

Фильтр 3 х 3

 2 -1 -1
-1  2 -1
-1 -1  2

Обнаружение линий По правой диагонали

Фильтр 3 х 3

-1 -1  2 
-1  2 -1
 2 -1 -1

Обнаружение линий По вертикали

Фильтр 3 х 3

-1  0 -1 
-1  2 -1 
-1  2 -1

Типы Sobel

Фильтр Sobel используется для обнаружения ребер.

ТипОписаниеПример:

Sobel По горизонтали

Фильтр 3 х 3

-1 -2 -1
 0  0  0
 1  2  1

Sobel По вертикали

Фильтр 3 х 3

-1  0  1 
-2  0  2 
-1  0  1

Фильтры Увеличение резкости и Сглаживание

Типы слияния

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

ТипОписаниеПример:

Острый

Фильтр 3 х 3

  0    -0.25    0
-0.25    2    -0.25
  0    -0.25    0

Острый II

Фильтр 3 х 3

-0.25 -0.25 -0.25 
-0.25  3    -0.25 
-0.25 -0.25 -0.25

Слияние 3x3

Высокочастотный фильтр 3 x 3

-1 -1 -1 
-1  9 -1 
-1 -1 -1

Слияние 5x5

Высокочастотный фильтр 5 x 5

-1 -3 -4 -3 -1 
-3  0  6  0 -3 
-4  6 21  6 -4 
-3  0  6  0 -3
-1 -3 -4 -3 -1

Типы сглаживания

Фильтры сглаживания (низкочастотные) сглаживают данные, уменьшая локальное изменение и удаляя шум. Низкочастотный фильтр вычисляет среднее значение для каждой окрестности. Эффект в том, что большие и маленькие значения в каждой окрестности будут усредняться, что уменьшит экстремальные значения данных.

ТипОписаниеПример:

Сгладить Среднее арифметическое

Фильтр 3 х 3

0.111  0.111  0.111
0.111  0.111  0.111
0.111  0.111  0.111

Сглаживание 3x3

Низкочастотный фильтр 3 x 3

1  2  1
2  4  2
1  2  1

Сглаживание 5x5

Низкочастотный фильтр 5 x 5

1  1  1  1  1 
1  4  4  4  1 
1  4 12  4  1 
1  4  4  4  1 
1  1  1  1  1

Другие фильтры

Типы распределения точек

Функция распределения точек описывает распространение света от точечного источника через линзу. Это приводит к незначительному эффекту размывания границ.

ТипОписаниеПример:

Распределение точек

Фильтр 3 х 3

-0.627  0.352 -0.627
 0.352  2.923  0.352
-0.627  0.352 -0.627

Связанные темы

Отзыв по этому разделу?

Взгляд на CSS3 градиент (линейный и радиальный градиенты) | XoZblog

Здравствуйте, уважаемые читатели XoZbloga! Градиент является прекрасным инструментом манипуляции с цветом в CSS3. Вместо того, чтобы использовать изображение, для создания эффекта градиента на веб-странице, куда выгодней будет воспользоваться CSS3 градиентом и тем самым «облегчить» сайт. Так как пользователю не нужно будет тратить времени и трафика на загрузку фонового изображения. Существует два основных вида градиента: радиальный и линейный. Сегодняшний пост будет именно о них.

Линейный градиент

Как говориться в классификации, градиенты в CSS3 являются изображениями. Для них нет специальных свойств. А для объявления используется свойство фонового изображения.

В общем случае синтаксис градиента (линейного) выглядит так:

1
2
3
4
5
6
7

div {
   background-image: -webkit-linear-gradient(top, #FF5A00 0%, #FFAE00 100%);
   background-image: -moz-linear-gradient(top, #FF5A00 0%, #FFAE00 100%);
   background-image: -ms-linear-gradient(top, #FF5A00 0%, #FFAE00 100%);
   background-image: -o-linear-gradient(top, #FF5A00 0%, #FFAE00 100%);
   background-image: linear-gradient(top, #FF5A00 0%, #FFAE00 100%);
}

Итак, давайте обо всем по порядку.

Прежде всего, линейный градиент объявлен функцией linear-gradient(). Функция имеет три основных значения. Первое значение определяет исходное положение. В примере указано top т.е. исходное положение сверху. Можно также использовать bottom, left и right;

1
2
3

div {  
    background-image: linear-gradient(top, #FF5A00, #FFAE00);    
}

Чтобы добиться перехода цвета из одного угла в другой мы можем использовать градус угла, вот пример:

1
2
3

div {  
    background-image: linear-gradient(45deg, #FF5A00, #FFAE00);  
}

Если угол будет отрицательным то позиция смениться с нижнего левого угла на верхний левый.

Второе значение функции это начальный цвет и его стоп позиция, которая указана в процентах. Объявление данной позиции не обязательно, браузер по умолчанию присвоит первому цвету значение 0%.

Последним значением является второй цвет и его стоп позиция. По умолчанию принимает значение 100%. Эти крайние значения и они подразумевают, что первый цвет сразу начинает переходить во второй. Однако, если мы установим для первого цвета 50%, то он только с середины доступной высоты начнет переходить во второй. Вот так выглядит код:

1
2
3

div {
   background-image: linear-gradient(top, #FF5A00 0%, #FFAE00 100%);
}

Теперь давайте изменим значение стоп позиций, и на этот раз мы установим 50% для первого и второго цвета:

1
2
3

div {
   background-image: linear-gradient(top, #FF5A00 50%, #FFAE00 50%);
}

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

Просмотр демо страницы и скачивание исходников не доступно

Уважаемый читатель, XoZblog существует и развивается за счёт доходов от ненавязчивой рекламы. Если не затруднит, добавьте этот сайт в исключение AdBlock. Спасибо за понимание!

Радиальный градиент

Радиальный градиент также как и линейный объявляется функцией, только уже radial-gradient(). Также есть и основные значения: это форма радиального градиента (circle — круг или ellipse — эллипс), начальный и конечный цвет. Синтаксис следующий:

1
2
3

div {
   background: radial-gradient(circle, #F9E497, #FFAE00);
}

Если не указывать форму, то по-умолчанию будет установлен эллипс.

Также по-умолчанию установлена центральная позиция градиента, ее можно изменить. Позицию можно задать командами (top, bottom, left, right и center), а также их комбинациями, либо указать в процентах или пикселях.

Комбинации команд:

  • По центру вверху — top — 50% 0%;
  • В левом верхнем углу — left top — 0% 0%;
  • В правом верхнем углу — right top — 100% 0%;
  • По центру — center — 50% 50%;
  • Слева по центру — left center — 0% 50%;
  • Справа по центру — right center — 100% 50%;
  • По центру снизу — bottom — 50% 100%;
  • В левом нижнем углу — left bottom — 0% 100%;
  • В правом нижнем углу — right bottom — 100% 100%.

Вот пример с процентами:

1
2
3

div {
   background-image: radial-gradient(70% 20%, circle, #F9E497, #FFAE00);
}

Первое значение по оси Х второе по У.

Также радиальному градиенту можно задавать размер. Размер указывается через пробел после формы градиента. По-умолчанию применяется farthest-corner (к дальнему углу). Расчет ведется от центральной точки градиента до:

Значение Описание
closest-side Размер градиента рассчитывается из расстояния до любой ближней стороны блока (для circle) или до ближних сторон по X и по У (для ellipse). Примеры чуть ниже.
farthest-side Размер также рассчитывается из расстояния, но уже до дальних сторон.
closest-corner Теперь в качестве ориентира используются ближние углы.
farthest-corner Рассчитывается из расстояния до дальних углов.

Чтобы, это лучше понять рассмотрим на примере. Градиент эллиптической формы с белым начальным и конечным синим цветом:

1
2
3

div {
   background-image: radial-gradient(230px 50px, ellipse closest-side, white, blue);
}

Размер рассчитывается из расстояния до ближних сторон, очевидно что верхняя ближе по оси Y и левая по оси X.

А теперь до дальних сторон:

1
2
3

div {
   background-image: radial-gradient(230px 50px, ellipse farthest-side, white, blue);
}

Результат, как говорится на лицо. Размер исчисляется из расстояния до дальних сторон.

Просмотр демо страницы и скачивание исходников не доступно

Уважаемый читатель, XoZblog существует и развивается за счёт доходов от ненавязчивой рекламы. Если не затруднит, добавьте этот сайт в исключение AdBlock. Спасибо за понимание!

В радиальном как и в линейном градиенте для цвета могут быть применены стоп позиции. Хочется также заметить, если необходимо достигнуть прозрачности цветов то использовать следует rgba.

1
2
3

div {  
    background-image: linear-gradient(top, rgba(255,90,0,0.2), rgba(255,174,0,0.2));  
}

Альфа канал, тот что последний и равен 0.2 указывает на то, что от 100% цвета используется только 20%.

В обоих видах CSS3 градиента можно использовать не два, а несколько цветов.

1
2
3

div {
   background-image: linear-gradient(top, red, orange, yellow, green, blue, indigo, violet);
}

Просмотр демо страницы и скачивание исходников не доступно

Уважаемый читатель, XoZblog существует и развивается за счёт доходов от ненавязчивой рекламы. Если не затруднит, добавьте этот сайт в исключение AdBlock. Спасибо за понимание!

Повторяющийся градиент

Для обоих видов можно использовать повторение цветов. То есть, из данных значений образуется цикл. Функции повторяющегося градиента, repeating-linear-gradient() — для линейного и repeating-radial-gradient() — для радиального.

1
2
3

div {
   background-image: repeating-radial-gradient(red, blue 20px, red 40px);
}

Просмотр демо страницы и скачивание исходников не доступно

Уважаемый читатель, XoZblog существует и развивается за счёт доходов от ненавязчивой рекламы. Если не затруднит, добавьте этот сайт в исключение AdBlock. Спасибо за понимание!

Кроссбраузерность

К сожалению, на момент написания этой статьи, современные браузеры еще не поддерживают стандартный синтаксис. Они по прежнему нуждаются в префиксах, каждый в своих (-webkit-, -moz-, -ms- и -o-). Поэтому синтаксически правильным является вот такое описание градиента:

1
2
3
4
5
6
7

div {
   background-image: -webkit-linear-gradient(top, #FF5A00 0%, #FFAE00 100%); /* для Chrome и Safari */
   background-image: -moz-linear-gradient(top, #FF5A00 0%, #FFAE00 100%); /* для Firefox */
   background-image: -ms-linear-gradient(top, #FF5A00 0%, #FFAE00 100%); /* для IE 10+ */
   background-image: -o-linear-gradient(top, #FF5A00 0%, #FFAE00 100%); /* для Opera */
   background-image: linear-gradient(top, #FF5A00 0%, #FFAE00 100%); /* стандартный синтаксис */
}

Чтобы упростить задачу с префиксами, можно использовать бесплатную библиотеку Prefix-Free.

Для того чтобы градиент заработал на «9 осле» (Internet Explorer 9), пишем так:

1
2
3

div {
   filter: progid:DXImageTransform. Microsoft.gradient(startColorstr=#FF5A00, endColorstr=#FFAE00);
}

Но даже здесь есть ограничения, нельзя добавить более 3 цветов и для использования прозрачности нужно немного изменить HEX код цвета:

1
2
3

div {
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33FF5A00, endColorstr=#33FFAE00);
}

Где 33 сразу после решетки это процент насыщенности цвета.

Надеюсь, что статья оказалась для Вас полезной, а рассмотренная тема полностью раскрытой.

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на страницу ВКонтакте или добавляйте в круги на Google+. Не забывайте оставлять комментарии. Спасибо!

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на еженедельную почтовую рассылку или на новостную ленту RSS. Спасибо!

Основы градиентов изображения и обнаружения краев | от Evergreen Technologies

Фото Leio McLaren (@leiomclaren) на Unsplash

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

отпечаток пальца медицинская диагностика обнаружение края

Вычисление градиента включает вычисление величины и направления градиента. Чтобы вычислить величину, нам сначала нужно вычислить градиент в направлениях x (Gx) и y (Gy). Рассмотрим изображение прямоугольника ниже. Чтобы вычислить градиент Gx, мы перемещаемся слева направо и выделяем точки, в которых интенсивность изображения резко меняется. Это даст нам точки вдоль вертикальных краев прямоугольника. Аналогично вычислению градиента Gy, мы перемещаемся сверху вниз и выделяем точки, в которых интенсивность изображения резко меняется.Это даст нам точки вдоль горизонтальных краев прямоугольника.

На следующем изображении показано, как сначала вычисляется Gx, Gy, а затем объединяется для получения общей величины градиента.

Как вы можете видеть в примере выше, Gx - это просто разница между интенсивностью пикселей в точках к востоку и западу от центральной точки. Точно так же Gy - это разница в интенсивности пикселей в точках к югу и северу от центрального пикселя. Теперь, когда у нас есть Gx и Gy, давайте посмотрим, как можно вычислить G.

Математически величина градиента задается как

G = Sqrt (GX ** 2 + Gy ** 2)

, а направление градиента задается как

Theta. = atan2 (Gy, Gx) * 180 / pi

В приведенном выше примере все изменения происходят к северу от центральной точки.Здесь Gx = 0, Gy = -255. Следовательно, Theta = -90 градусов

В приведенном выше примере Gx = 255, Gy = 255

G = Sqrt (255 ** 2 + 255 ** 2) = 255 и

Theta = atan2 (255,255) * 180 / pi = 135 градусов

Это дает G и тета только для небольшой области 3x3 всего изображения. Затем вам нужно будет повторить весь процесс для всего изображения.

К счастью, этого легко добиться с помощью свертки предопределенных ядер. Давайте обсудим здесь несколько.

Ядра Собеля:

Имеется 2 предопределенных ядра Собеля 3x3 Kx и Ky, которые используются для вычисления градиентов.Эти ядра применяются к области 3x3 изображения (I) за один раз с использованием свертки, а затем повторяются по всему изображению. Ядра Собеля придают больший вес центральным прикселям по сравнению с другими пикселями.

Gx = Я сворачиваю Kx

Gy = Я сворачиваю Ky

Здесь операция свертки - это поэлементное умножение матричных элементов с последующим их суммированием

Затем мы повторяем процесс, сдвигая ядра слева направо и сверху вниз.

Этот идентификатор обрабатывается за кулисами для вас, если вы используете opencv и python.Вот код для вычисления градиента Собела

# вычислить величину градиента и ориентацию соответственно
# вычислить градиенты по осям X и Y соответственно
gX = cv2.Sobel (gray, ddepth = cv2.CV_64F, dx = 1, dy = 0)
gY = cv2.Sobel (серый, ddepth = cv2.CV_64F, dx = 0, dy = 1)
mag = np.sqrt ((gX ** 2) + (gY ** 2))
ориентация = np.arctan2 (gY, gX) * (180 / np.pi)% 180

cv2.imshow («величина градиента», mag)

Вот визуальный эффект градиента Собеля.Обратите внимание, как обнаруживаются края.

Scharr:

Ядра Scharr приведены ниже. Есть еще один вариант ядер Собеля. Он работает лучше, когда размер ядра 3x3, по сравнению с фильтром Собела

Вот код

# вычислить величину градиента и ориентацию соответственно
# вычислить градиенты по осям X и Y, соответственно
gX = cv2.Scharr (серый, ddepth = cv2.CV_64F, dx = 1, dy = 0)
gY = cv2.Scharr (серый, ddepth = cv2.CV_64F, dx = 0, dy = 1)
mag = np.sqrt ((gX ** 2) + (gY ** 2))
ориентация = np.arctan2 (gY, gX) * (180 / np.pi) % 180

cv2.imshow («величина градиента», mag)

А вот визуальное представление величины градиента ядра Шарра.

Шарр и Собел - производные первого порядка.

Лапласиан:

Лапласиан - это производная второго порядка, используемая для обнаружения ребер.

Вот код или определение края лапласиана

лапласиан = cv2.Лапласиан (blur_img, cv2.CV_64F)

cv2.ishow (лапласиан)

Ответ - вот результат. Обратите внимание, что края очень тонкие.

Canny:

Canny - один из самых популярных методов обнаружения кромок. Это многоступенчатый алгоритм. Он был разработан Джоном Ф. Кэнни в 1986 году.

Вот шаги

• Применить размытие по Гауссу: удаляет шум в изображении

• Вычислить Gx, Gy с использованием Sobel: применить ядра Sobel

• Применить немаксимальное подавление: сузить края путем удаления не максимальных точек

• Пороговое значение гистерсиса: удаляет точки, которые не находятся на краях

Вот код

ребер = cv2. Canny (серый, 100, 200, 3, L2gradient = True)

cv2.imshow («canny», edge)

и вот выходной сигнал детектора края Canny

Применение градиентов к видео в реальном времени:

Видео - это не что иное, как серия изображений. Поэтому я попытался применить эти алгоритмы обнаружения краев к видео, снятому с моей веб-камеры. Здесь вы можете увидеть результат и сравнить производительность каждого алгоритма обнаружения края.

Если вы хотите шаг за шагом научиться распознавать края, вы можете записаться на мой курс здесь.Не предполагается наличие фона в opencv. Базовая математика изображений и базовые операции свертки и градиента проиллюстрированы несколькими примерами кода. Напишите мне на [email protected] для получения скидок.

Об авторе Evergreen Technologies:

  • Активно преподает онлайн-курсы по компьютерному зрению, обработке естественного языка и разработке систем SaaS
  • Более 20 лет опыта в Fortune 500 компаний

• Блог: https: // www .evergreentech.онлайн

• Ссылка: @ evergreenllc2020

• Twitter: @tech_evergreen

• Udemy: Evergreen Technologies

• Github: https://github.com/evergreenllc2020/

Более 10 000 студентов в 145 странах, использующих CSS

градиенты - CSS: каскадные таблицы стилей

CSS-градиенты представлены типом данных , специальным типом , состоящим из постепенного перехода между двумя или более цветами.Вы можете выбрать один из трех типов градиентов: линейный (созданный с помощью функции linear-gradient () ), радиальный (созданный с помощью radial-gradient () ) и конический (созданный с помощью функция conic-gradient () ). Вы также можете создавать повторяющиеся градиенты с помощью функций repeat-linear-gradient () , repeat-radial-gradient () и repeat-conic-gradient () .

Градиенты

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

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

Линейный градиент создает полосу цветов, которые прогрессируют в прямая линия.

Базовый линейный градиент

Чтобы создать самый простой тип градиента, все, что вам нужно, это указать два цвета. Они называются цветовыми ограничителями . У вас должно быть как минимум два, но вы можете иметь столько, сколько захотите.

  .simple-linear {
  фон: линейно-градиентный (синий, розовый);
}  

Изменение направления

По умолчанию линейные градиенты идут сверху вниз. Вы можете изменить их поворот, указав направление.

  .horizontal-gradient {
  фон: линейно-градиентный (вправо, синий, розовый);
}
  

Диагональные градиенты

Можно даже сделать градиент по диагонали, от угла к углу.

  .diagonal-gradient {
  фон: линейно-градиентный (справа внизу, синий, розовый);
}
  

Использование углов

Если вам нужен больший контроль над его направлением, вы можете задать градиенту определенный угол.

 .angled-gradient {
  фон: линейно-градиентный (70град, синий, розовый);
}
  

При использовании угла 0deg создает вертикальный градиент снизу вверх, 90deg создает горизонтальный градиент слева направо и так далее по часовой стрелке. Отрицательные углы идут против часовой стрелки.

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

Использование более двух цветов

Вам не нужно ограничивать себя двумя цветами - вы можете использовать их сколько угодно! По умолчанию цвета равномерно распределены по градиенту.

  .auto-spaced-linear-gradient {
  фон: линейно-градиентный (красный, желтый, синий, оранжевый);
}
  

Позиционирование цветовых ограничителей

Необязательно оставлять цветные стопы в положениях по умолчанию.Чтобы точно настроить их местоположение, вы можете дать каждому из них ноль, один или два процента или, для радиальных и линейных градиентов, абсолютные значения длины. Если вы указываете местоположение в процентах, 0% представляет начальную точку, а 100% представляет конечную точку; однако вы можете использовать значения за пределами этого диапазона, если необходимо, чтобы получить желаемый эффект. Если вы оставите место неопределенным, положение этой конкретной цветовой точки будет автоматически рассчитано для вас, при этом первая остановка цвета будет на 0% , а последняя остановка цвета будет на 100% , а любой другой цвет перестанет быть на полпути между соседними цветовыми точками.

  .multicolor-linear {
   фон: linear-gradient (слева, салатовый 28px, красный 77%, голубой);
}
  

Создание жестких линий

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

  . striped {
   фон: линейный градиент (слева внизу, голубой 50%, бледно-золотой 50%);
}  

Градиентные подсказки

По умолчанию градиент равномерно переходит от одного цвета к другому.Вы можете включить цветовую подсказку, чтобы переместить среднюю точку значения перехода в определенную точку градиента. В этом примере мы переместили среднюю точку перехода с отметки 50% на отметку 10%.

  .color-hint {
  фон: линейно-градиентный (синий, 10%, розовый);
}
.simple-linear {
  фон: линейно-градиентный (синий, розовый);
}  

Создание цветных полос и полос

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

  .multiposition-stop {
   фон: linear-gradient (слева,
       лайм 20%, красный 30%, красный 45%, голубой 55%, голубой 70%, желтый 80%);
   фон: linear-gradient (слева,
       лайм 20%, красный 30% 45%, голубой 55% 70%, желтый 80%);
}
.multiposition-stop2 {
   фон: linear-gradient (слева,
      лайм 25%, красный 25%, красный 50%, голубой 50%, голубой 75%, желтый 75%);
   фон: linear-gradient (слева,
      лайм 25%, красный 25% 50%, голубой 50% 75%, желтый 75%);
}
  

В первом примере, приведенном выше, лайм переходит от отметки 0%, которая подразумевается, к отметке 20%, переходит от лайма к красному в течение следующих 10% ширины градиента, достигает сплошного красного цвета на 30%. отметка и остается сплошным красным до 45% градиента, где он исчезает до голубого, становится полностью голубым для 15% градиента и так далее.

Во втором примере вторая граница цвета для каждого цвета находится в том же месте, что и первая граница цвета для соседнего цвета, создавая эффект полос.

В обоих примерах градиент записывается дважды: первый - это метод CSS изображений уровня 3 для повторения цвета для каждой остановки, а второй пример - это метод множественной остановки цвета изображений CSS уровня 4, включающий в себя два значения длины цветовой остановки в объявление linear-color-stop.

Управление продвижением градиента

По умолчанию градиент равномерно распространяется между цветами двух соседних точек цвета, при этом средняя точка между этими двумя точками цвета является значением цвета средней точки.Вы можете управлять интерполяцией или прогрессией между двумя остановками цвета, включая местоположение цветовой подсказки. В этом примере цвет достигает середины между лаймовым и голубым 20% пути через градиент, а не 50% пути. Второй пример не содержит подсказки, подчеркивающей разницу, которую может иметь цветовая подсказка:

  .colorhint-gradient {
  фон: линейно-градиентный (вверх, черный, 20%, голубой);
}
.regular-progression {
  фон: линейно-градиентный (вверх, черный, голубой);
}
  

Наложение градиентов

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

  .layered-image {
  фон: линейно-градиентный (вправо, прозрачный, туманная роза),
      URL ("https://mdn.mozillademos.org/files/15525/critters.png");
}
  

Составные градиенты

Вы можете даже комбинировать градиенты с другими градиентами. Пока верхние градиенты не полностью непрозрачны, градиенты ниже будут видны.

  .stacked-linear {
  фон:
      линейный градиент (217deg, rgba (255,0,0 ,.8), ргба (255,0,0,0) 70,71%),
      линейный градиент (127deg, rgba (0,255,0, 0,8), rgba (0,255,0,0) 70,71%),
      линейный градиент (336deg, rgba (0,0,255, 0,8), rgba (0,0,255,0) 70,71%);
}
  

Радиальные градиенты похожи на линейные градиенты, за исключением того, что они исходят из центральной точки. Вы можете указать, где находится эта центральная точка. Вы также можете сделать их круглыми или эллиптическими.

Базовый радиальный градиент

Как и в случае с линейными градиентами, все, что вам нужно для создания радиального градиента, - это два цвета.По умолчанию центр градиента находится на отметке 50% 50%, а градиент имеет эллиптическую форму, соответствующую соотношению сторон его поля:

  .просто-радиальный {
  фон: радиально-градиентный (красный, синий);
}
  

Позиционирование радиальных ограничителей цвета

Опять же, как и для линейных градиентов, вы можете позиционировать каждый радиальный ограничитель цвета с процентной или абсолютной длиной.

  .radial-gradient {
  фон: радиальный градиент (красный 10px, желтый 30%, # 1e90ff 50%);
}
  

Позиционирование центра градиента

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

  .radial-gradient {
  фон: радиальный градиент (при 0% 30%, красный 10 пикселей, желтый 30%, # 1e90ff 50%);
}
  

Размер радиальных градиентов

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

Пример: ближайшая сторона для эллипсов

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

  .radial-ellipse-side {
  фон: радиальный градиент (ближайшая сторона эллипса,
      красный, желтый 10%, # 1e90ff 50%, бежевый);
}
  
Пример: самый дальний угол для эллипсов

Этот пример аналогичен предыдущему, за исключением того, что его размер указан как farthest-corner , который устанавливает размер градиента на расстояние от начальной точки до самого дальнего угла охватывающей рамки от начальной точки.

  .radial-ellipse-far {
  фон: радиальный градиент (самый дальний угол эллипса на 90% 90%,
      красный, желтый 10%, # 1e90ff 50%, бежевый);
}
  
Пример: ближайшая сторона для окружностей

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

  .radial-circle-close {
  фон: радиальный градиент (круг с ближайшей стороны на 25% 75%,
      красный, желтый 10%, # 1e90ff 50%, бежевый);
}
  
Пример: длина или процент для эллипсов

Только для эллипсов: вы можете изменить размер эллипса, используя длину или процентное отношение. Первое значение представляет горизонтальный радиус, второе - вертикальный радиус, где вы используете процентное значение, которое соответствует размеру поля в этом измерении. В приведенном ниже примере я использовал процентное значение для горизонтального радиуса.

  .radial-ellipse-size {
   фон: радиальный градиент (эллипс 50% 50 пикселей,
      красный, желтый 10%, # 1e90ff 50%, бежевый);
}
  
Пример: длина окружности

Для кругов размер может быть задан как <длина>, которая является размером круга.

  .radial-circle-size {
  фон: радиальный градиент (круг 50 пикселей,
      красный, желтый 10%, # 1e90ff 50%, бежевый);
}
  

Наборные радиальные градиенты

Как и линейные градиенты, вы также можете складывать радиальные градиенты.Первый указан сверху, последний - снизу.

  .stacked-radial {
  фон:
      радиальный градиент (круг на 50% 0,
        rgba (255,0,0, .5),
        ргба (255,0,0,0) 70,71%),
      радиальный градиент (круг на 6,7% 75%,
        rgba (0,0,255, . 5),
        ргба (0,0,255,0) 70,71%),
      радиальный градиент (круг на 93,3% 75%,
        rgba (0,255,0, .5),
        ргба (0,255,0,0) 70,71%) бежевый;
  радиус границы: 50%;
}
  

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

Синтаксис конического градиента аналогичен синтаксису радиального градиента, но точки цвета размещаются вокруг дуги градиента, окружности круга, а не на линии градиента, выходящей из центра градиента, и цвета -стопы указаны в процентах или градусах: абсолютная длина недействительна.

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

Основной конический градиент

Как и в случае с линейным и радиальным градиентами, все, что вам нужно для создания конического градиента, - это два цвета. По умолчанию центр градиента находится на отметке 50% 50%, а начало градиента обращено вверх:

 .простой конический {
  фон: конический градиент (красный, синий);
}
  

Расположение конического центра

Как и радиальные градиенты, вы можете расположить центр конического градиента с ключевыми терминами, процентными или абсолютными длинами с ключевым словом "at"

  .conic-gradient {
  фон: конический градиент (при 0% 30%, красный 10%, желтый 30%, # 1e90ff 50%);
}
  

Изменение угла

По умолчанию заданные вами точки разного цвета расположены на равном расстоянии по окружности. Вы можете расположить начальный угол конического градиента, используя ключевое слово «from» в начале, за которым следует угол или длина, и вы можете указать различные положения для цветовых ограничителей, включив после них угол или длину.

  .conic-gradient {
  фон: конический градиент (от 45 градусов, красный, оранжевый 50%, желтый 85%, зеленый);
}
  

Функции linear-gradient (), , radial-gradient (), и conic-gradient () не поддерживают автоматически повторяющиеся остановки цвета.Тем не менее, функции повторяющийся-линейный-градиент () , повторяющийся-радиальный-градиент () и повторяющийся-конический-градиент () доступны, чтобы предложить эту функциональность.

Размер повторяющейся линии градиента или дуги - это длина между первым значением остановки цвета и значением длины последней границы цвета. Если первая контрольная точка цвета имеет только цвет и не имеет длины остановки цвета, значение по умолчанию равно 0. Если последняя контрольная точка цвета имеет только цвет и не имеет длины остановки цвета, значение по умолчанию равно 100%.Если ни один из них не объявлен, линия градиента составляет 100%, что означает, что линейный и конический градиенты не будут повторяться, а радиальный градиент будет повторяться только в том случае, если радиус градиента меньше, чем длина между центром градиента и самым дальним углом. Если объявлена ​​первая граница цвета и значение больше 0, градиент будет повторяться, так как размер линии или дуги - это разница между первой и последней границей цвета меньше 100% или 360 градусов.

Повторяющиеся линейные градиенты

В этом примере используется repeat-linear-gradient () для создания градиента, который многократно повторяется по прямой линии.Цвета снова чередуются по мере повторения градиента. В этом случае линия градиента имеет длину 10 пикселей.

  . repeating-linear {
  фон: повторяющийся линейный градиент (-45 градусов, красный, красный 5 пикселей, синий 5 пикселей, синий 10 пикселей);
}
  

Несколько повторяющихся линейных градиентов

Подобно обычным линейным и радиальным градиентам, вы можете добавить несколько градиентов, один поверх другого. Это имеет смысл только в том случае, если градиенты частично прозрачны, что позволяет последующим градиентам отображаться через прозрачные области, или если вы включаете разные размеры фона, необязательно с разными значениями свойства background-position, для каждого изображения градиента.Мы используем прозрачность.

В этом случае линии градиента имеют длину 300 пикселей, 230 пикселей и 300 пикселей.

  .multi-Repeating-linear {
  фон:
      повторяющийся линейный градиент (190deg, rgba (255, 0, 0, 0,5) 40 пикселей,
        rgba (255, 153, 0, 0,5) 80 пикселей, rgba (255, 255, 0, 0,5) 120 пикселей,
        rgba (0, 255, 0, 0,5) 160 пикселей, rgba (0, 0, 255, 0,5) 200 пикселей,
        rgba (75, 0, 130, 0,5) 240 пикселей, rgba (238, 130, 238, 0,5) 280 пикселей,
        rgba (255, 0, 0, 0.5) 300 пикселей),
      повторяющийся линейный градиент (-190deg, rgba (255, 0, 0, 0.5) 30 пикселей,
        rgba (255, 153, 0, 0,5) 60 пикселей, rgba (255, 255, 0, 0,5) 90 пикселей,
        rgba (0, 255, 0, 0,5) 120 пикселей, rgba (0, 0, 255, 0,5) 150 пикселей,
        rgba (75, 0, 130, 0,5) 180 пикселей, rgba (238, 130, 238, 0,5) 210 пикселей,
        rgba (255, 0, 0, 0.5) 230 пикселей),
      повторяющийся линейный градиент (23 градуса, красный 50 пикселей, оранжевый 100 пикселей,
        желтый 150 пикселей, зеленый 200 пикселей, синий 250 пикселей,
        индиго 300 пикселей, фиолетовый 350 пикселей, красный 370 пикселей);
}
  

Плед градиент

Для создания пледа мы добавляем несколько перекрывающихся градиентов с прозрачностью.В первом объявлении фона мы перечислили каждую цветовую точку отдельно. Второе объявление свойства фона с использованием синтаксиса многопозиционной остановки цвета:

  .plaid-gradient {
  фон:
      повторяющийся линейный градиент (90 градусов, прозрачный, прозрачный 50 пикселей,
        rgba (255, 127, 0, 0,25) 50 пикселей, rgba (255, 127, 0, 0,25) 56 пикселей,
        прозрачный 56px, прозрачный 63px,
        rgba (255, 127, 0, 0,25) 63 пикселя, rgba (255, 127, 0, 0,25) 69 пикселей,
        прозрачный 69px, прозрачный 116px,
        rgba (255, 206, 0, 0.25) 116 пикселей, rgba (255, 206, 0, 0,25) 166 пикселей),
      повторяющийся линейный градиент (0 градусов, прозрачный, прозрачный 50 пикселей,
        rgba (255, 127, 0, 0,25) 50 пикселей, rgba (255, 127, 0, 0,25) 56 пикселей,
        прозрачный 56px, прозрачный 63px,
        rgba (255, 127, 0, 0,25) 63 пикселя, rgba (255, 127, 0, 0,25) 69 пикселей,
        прозрачный 69px, прозрачный 116px,
        rgba (255, 206, 0, 0,25) 116 пикселей, rgba (255, 206, 0, 0,25) 166 пикселей),
      повторяющийся линейный градиент (-45 градусов, прозрачный, прозрачный 5 пикселей,
        rgba (143, 77, 63, 0.25) 5px, rgba (143, 77, 63, 0,25) 10px),
      повторяющийся линейный градиент (45 градусов, прозрачный, прозрачный 5 пикселей,
        rgba (143, 77, 63, 0,25) 5 пикселей, rgba (143, 77, 63, 0,25) 10 пикселей);

  фон:
      повторяющийся линейный градиент (90 градусов, прозрачный 0 50 пикселей,
        rgba (255, 127, 0, 0,25) 50 пикселей 56 пикселей,
        прозрачный 56px 63px,
        rgba (255, 127, 0, 0,25) 63 пикс. 69 пикс.,
        прозрачный 69px 116px,
        rgba (255, 206, 0, 0,25) 116 пикселей 166 пикселей),
      повторяющийся линейный градиент (0 градусов, прозрачный 0 50 пикселей,
        rgba (255, 127, 0, 0.25) 50px 56px,
        прозрачный 56px 63px,
        rgba (255, 127, 0, 0,25) 63 пикс. 69 пикс.,
        прозрачный 69px 116px,
        rgba (255, 206, 0, 0,25) 116 пикселей 166 пикселей),
      повторяющийся линейный градиент (-45 градусов, прозрачный 0 5 пикселей,
        rgba (143, 77, 63, 0,25) 5 пикселей 10 пикселей),
      повторяющийся линейный градиент (45 градусов, прозрачный 0 5 пикселей,
        rgba (143, 77, 63, 0,25) 5 пикселей 10 пикселей);
}
  

Повторяющиеся радиальные градиенты

В этом примере используется repeat-radial-gradient () для создания градиента, который многократно излучается из центральной точки. Цвета меняются снова и снова по мере повторения градиента.

 . Повторяюще-радиальный {
  фон: повторяющийся радиальный градиент (черный, черный 5 пикселей, белый 5 пикселей, белый 10 пикселей);
}
  

Многократные повторяющиеся радиальные градиенты

 . Многоцелевые {
  фон:
      повторяющийся радиальный градиент (эллипс на 80% 50%, rgba (0,0,0,0,5),
        rgba (0,0,0,0.5) 15 пикселей, rgba (255,255,255,0,5) 15 пикселей,
        rgba (255,255,255,0,5) 30px) слева вверху без повтора,
      повторяющийся радиальный градиент (эллипс при 20% 50%, rgba (0,0,0,0.5),
        rgba (0,0,0,0.5) 10 пикселей, rgba (255,255,255,0,5) 10 пикселей,
        rgba (255,255,255,0.5) 20px) верхний левый без повтора желтый;
  размер фона: 200 пикселей 200 пикселей, 150 пикселей 150 пикселей;
}
  

Раскрашивание изображений с помощью градиентов в Photoshop

Как раскрасить изображение с помощью градиента

Шаг 1. Создайте собственную черно-белую версию изображения

Прежде чем мы начнем раскрашивать изображение градиентом, давайте сначала удалим существующие цвета и создадим собственную черно-белую версию.Это поможет нам в конце уточнить результаты. Если вы используете Photoshop CS3 или более поздней версии (я использую CS4 в этом уроке), самый простой способ создать великолепно выглядящую черно-белую версию - это использовать корректирующий слой Black & White , что я и добавлю через мгновение. Если вы используете Photoshop CS2 или более раннюю версию, используйте либо корректирующий слой Channel Mixer , либо Hue / Saturation , чтобы создать свою черно-белую версию. Вы найдете полную информацию об этих и других способах преобразования цветных изображений в черно-белые в нашем разделе Редактирование фотографий .

Если мы посмотрим на нашу палитру слоев, мы увидим, что в настоящее время у нас есть только один слой, фоновый слой, который является слоем, содержащим наше изображение. Чтобы добавить корректирующий слой Black & White, щелкните значок New Adjustment Layer в нижней части палитры слоев и выберите Black & White из появившегося списка корректирующих слоев:

Щелкните значок «Новый корректирующий слой» и выберите из списка «Черно-белый» (Photoshop CS3 и выше).

Как только вы выберете корректирующий слой «Черно-белый», вы увидите, что ваше изображение в окне документа внезапно становится черно-белым, в соответствии с настройками по умолчанию для настройки. В Photoshop CS3 элементы управления для корректирующего слоя «Черно-белый» откроются в диалоговом окне на экране. В CS4 они появятся внутри Панели настроек, которая появилась впервые в CS4. В любом случае, это работает одинаково. Просто перетащите любой из ползунков цвета (красный, желтый, зеленый, голубой, синий и пурпурный) влево или вправо, чтобы осветлить или затемнить области изображения, которые изначально содержали этот конкретный цвет.Перетаскивание ползунка влево затемнит области этого цвета, а перетаскивание вправо сделает их светлее.

Например, оттенок кожи всегда содержит много красного, поэтому, чтобы осветлить чью-то кожу в черно-белой версии изображения, просто перетащите ползунок «Красные» вправо. Деревья и другие растения обычно содержат много желтого (даже если они кажутся нам зелеными), поэтому, чтобы сделать их ярче или темнее, просто перетащите ползунок «Желтые». Всегда следите за своим изображением в окне документа, перетаскивая ползунки, чтобы оценить результат:

Перетащите ползунки цвета влево или вправо, чтобы затемнить или осветлить различные области черно-белой версии.

Когда вы будете довольны результатами, нажмите OK, чтобы выйти из диалогового окна, если вы используете Photoshop CS3. В CS4 панель настроек может оставаться открытой. Вот мое изображение после его преобразования в черно-белое:

Создана индивидуальная черно-белая версия.

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

При использовании корректирующих слоев исходное изображение остается невредимым.

Шаг 2. Добавьте корректирующий слой карты градиента

Теперь, когда у нас есть черно-белая версия, мы можем раскрасить изображение градиентом. Для этого мы воспользуемся еще одним корректирующим слоем, на этот раз Gradient Map. Снова щелкните значок New Adjustment Layer в нижней части палитры слоев и выберите Gradient Map из списка:

Снова щелкните значок «Новый корректирующий слой» и на этот раз выберите «Карта градиента».

Как и в случае с предыдущим корректирующим слоем, если вы используете Photoshop CS3 (или более раннюю версию), элементы управления для карты градиента откроются в диалоговом окне на вашем экране. В CS4 они появляются на Панели настроек.

Шаг 3. Создайте собственный градиент

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

Область предварительного просмотра показывает нам текущие цвета градиента.

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

Область Presets в верхней части редактора градиентов содержит набор готовых градиентов.

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

Давайте изменим черный цвет слева от градиента на что-нибудь другое.Щелкните по черному ограничителю цвета, чтобы выбрать его, затем щелкните по образцу цвета:

Щелкните по черному ограничителю цвета, чтобы выбрать его, затем щелкните по образцу цвета, чтобы изменить его цвет.

Откроется палитра цветов Photoshop . Для достижения наилучших результатов вы обычно хотите создавать градиенты, которые переходят от более темных цветов к более светлым, поэтому я выберу темно-фиолетовый из Палитры цветов, который заменит черный в градиенте:

Замена черного в градиенте на темно-фиолетовый.

Нажмите «ОК», когда закончите, чтобы выйти из палитры цветов. Если мы посмотрим на мое изображение в окне документа, то увидим, что при замене черного в градиенте на фиолетовый, все темные области на фотографии теперь выглядят фиолетовыми, а не черными:

Темные области на изображении теперь выглядят пурпурными.

Давайте сделаем то же самое с белой полосой ниже правого края области предварительного просмотра градиента. Щелкните цветовой ограничитель, чтобы выбрать его, затем щелкните образец цвета, чтобы изменить его цвет:

Изменение белого цвета в крайнем правом углу градиента.

Когда появится палитра цветов, я выберу ярко-желтый вместо белого:

Замена белого цвета в градиенте на ярко-желтый.

Щелкните OK, чтобы выйти из палитры цветов, и мы увидим, что области изображения, которые изначально были белыми (или светлым оттенком серого), теперь становятся желтыми:

Темные области по-прежнему остаются фиолетовыми, а теперь светлые области становятся желтыми.

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

Щелкните в любом месте внизу градиента, чтобы добавить еще одну цветовую точку.

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

Выбор среднего оранжевого цвета вместо среднего серого в градиенте.

Я нажму OK, чтобы снова выйти из палитры цветов, и мы увидим в окне документа, что средние тона в моем изображении теперь становятся оранжевыми. Более темные области по-прежнему фиолетовые, а более светлые - желтые благодаря трехцветному градиенту, который я создал для раскрашивания изображения:

Более темные области имеют фиолетовый цвет, более светлые области - желтый, а средние тона - оранжевый благодаря пользовательскому трехцветному градиенту.

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

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

Когда вы закончите создание и редактирование градиента, нажмите «ОК», чтобы выйти из редактора градиентов, затем нажмите «ОК», чтобы выйти из диалогового окна «Карта градиента» (Photoshop CS3 и более ранние версии).

Шаг 4. Измените режим наложения или уменьшите непрозрачность

Если вы обнаружите, что начальный эффект окраски слишком интенсивен (как у меня), есть несколько простых способов придать ему более тонкий вид.Один из них - изменить режим наложения корректирующего слоя «Карта градиента». Я собираюсь изменить свой режим наложения с Нормального (режим наложения по умолчанию) на Soft Light :

Измените режим наложения корректирующего слоя «Карта градиента» на «Мягкий свет».

Вы также можете попробовать режим наложения Overlay для получения более контрастного изображения. В моем случае Soft Light работает лучше и дает гораздо более приглушенный цветовой эффект:

Изменение режима наложения дает более тонкий эффект.

Другой способ уменьшить интенсивность эффекта - уменьшить непрозрачность корректирующего слоя «Карта градиента». Я верну свой режим наложения обратно на Нормальный, и на этот раз я уменьшу параметр Непрозрачность (прямо напротив параметра режима наложения) до 25%:

Уменьшите непрозрачность карты градиента, чтобы уменьшить ее интенсивность.

Уменьшая непрозрачность корректирующего слоя, мы получаем более мягкий вид с меньшим контрастом, чем то, что дал нам режим наложения Soft Light:

Уменьшение непрозрачности создает более мягкий эффект окраски.

% PDF-1.3 % 544 0 объект > эндобдж xref 544 70 0000000016 00000 н. 0000001751 00000 н. 0000001851 00000 н. 0000002315 00000 н. 0000002605 00000 н. 0000002951 00000 н. 0000002974 00000 н. 0000003246 00000 н. 0000004345 00000 п. 0000005613 00000 п. 0000005635 00000 п. 0000006712 00000 н. 0000006735 00000 н. 0000007885 00000 н. 0000007908 00000 н. 0000009010 00000 н. 0000009033 00000 н. 0000010145 00000 п. 0000010167 00000 п. 0000011199 00000 п. 0000011222 00000 п. 0000011503 00000 п. 0000012666 00000 п. 0000012689 00000 п. 0000012710 00000 п. 0000013922 00000 п. 0000013945 00000 п. 0000015395 00000 п. 0000015416 00000 п. 0000015728 00000 п. 0000015750 00000 п. 0000016272 00000 п. 0000016295 00000 п. 0000018032 00000 п. 0000018055 00000 п. 0000020310 00000 п. 0000020333 00000 п. 0000023950 00000 п. 0000023973 00000 п. 0000029057 00000 н. 0000029080 00000 п. 0000034314 00000 п. 0000034337 00000 п. 0000036342 00000 п. 0000036365 00000 п. 0000041404 00000 п. 0000041427 00000 н. 0000046566 00000 п. 0000046589 00000 п. 0000052400 00000 п. 0000052423 00000 п. 0000056901 00000 п. 0000056924 00000 п. 0000062245 00000 п. 0000062268 00000 п. 0000068157 00000 п. 0000068180 00000 п. 0000072839 00000 п. 0000072862 00000 п. 0000078326 00000 п. 0000078349 00000 п. 0000083465 00000 п. 0000083487 00000 п. 0000084185 00000 п. 0000084207 00000 п. 0000085022 00000 п. 0000085045 00000 п. 0000086495 00000 п. 0000001915 00000 н. 0000002293 00000 н. трейлер ] >> startxref 0 %% EOF 545 0 объект > эндобдж 546 0 объект > эндобдж 612 0 объект > транслировать Hb`Pa`f`c`h

Gradient Fill Image

Слой Gradient Fill Image представляет собой гибридную текстуру, поскольку это процедурно сгенерированный градиент, но он основан на динамически созданном растровом изображении .Как процедурно созданное изображение, его не нужно сохранять независимо от сцены, так как оно создается автоматически во время выполнения по мере необходимости. В качестве растрового изображения все различные способы применения слоя текстуры также могут быть назначены слою градиента, включая типы проекций и UV-карты, измененные в соответствующем ему локаторе текстуры . Существует несколько типов градиентных стилей , которые можно создать: линейный, радиальный, угловой и ромбовидный. Эти базовые стили определяют внешний вид плитки изображения, а Начало и Конец позиционируют его положение и ориентацию.Сам градиент определяется пользователем в редакторе градиентов .

Изображение Gradient Fill Image добавляется к Shader Tree с помощью параметра Add Layer , находящегося в разделе Add Layer > Image Map > image > Gradient Fill .После создания сам слой может быть расположен, а его эффект Effect определен в дереве шейдеров .

Примечание: Для получения информации о добавлении и работе со слоями элементов дерева шейдеров и обратитесь к теме Слои элементов дерева шейдеров.

Когда слой выбран, все его различные свойства доступны в области просмотра Свойства .

Следующие параметры Gradient Fill доступны для Gradient Fill Image :

Цвет - Позволяет быстро определять базовые градиенты прямо в главном интерфейсе. Значения градиента определяются ключами, как ключевые кадры на временной шкале.Клавиши градиента определяют определенные значения цвета в определенных местах, которые плавно затухают между клавишами. Ключи задаются в редакторе путем щелчка средней кнопкой мыши в окне градиента или, для пользователей Mac, Ctrl + Alt + щелчок.

Это устанавливает ключевое местоположение, затем вы можете щелкнуть по цветным полосам или колесу, а затем определить Color для этого местоположения. Таким же образом добавляются и обновляются новые ключевые позиции.Определенные ключи также можно редактировать, щелкая и перетаскивая точки вверх и вниз или влево и вправо. Под окном ключа градиента находится градуированная полоса, которая представляет сам градиент. Окно ограничено диапазоном 0% -100% по любой оси. Для дальнейшего уточнения может потребоваться отредактировать градиент в полноразмерном редакторе Gradient Editor , доступном в меню под маленькой стрелкой в ​​верхнем правом углу окна.

Alpha - работает точно так же, как и мини-редактор градиентов Color , но определяет одно значение, которое определяет степень прозрачности для градиента Color .

Размер изображения X / Y - Определяет вертикальное и горизонтальное разрешение результирующего холста, в котором создается градиент.

Начало / Конец X / Y - Определите положение и, косвенно, направление результирующего градиента, где начало , представляет начальную позицию, а конец представляет точку завершения.Затем между этими двумя точками создается градиент. Значения представлены в виде значения с плавающей запятой на сгенерированном холсте (в процентах), с исходной точкой '0, 0' в нижнем левом углу и позицией '1,1' в верхнем правом углу (идентично как определяется нормализованное значение УФ-поля). Значение «0,5» поместит позицию в центре холста, независимо от его разрешения и соотношения сторон.

Форма - управляет внешним видом результирующего градиента.Существует четыре возможных варианта (на фото ниже): Linear , Radial , Angular и Diamond соответственно.

Реверс - меняет местами позиции Начало и Конец , в результате получается зеркальный градиент.

Фоновое изображение - Tailwind CSS

Линейные градиенты

Чтобы придать элементу фон с линейным градиентом, используйте одну из утилит bg-gradient- {direction} в сочетании с утилитами остановки цвета градиента.

Адаптивный

Чтобы управлять фоновым изображением элемента в определенной точке останова, добавьте префикс {screen}: к любой существующей утилите фонового изображения. Например, используйте md: bg-gradient-to-r , чтобы применить утилиту bg-gradient-to-r только при средних размерах экрана и выше.

  

Для получения дополнительной информации о функциях адаптивного дизайна Tailwind ознакомьтесь с документацией по адаптивному дизайну.

Настройка

Фоновые изображения

По умолчанию Tailwind включает утилиты фоновых изображений для создания фонов с линейным градиентом в восьми направлениях.

Вы можете добавить свои собственные фоновые изображения, отредактировав раздел theme.backgroundImage в файле tailwind.config.js :

 
  module.exports = {
    тема: {
      продлевать: {
        backgroundImage: theme => ({
+ 'hero-pattern': "url ('/ img / hero-pattern.svg ') ",
+ 'footer-texture': "url ('/ img / footer-texture.png')",
        })
      }
    }
  }  

Это не просто градиенты - они могут быть любыми фоновыми изображениями, которые вам нужны.

Эти классы будут иметь вид bg- {key} , поэтому, например, hero-pattern превратится в bg-hero-pattern .

Варианты

По умолчанию для утилит фонового изображения создаются только адаптивные варианты.

Вы можете контролировать, какие варианты генерируются для утилит фонового изображения, изменив свойство backgroundImage в разделе вариантов вашего попутного ветра .config.js файл.

Например, эта конфигурация также будет генерировать варианты наведения и фокусировки:

 
  module.exports = {
    варианты: {
      продлевать: {
        
+ backgroundImage: ['hover', 'focus'],
      }
    }
  }  

Визуальная история интерпретации для распознавания изображений

Распознавание изображений (т. Е. Определение того, какой объект показан на изображении) является основной задачей компьютерного зрения, поскольку оно позволяет выполнять различные последующие приложения (автоматическая маркировка фотографий, помощь людям с ослабленным зрением и т. Д.) и стал стандартной задачей для тестирования алгоритмов машинного обучения (ML). Алгоритмы глубокого обучения (DL) за последнее десятилетие стали наиболее конкурентоспособными алгоритмами распознавания изображений; однако по умолчанию это алгоритмы «черного ящика»: трудно объяснить, почему они делают конкретный прогноз.

Почему это проблема? Пользователи моделей машинного обучения часто хотят иметь возможность интерпретировать, какие части изображения привели к предсказанию алгоритма по многим причинам:

  • Разработчики машинного обучения могут анализировать интерпретации моделей отладки , определять отклонения и прогнозировать, является ли модель вероятно, обобщит на новые изображения
  • Пользователи моделей машинного обучения могут больше доверять модели , если будут предоставлены объяснения того, почему был сделан конкретный прогноз. человеческие термины

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

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

Leave-One-Out

Прежде чем мы углубимся в исследование, давайте начнем с очень простого алгоритма, который работает для любого типа классификации изображений : без исключения (LOO).

LOO - это простой для понимания метод; это первый алгоритм, который вы могли бы придумать, если бы разработали метод интерпретации с нуля. Идея состоит в том, чтобы сначала сегментировать входное изображение на несколько более мелких подобластей. Затем вы запускаете серию прогнозов, каждый раз маскируя (то есть устанавливая нулевые значения пикселей) одной из подобластей. Каждой области присваивается оценка важности в зависимости от того, насколько ее «маскировка» повлияла на прогноз по сравнению с исходным изображением. Интуитивно эти оценки позволяют количественно определить, какие регионы наиболее ответственны за прогноз.

Итак, если мы сегментируем наше изображение на 9 подобластей в сетке 3x3, вот как будет выглядеть LOO:

Самые темные красные квадраты - это те, которые больше всего повлияли на результат, тогда как самые светлые оказали наименьшее влияние. В этом случае, когда верхняя центральная область была замаскирована, достоверность прогноза упала больше всего, с начальных 95% до 67%.

Если мы сегментируем лучше (например, используя суперпиксели вместо сетки), мы получим довольно разумную карту значимости, которая выделяет лицо, уши и хвост добермана.

LOO - простой, но мощный метод. В зависимости от разрешения изображения и способа сегментации он может давать очень точные и полезные результаты. Вот LOO, примененный к изображению золотистого ретривера размером 1100 × 825, как это было предсказано с помощью InceptionNet.

Одним из огромных преимуществ LOO на практике является то, что ему не нужен доступ к внутренним компонентам модели, и он может даже работать над другими задачами компьютерного зрения, помимо распознавания, что делает его гибким универсальным инструментом.

Так в чем же недостатки? Во-первых, это медленно.Каждый раз, когда область маскируется, мы выполняем вывод изображения. Чтобы получить карту заметности с разумным разрешением, размер вашей маски должен быть небольшим. Итак, если вы сегментируете изображение на 100 областей, для получения тепловой карты потребуется в 100 раз больше времени на вывод. С другой стороны, если у вас слишком много подобластей, маскирование любого из них не обязательно приведет к большой разнице в прогнозе. Второе ограничение этого LOO состоит в том, что он не принимает во внимание взаимозависимость между регионами.

Итак, давайте посмотрим на гораздо более быструю и немного более сложную технику: (ванильное) градиентное восхождение.

Ванильный градиентный подъем [2013]

(Ванильный) градиентный подъем был представлен в статье «Визуализация моделей классификации изображений и карт значимости» [2013]. Существует концептуальная взаимосвязь между LOO и градиентным подъемом. С помощью LOO мы рассмотрели, как изменяется результат, когда мы маскируем каждую область изображения, одну за другой. С помощью градиентного подъема мы вычисляем, как на результат влияет каждый отдельный пиксель одновременно.как нам это сделать? С модифицированной версией обратного распространения ошибки.

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

Примеры карт значимости от Симоняна и др., Рассчитанных с помощью одного прохода обратного распространения

Вот как это будет выглядеть для нашего изображения добермана:

Главное преимущество здесь - скорость; поскольку нам нужно сделать только один проход по сети, градиентное восхождение происходит намного быстрее, чем LOO, хотя полученная тепловая карта немного зернистая.

LOO (слева) по сравнению с Vanilla Gradient Ascent (справа) на изображении добермана. Здесь модель - InceptionNet.

Хотя градиентное восхождение работает, было обнаружено, что эта первоначальная формулировка, названная vanilla gradient ascent, имеет существенный недостаток: он распространяет отрицательные градиенты, которые в конечном итоге вызывают помехи и шумный выход. Для решения этих проблем был предложен новый метод, «управляемое обратное распространение ошибки».

Управляемое обратное распространение [2014]

Управляемое обратное распространение было опубликовано в «Стремлении к простоте: вся сверточная сеть» [2014], где авторы предложили добавить дополнительный управляющий сигнал от более высоких уровней к обычному шагу обратное распространение.По сути, метод блокирует обратный поток градиентов от нейронов всякий раз, когда выходной сигнал отрицательный, оставляя только те градиенты, которые приводят к увеличению выходного сигнала, что в конечном итоге приводит к менее шумной интерпретации.

На этом изображении мы показываем градиенты обратного распространения (слева) для данного слоя, выходные данные которого показаны справа. В верхнем слое мы показываем обычные градиенты. В нижнем слое мы показываем управляемое обратное распространение, которое обнуляет градиенты всякий раз, когда выходной сигнал отрицательный.(рисунок взят из Springenberg et al.)

Управляемое обратное распространение работает примерно так же быстро, как ванильное градиентное восхождение, поскольку требует только одного прохода по сети, но обычно дает более чистый результат, особенно по краям объекта. Этот метод особенно хорошо работает по сравнению с другими методами в нейронных архитектурах, в которых нет слоев максимального объединения.

Ванильный градиентный подъем (слева) по сравнению с управляемым обратным распространением (справа) на изображении добермана. Здесь модель - InceptionNet.

Однако было обнаружено, что все еще существует серьезная проблема с ванильным градиентным подъемом и управляемым обратным распространением: они не работают так хорошо, когда в изображении присутствуют два или более классов, что часто происходит с естественными изображениями.

Grad-CAM [2016]

Введите Grad-CAM или Gradient-Weighted Class Activation Mapping, представленное в Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization [2016]. Здесь авторы обнаружили, что качество интерпретаций улучшилось, когда градиенты были взяты на каждом фильтре последнего сверточного слоя, а не на уровне класса (но все же по отношению к входным пикселям).Чтобы получить интерпретацию для конкретного класса, Grad-CAM вычисляет средневзвешенное значение этих градиентов с весом, основанным на вкладе фильтра в оценку класса. Результат, как показано ниже, намного лучше, чем только направленное обратное распространение.

Исходное изображение, которое имеет два класса («Кошка» и «Собака»), проходит управляемое обратное распространение, но полученная тепловая карта выделяет оба класса. Как только Grad-CAM применяется в качестве фильтра, управляемая Grad-CAM создает тепловую карту высокого разрешения с учетом классов.(рисунок взят из Selvaraju et al.)

Авторы далее обобщили Grad-CAM для работы не только с целевым классом, но и с любой целевой «концепцией». Это означало, что Grad-CAM можно было использовать для интерпретации того, почему модель подписи к изображениям предсказала конкретную подпись, или даже для обработки моделей, которые принимают несколько входных данных, например, визуальную модель с ответами на вопросы. Благодаря такой гибкости Grad-CAM стал довольно популярным. Ниже представлен обзор его архитектуры. Обзор

Grad-CAM: сначала мы распространяем изображение вперед.Градиенты устанавливаются на ноль для всех классов, кроме желаемого класса (тигровый кот), для которого установлено значение 1. Этот сигнал затем распространяется обратно на выпрямленные сверточные карты признаков, представляющих интерес, которые мы объединяем для вычисления грубого Grad-CAM. локализация (синяя тепловая карта), которая показывает, куда должна смотреть модель, чтобы принять конкретное решение. Наконец, мы точечно умножаем тепловую карту с управляемым обратным распространением, чтобы получить управляемую визуализацию Grad-CAM, которая имеет как высокое разрешение, так и зависит от концепции.(рисунок и описание взяты из Сельвараджу и др. )

SmoothGrad [2017]

Тем не менее, вы могли заметить, что при использовании всех предыдущих методов результаты все еще не очень четкие. SmoothGrad, представленный в SmoothGrad: удаление шума путем добавления шума [2017]], является модификацией предыдущих методов. Идея довольно проста: авторы отметили, что если входное изображение сначала возмущено шумом, вы можете вычислить градиенты один раз для каждой версии возмущенного входа, а затем усреднить карты чувствительности вместе.Это приводит к гораздо более четкому результату, хотя и с более длительным временем выполнения.

Вот как Guided Back-Propagation выглядит рядом с SmoothGrad:

Standard Guided Back-Propagation (слева) против SmoothGrad (справа) на изображении добермана. Здесь модель - InceptionNet.

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

Интегрированные градиенты [2017]

В отличие от предыдущих статей, авторы Axiomatic Attribution for Deep Networks [2017] исходят из теоретической основы интерпретации. Они сосредоточены на двух аксиомах: чувствительности и инвариантности реализации, которым, по их мнению, должен удовлетворять хороший метод интерпретации.

Аксиома чувствительности означает, что если два изображения отличаются ровно одним пикселем (но все остальные пиксели у них являются общими) и дают разные прогнозы, алгоритм интерпретации должен давать ненулевую атрибуцию этому разному пикселю.Аксиома инвариантности реализации означает, что основная реализация алгоритма не должна влиять на результат метода интерпретации. Они используют эти принципы для разработки нового метода атрибуции, называемого интегрированными градиентами (IG).

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

Стандартное управляемое обратное распространение (слева) и интегрированные градиенты (справа) на изображении добермана, оба сглаженные с помощью SmoothGrad.Здесь модель - InceptionNet.

Хотя при этом обычно получаются более точные карты чувствительности, этот метод работает медленнее и вводит два новых дополнительных гиперпараметра: выбор базового изображения и количество шагов, по которым создаются интегрированные градиенты. Можем ли мы обойтись без этого?

Размытие интегрированных градиентов [2020]

Это то, к чему стремится наш окончательный метод интерпретации, размытие интегрированных градиентов. Представленный в Attribution in Scale and Space [2020], метод был предложен для решения конкретных проблем с интегрированными градиентами, включая устранение параметра «базовый уровень» и удаление некоторых визуальных артефактов, которые имеют тенденцию появляться в интерпретациях.

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

стандартных интегрированных градиентов (слева) vs. Размытие интегрированных градиентов (справа) на изображении добермана, оба сглаженных с помощью SmoothGrad. Здесь модель - InceptionNet.

Заключительные слова

2010-е были плодотворным десятилетием для методов интерпретации машинного обучения, и теперь существует богатый набор методов, объясняющих поведение нейронных сетей. Мы сравнили их в этом сообщении в блоге, и мы обязаны нескольким замечательным библиотекам, в частности Gradio для создания интерфейсов, которые вы видите в файлах GIF, и реализации TensorFlow PAIR-code в документах.Модель, используемая для всех интерфейсов, - это классификатор изображений Inception Net.

Полный код для воспроизведения этого сообщения в блоге можно найти в этом блокноте Jupyter и в Google Colab. Попробуйте живой интерфейс (с управляемым обратным распространением) здесь.

Автор Bio
Али - соучредитель Gradio, где он работает инженером по машинному обучению. До этого он работал в Tesla, iRobot и MIT. Он опубликовал несколько научных статей и участвовал во многих проектах с открытым исходным кодом.Вы можете найти его в твиттере @ si3luwa.

Благодарности
Спасибо Андрею Куренкову, Абубакар Абид и Джессике Дай за их огромную помощь в составлении этого произведения.

Цитирование
Для указания авторства в академических контекстах или книгах, пожалуйста, процитируйте эту работу как

Али Абдалла, «Визуальная история интерпретации для распознавания изображений», The Gradient, 2021.

BibTeX citation:

@article {abid2021visual,
author = {Abdalla, Ali},
title = {Визуальная история интерпретации для распознавания изображений},
journal = {The Gradient},
year = {2021},
howpublished = {\ url {https: // градиент.pub / a-visual-History-of-Interference-for-image-распознавание /}},
}

Если вам понравилась эта статья и вы хотите услышать больше, подпишитесь на Gradient и подпишитесь на нас в Twitter.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *