Цифровая обработка сигналов
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-маска - лучше подходит для его удаления и почему?