Данный проект — это консольное приложение на C#, которое реализует алгоритм математической свёртки для обработки изображений. Программа переводит цветное изображение в градации серого и применяет к нему матричные фильтры.
Основная логика находится в классе ConvolutionProcessor.
Алгоритм представляет собой скольжение матрицы (ядра) по каждому пикселю исходного изображения. Новое значение пикселя вычисляется как сумма произведений соседних пикселей на соответствующие веса из матрицы ядра.
Ключевые особенности реализации:
- Любые размеры ядер: Алгоритм автоматически высчитывает отступы (offset), поэтому поддерживает ядра любых нечётных размеров (3x3, 5x5, 7x7 и т.д.).
- Готовые фильтры: В статическом классе
Kernelsзаранее подготовлены матрицы для:- Размытия (Box Blur)
- Увеличения резкости (Sharpen)
- Выделения контуров (Laplacian)
- Обработка краёв (Edge Strategies): При нахождении ядра на границе изображения применяются две стратегии на выбор:
Extend: дублирование крайнего пикселя (значения за границей приравниваются к ближайшему краю).ZeroPadding: выход за границы считается абсолютно чёрным цветом (значение 0).
В проекте реализовано два метода вычислений:
Convolve— классический последовательный проход (4 вложенных цикла).ConvolveParallel— версия с использованиемParallel.For.
Примечание к параллельной версии: Распараллелен только самый внешний цикл (по строкам изображения y). Внутренние циклы по ширине и по самому ядру оставлены обычными for.
Используемые NuGet-пакеты:
SixLabors.ImageSharp— для работы с графикой (загрузка, конвертация в массив и сохранение).xUnitиcoverlet.msbuild— для модульного тестирования кода.
- Склонируйте проект и перейдите в папку с кодом:
git clone https://github.com/Vit0GG/ImageConvolution.git
cd ImageConvolution/ImageConvolution
Восстановите все необходимые NuGet-пакеты (скачаются автоматически):
dotnet restore
Запустите программу:
dotnet run
Использование: При запуске программа попросит указать путь к исходному файлу (можно просто перетащить картинку в окно терминала). Программа замерит время работы последовательной и параллельной свёртки, выведет результат в консоль и сохранит обработанное изображение в ту же папку с суффиксом _filtered.