Фильтры для изображений

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

Описание алгоритма

Истинная ценность компьютерной обработки изображений зависит от того, что можно сделать с изображением, как только оно оказалось в компьютере. Существует великое множество полезных манипуляций с фотографиями, введенными цифровым способом. Снимок сделан с передержкой? Нет проблем; выдержку можно сократить, уменьшив цветовые значения пикселов. При необходимости, красную, зеленую и синюю компоненты можно изменять раздельно, чтобы получить наилучший цветовой баланс. А если изображение снято не в фокусе? В расплывчатых изображениях можно увеличить резкость, и, наоборот, четкие, контрастные изображения можно размыть, имитируя эффект смягчающих фотофильтров. Если в вашем распоряжении хорошее программное обеспечение для обработки изображений, нет почти никаких пределов для чудес, которые вы можете творить. С алгоритмической точки зрения, получение этих эффектов не представляет особого труда. Секрет каждого из них заключен в крошечной матрице чисел, которую называют ядром свертки. Матрица размером 3-на-3 содержит три строки по три числа в каждой. Чтобы преобразовать один пиксел в изображении, вы умножаете значение его цвета на число в центре ядра. Затем вы умножаете восемь значений цветов пикселов, окружающих центральный пиксел, на соответствующие им коэффициенты ядра, суммируете все девять значений, и получаете в результате новое значение цвета центрального пиксела. Этот процесс повторяется для каждого пиксела в изображении, тем самым изображение, как принято говорить, фильтруется. Коэффициенты ядра определяют результат процесса фильтрации. Ядро размывания, например, состоит из совокупности коэффициентов, каждый из которых меньше 1, а их сумма составляет 1. Это означает, что каждый пиксел поглотит что-то из цветов соседей, но полная яркость изображения останется неизменной. (Если сумма коэффициентов больше чем 1, яркость увеличится; если меньше чем 1, яркость уменьшится.) В ядре резкости центральный коэффициент больше 1, а окружен он отрицательными числами, сумма которых на единицу меньше центрального коэффициента. Таким образом увеличивается любой существующий контраст между цветом пиксела и цветами его соседей. Это звучит немного мистически, но цифровое изображение, в конце концов, всего лишь связка чисел. Изменяя эти числа правильным способом, можно прийти к удивительными, возможно, очень полезным спецэффектам.

Итак: в начале создаем матpица 3×3:

|a b c|
|d e f|
|g h k|

Затем делаем цикл по изображению: допустим координата текущей точки P(i,j), то в эту координату записываем такое значение:

P(i,j) = (a*P(i-1,j-1)+b*P(i,j-1)+c*P(i+1,j-1)+
+ d*P(i-1,j) + e*P(i,j) + f*P(i+1,j) + g*P(i-1,j+1)+h*P(i,j+1)+k*P(i+1,j+1) ) / (a+b+c+d+e+f+g+h+k);

Рассмотрим работу некоторых фильтров приведенных в программе более подробно.

Размывание и увеличение резкости.

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

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

Как работают размывание и увеличение резкости.

  1. При подготовке к размыванию цифровое изображение считывается в память компьютера в виде красной, зеленой и синей компонент цвета каждого пиксела.
  2. Ядро размывания размером 3х3 применяется к красной, зеленой и синей компонентам цвета каждого пиксела в изображении. Значение цвета пиксела, который находится внизу под центром ядра, вычисляется умножением весовых коэффициентов ядра на соответствующие значения цвета в изображении и суммированием результатов.
  3. Итоговое изображение получилось размытым по сравнению с оригиналом потому, что цвет каждого пиксела распространился среди соседей. Степень размывания можно увеличить либо используя ядро большего размера, чтобы распределить цвета среди большего числа соседей, либо, подбирая коэффициенты ядра и уменьшая влияние центрального коэффициента, либо фильтруя изображение еще раз с ядром размывания.

Тиснение.

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

Как работает тиснение.

  1. Тиснение делается почти также как размывание и увеличение резкости. Процесс начинается с обычным цветным изображением.
  2. Каждый пиксел в изображении обрабатывается ядром тиснения размером 3х3. В отличие от ядер размывания и резкости, в которых сумма коэффициентов равна 1, сумма весов в ядре тиснения равна 0. Это означает, что «фоновым» пикселам (пикселам, которые не находятся на границах перехода от одного цвета к другому) присваиваются нулевые значения, а нефоновым пикселам — значения, отличные от нуля.
  3. После того, как значение пиксела обработано ядром тиснения, к нему прибавляется 128. Таким образом значением фоновых пикселов станет средний серый цвет (красный = 128, зеленый = 128, синий = 128). Суммы, превышающие 255, можно округлить до 255 или взять остаток по модулю 255, чтобы значение оказалось между 0 и 255.
  4. В тисненом варианте изображения, контуры кажутся выдавленными над поверхностью. Направление подсветки изображения можно изменять, меняя позиции 1 и -1 в ядре. Если, например, поменять местами значения 1 и -1, то реверсируется направление подсветки.

Акварелизация.

Акварельный эффект превращает фотографическое изображение в картинку, как будто бы написанную акварелью.

  1. Акварельный фильтр преобразует изображение, и после обработки оно выглядит так, как будто написано акварелью. Выше — цифровое изображение, просканированное с фотографии.
  2. Первый шаг в применении акварельного фильтра — сглаживание цветов в изображении. Одним из способов сглаживания является процесс медианнного осреднения цвета в каждой точке. Значение цвета каждого пиксела и его 24 соседей помещаются в список и сортируются от меньшего к большему. Медианное (тринадцатое) значение цвета в списке присваивается центральному пикселу.
  3. После сглаживания цветов, компьютер обрабатывают каждый пиксел в изображении ядром резкости, чтобы выделить границы переходов цветов.
  4. Результирующее изображение напоминает акварельную живопись. Это лишь один пример, который показывает, как можно объединять различные методы обработки изображений и добиваться необычных визуальных эффектов.

Сглаживание, замутнение, оконтуривание.

В начале создается матpица 3×3:

 |a b c| |d e f| |g h k|

Затем делаем цикл по изобpажению: допустим кооpдината текущей точки P(i,j), то в эту кооpдинату записываем такое значание:

P(i,j) = ( a*P(i-1,j-1)+b*P(i,j-1)+c*P(i+1,j-1)+ + d*P(i-1,j) + e*P(i,j) + f*P(i+1,j) + + g*P(i-1,j+1)+h*P(i,j+1)+k*P(i+1,j+1) ) / (a+b+c+d+e+f+g+h+k);

пpи a=b=c=d=e=f=g=h=k = 1 получается сглаживание.

пpи матpице:

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

получается оконтуpивание.

Инструкция пользователя

При запуске программы перед вами предстает общий вид меню (см.рисунок 1), где можно выбрать 3 пункта(3 прозрачных кнопки). В первом пункте Help(см. рисунок 2) –находится краткая постановка  задачи и информация об авторе, выход осуществляется по нажатию клавиши 1 прозрачная кнопка с замочком). С помощью пункта 2 (прозрачная кнопка 2) вы закройте данную программу. В пункте 3 (см. рисунок 3) — находится основное задание  программы. С помощью основного меню 1  можно загрузить изображение в bmp формате,  сохранить изображение, те же самые операции можно проделать с помощью панели инструментов 7, при загрузке изображения можно менять матрицу фильтра редактируя строки и столбцы данной матрицы 2, выбор фильтров таких как: сглаживание, резкость, тиснение, размывание, окунтирование можно осуществлять с помощью “вываливающейся”  строки  4, можно при  применении очередного фильтра каждый раз возвращать изображение к исходному, поставив галочку 3. При необходимости можно применять несколько фильтров друг на друга, как бы накладывая их друг на друга, при этом необходимо убрать галочку 3, на рисунке как раз показано изображение после накладки двух фильтров тиснения и резкости, причем несколько раз(см. пункт 6). Для большей привлекательности программы добавлен наглядный календарь на текущей месяц 7 и вывод даты.

Выводы

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