Цифровая обработка сигналов

Image Processing: фильтрация

Медицинский CT-сканер делает снимок сечения тела за 0.3 секунды. Но сырые данные из детекторов - не изображение: это 1024 проекции под разными углами. Превратить их в читаемый срез мозга помогает алгоритм 1971 года - filtered backprojection, основанный на 2D FFT. Та же математика, что размывает фотографии в Instagram.

  • **Tesla Autopilot** применяет 2D свёртку для детекции разметки дорог в реальном времени на чипе FSD, обрабатывая 8 камер при 36 TOPS.
  • **Instagram-фильтры** - набор 2D ядер свёртки. Gaussian blur, sharpen, emboss - всё это convolution с разными 3x3 матрицами.
  • **Amazon Textract** (OCR сервис) использует морфологические операции для сегментации текстовых блоков перед распознаванием символов.

2D свёртка: универсальный инструмент обработки изображений

Каждый нейрон в свёрточной нейросети делает ровно одно действие: 2D свёртку. Но это действие придумали не для нейросетей - оно пришло из цифровой обработки изображений 1960-х. Двумерная свёртка - это скользящее умножение маленькой матрицы (ядра, kernel) на каждый участок изображения. Сменив ядро 3x3, можно размыть изображение, заострить края, обнаружить горизонтальные линии или эмбоссировать текстуру - всё одной операцией. Математически: (I * K)[i,j] = сумма по m,n: I[i+m, j+n] * K[m,n]. CNN в ImageNet применяет именно эту операцию миллиарды раз - с обучаемыми ядрами.

Padding: без дополнения нулями изображение уменьшается на (kernel_size-1) пикселей с каждой стороны. 'same' padding сохраняет размер. Stride > 1 уменьшает выходное изображение - именно так свёрточные нейросети делают down-sampling без отдельного pooling-слоя.

Изображение 512x512, ядро 5x5, padding=0, stride=1. Какой размер выходного изображения?

Детекция границ: Sobel, Canny и Laplacian

Граница на изображении - это место резкого изменения яркости, то есть максимум градиента. Оператор Sobel вычисляет первую производную (градиент) в направлениях X и Y двумя ядрами 3x3, комбинируя их в магнитуду и угол. Алгоритм Canny (1986) использует идею John F. Canny из Беркли и до сих пор считается одним из лучших: Gaussian blur для шумоподавления, Sobel для градиента, non-maximum suppression (оставить только локальный максимум вдоль направления градиента), hysteresis thresholding (два порога для удаления слабых граней). OpenCV cv2.Canny() реализует этот алгоритм и используется в автопилотах Tesla для разметки дорог.

Laplacian (вторая производная) обнаруживает края обоих направлений одним ядром, но очень чувствителен к шуму. LoG (Laplacian of Gaussian) - сначала размытие, затем лапласиан - даёт более стабильные результаты и используется в blob detection (SIFT, SURF).

Зачем алгоритм Canny применяет Gaussian blur до вычисления градиента?

Морфологические операции

Морфологические операции работают с бинарными и градации серого изображениями через структурирующий элемент (SE) - маленькую форму (диск, крест, прямоугольник). Erosion (эрозия) сжимает белые объекты, Dilation (расширение) увеличивает. Opening = Erosion + Dilation - убирает мелкий шум. Closing = Dilation + Erosion - закрывает дыры внутри объектов. Морфологические операции используются в OCR (очистка отсканированного текста), медицинской визуализации (выделение клеток на снимках МРТ), промышленном контроле качества (поиск дефектов на конвейере). OpenCV cv2.morphologyEx() реализует все варианты за O(W * H * ksize^2).

Gradient = Dilation - Erosion даёт контуры объектов - более грубый, но быстрый аналог Sobel для бинарных изображений. Top-hat = Image - Opening выделяет детали ярче фона (используется в микроскопии).

Операция Opening (эрозия + расширение) применяется к бинарному изображению с мелкими точками шума. Какой результат?

Фильтрация в частотной области

Свёртка во временной/пространственной области равносильна умножению в частотной - это теорема о свёртке. Это означает: вместо того чтобы применять большое ядро (например 101x101) через скользящее окно, можно сделать 2D FFT изображения, умножить на частотную маску, сделать обратное FFT - и получить тот же результат за O(N log N) вместо O(N * k^2). Низкочастотный фильтр (low-pass) - круговая маска в центре частотного домена - размывает изображение. Высокочастотный (high-pass) пропускает только края. Это используется в медицинской томографии: filtered backprojection в CT-сканерах применяет ramp-фильтр в частотной области для реконструкции изображения из проекций.

2D DFT: F[u,v] = сумма I[x,y] * exp(-2*pi*i*(ux/M + vy/N)). После FFT низкие частоты (глобальная структура) - в центре, высокие (детали, шум) - по краям. Сдвиг np.fft.fftshift() перемещает нулевую частоту в центр для удобства работы с масками.

Почему фильтрация через FFT быстрее прямой свёртки при большом ядре?

Ключевые идеи

  • **2D свёртка** - единая операция для размытия, заострения и детекции признаков. CNN - это обучаемые ядра свёртки, минимизирующие потери на задаче.
  • **Canny** комбинирует Gaussian blur, Sobel, non-maximum suppression и hysteresis - классический алгоритм, живущий в автопилотах и промышленных системах.
  • **Морфологические операции** (Opening, Closing) работают с формами объектов и незаменимы в OCR, медицинской сегментации, бинарной обработке.
  • **FFT-фильтрация** выгодна при больших ядрах: умножение в частотной области = свёртка в пространственной, но за O(N log N) вместо O(N * k^2).

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

Обработка изображений напрямую применяет частотный анализ из DSP:

  • Дискретное преобразование Фурье — 2D FFT изображения - прямое расширение 1D DFT на двумерный случай; теорема о свёртке работает в обоих измерениях
  • Цифровые фильтры — Low-pass, high-pass, band-pass маски в частотной области - визуальные аналоги FIR/IIR фильтров из обработки аудио

Вопросы для размышления

  • Свёрточные нейросети используют ядра 3x3, а не 7x7. Если 7x7 имеет большее рецептивное поле, почему промышленность предпочла маленькие ядра?
  • Можно ли применить морфологические операции к полноцветному изображению RGB без конвертации в grayscale? Что при этом изменится семантически?
  • В частотном домене периодический шум виден как отдельные точки. Какой инструмент - пространственная свёртка или FFT-маска - лучше подходит для его удаления и почему?

Связанные уроки

  • cv-01
Image Processing: фильтрация

0

1

Войти