C08 · Меняем и измеряем
Линейные фильтры и свёртка
Как из девяти соседних чисел получить одно новое — от среднего к размытию и поиску границ.
Если нужны основы
Теория
Вес умножается на отсчёт
Начнём с маленькой фигуры: чёрная клетка хранит 0, белая — 1. Чтобы получить новое значение, берём квадрат 3 × 3 вокруг выбранной клетки, складываем девять чисел и делим на 9. Посередине можно проверить каждое слагаемое. Например, четыре белые клетки из девяти дадут 4/9 — серый результат.
Ядро — такая же маленькая таблица, только с весами. У среднего все веса равны 1, делитель равен 9. У гауссова приближения веса 1–2–1 / 2–4–2 / 1–2–1, делитель 16: близкие к центру клетки влияют сильнее. Выберите серые уровни, затем RGB. Цветной результат получается тем же расчётом отдельно для трёх каналов; переключатель канала показывает один из них.
Из каких слагаемых получается пиксель?
Нажмите клетку на любой картинке. Слева рамка охватит её соседей, посередине появятся их значения, веса и произведения, справа — результат. Сначала посчитайте среднее для чёрного и белого, затем перейдите к серому и цвету.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
Каждая точка кривой — значение пикселя на отмеченной горизонтали. Выберите другую строку на изображении: график последует за ней. Сравните ширину границы и сохранность деталей.
- Вход
- Выход
Среднее заменяет пиксель средним его соседей; гауссово ядро сильнее учитывает центр. Sobel измеряет перепад, поэтому отрицательный результат допустим. В цветной картинке одно правило независимо применяется к выбранному R, G или B.
Параметры и подробности
Корреляция использует веса как нарисованы; свёртка разворачивает их на 180°. Несимметричное ядро делает разницу видимой. Производная и повышение резкости сохраняют отрицательные значения: цветовое отображение не меняет массив. Веса ниже — уже после выбранного разворота, порядок по строкам.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Линейность и край массива
Sobel использует отрицательные и положительные веса: постоянные значения взаимно сокращаются, а перепад остаётся. Это измерение изменения, а не новая яркость. Поэтому отрицательные результаты сохраняются и показываются по отдельной шкале. Подробнее оба направления градиента и Canny разобраны в следующей теме о границах.
В дополнительных настройках корреляция применяет веса как нарисовано, а свёртка сначала разворачивает ядро на 180°. Для симметричного среднего разницы нет; несимметричное верхнее ядро позволяет её увидеть. Показанные в расчёте веса уже учитывают выбранное соглашение.
У фиксированного линейного оператора обработка суммы равна сумме обработок, а коэффициент масштаба проходит через вычисление. Обрезка, округление и меняющиеся по данным веса нарушают это свойство. Поэтому промежуточные отрицательные числа сохраняются.
Ноль, повтор и отражение — разные предположения о продолжении сцены. Наше отражение не повторяет крайнюю клетку. Периодическое продолжение связывает противоположные края; оно появится в Фурье. Сравнение без общего правила границ нечестно.
Тот же фильтр, меньше вычислений
Box-фильтр даёт равные веса, гауссов и биномиальный уменьшают дальние вклады. Сепарабельное ядро раскладывается в произведение двух векторов: строки, затем столбцы. Ниже прямой и разложенный пути считаются независимо и сравниваются.
Выберите клетку результата: слева автоматически откроется горизонтальный проход, а расчёт возьмёт из него три вертикальных соседа с весами 1, 2, 1 и разделит сумму на 4. Так промежуточная картинка перестаёт быть просто дополнительным изображением: именно её числа дают итог. При нескольких повторах показывается последний такой переход.
Интегральное изображение даёт сумму прямоугольника по четырём префиксным значениям. FFT бывает выгоден для больших ядер, но требует корректного дополнения и учёта круговой свёртки. На малом ядре прямой расчёт часто дешевле; изменение метода расчёта не должно менять смысл операции.
Два коротких прохода
Промежуточная картинка — горизонтальный проход, итог — ещё и вертикальный. Сравнение с прямым 3 × 3 рассчитывается реально.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
- Последний вертикальный проход
- Нормировать веса 1 + 2 + 1
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
Это ядро раскладывается в два вектора. Произвольное ядро может не раскладываться.
- Максимальная разница
- 0
Параметры и подробности
Ядро [1,2,1]ᵀ·[1,2,1]/16 раскладывается в горизонтальное и вертикальное. На один результат нужно 3+3 вклада вместо 9: меньше работы при той же границе и тех же числах. Для нескольких повторов промежуточная картинка относится к последнему; вертикальный проход по ней даёт показанный итог.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Практика
Проверь идею на другом условии. Следуй задаче над изображениями; разбор точки поможет объяснить результат. Эта практика не оценивается.
Предсказать разворот ядра
Найдите клетку на краю фигуры и вручную проверьте её новое значение. Сравните среднее с гауссовыми весами, затем Sobel. В дополнительной задаче выберите угол изображения и поменяйте правило за его границей.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
Каждая точка кривой — значение пикселя на отмеченной горизонтали. Выберите другую строку на изображении: график последует за ней. Сравните ширину границы и сохранность деталей.
- Вход
- Выход
Среднее заменяет пиксель средним его соседей; гауссово ядро сильнее учитывает центр. Sobel измеряет перепад, поэтому отрицательный результат допустим. В цветной картинке одно правило независимо применяется к выбранному R, G или B.
Параметры и подробности
Корреляция использует веса как нарисованы; свёртка разворачивает их на 180°. Несимметричное ядро делает разницу видимой. Производная и повышение резкости сохраняют отрицательные значения: цветовое отображение не меняет массив. Веса ниже — уже после выбранного разворота, порядок по строкам.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Свой эксперимент со свёртками
В отдельной лаборатории можно менять каждое число ядра, шаг, поля и связи каналов — на маленьком примере или своей фотографии.
Открыть лабораторию свёртокИгры
Предсказать разворот ядра
Выберите ядро по его действию на границы и тонкую линию.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Сравни результат с образцом.
Разобрать выбранную точку
Что показывает график
Каждая точка кривой — значение пикселя на отмеченной горизонтали. Выберите другую строку на изображении: график последует за ней. Сравните ширину границы и сохранность деталей.
- Вход
- Выход
Среднее заменяет пиксель средним его соседей; гауссово ядро сильнее учитывает центр. Sobel измеряет перепад, поэтому отрицательный результат допустим. В цветной картинке одно правило независимо применяется к выбранному R, G или B.
Параметры и подробности
Корреляция использует веса как нарисованы; свёртка разворачивает их на 180°. Несимметричное ядро делает разницу видимой. Производная и повышение резкости сохраняют отрицательные значения: цветовое отображение не меняет массив. Веса ниже — уже после выбранного разворота, порядок по строкам.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Проверь объяснение
Вопрос 1 из 5
Среднее 3 × 3 на белом изображении. Почему угол темнеет при нулевом продолжении?
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Синий − · белый 0 · красный +; шкала -1…1
Выбери один ответ. Он проверится сразу.
Ограничения и материалы
Границы этого примера
Живые 3 × 3 ядра и сепарабельный биномиальный фильтр. FFT и интегральные изображения объясняются как методы ускорения, но не выдаются за используемый расчёт.