Филтриране на изображения на C # - програмиране в C, C # и Java

Представяме нашия софтуер източник за лесно филтриране на растерни изображения, промяна на яркостта, контраста, баланса на цветовете на изображението, както и се изострят и замъгляване на изображението. В допълнение, алгоритмите ще бъдат описани за графиките, използвани в програмата.

теоретична информация

Филтрува "Brightness / Contrast"
За промяна на яркостта в процента N, по следната формула:
I = I + N • 128/100 (1)
където I -, съответно, R, G, B канали за всяка точка на изображението.
Contrast намаляване на N процента:
I = (I • (100 - N) + 128 • N) / 100 (2)
Усилване на контраста в проценти N:
I = (I • 100-128 • N) / (100 - N) (3)
Ако това е нова аз не попадат в обхвата 0..255 - това трябва да се намали.

Филтър "Color Balance"
За промяна на цветовия баланс съгласно една от каналите R, G, B до N процента трябва да се изчисли нова стойност цвят канал с формулата:
I = I + N • 128/100, където - е R, G или Б от всяка точка на изображението. (4)
Ако това е нова аз не попадат в обхвата 0..255 - това трябва да се намали.

Филтрува "Sharpen" и "размазване"
Тези филтри са реализирани на базата на ядрото на навиване. пиксел получава нова стойност, основана на групата на елементи в непосредствена близост до това. възел регион има квадратна матрица, чийто размер е равен на размера на избраната намотка ядрото, и центъра на преработения елемент.

Филтриране на изображения на C # - програмиране в C, C # и Java

навиване на ядрото е матрица на 3x3, 5x5, 7x7 и т.н. на която е определена функция. Ядрото се нарича прозорец гънка на мозъка и го даде функция - функция на тегло или прозорец. Всеки елемент от прозореца съответства на брой, наречен фактор на тегло. Съвкупността от всички фактори за претегляне, и е функция за претегляне. Странни размерите на прозорците са необходими за уникална идентификация на централния елемент.

В действителност, ядрото на навиване е филтър, който позволява да се повиши или намаляват компоненти изображения. Филтриране чрез преместване на прозорци върху образа на филтъра. Функцията тегло в процеса на преместване на остава непроменена. При всяко положение прозорец, там е работата намотка - линейна комбинация от стойностите на пикселите:

Филтриране на изображения на C # - програмиране в C, C # и Java

При всяко положение на прозоречната функция за претегляне е елемент-мъдър, умножени по съответните пикселите на оригиналното изображение и обобщи продукт. Получената сума се нарича реакция филтър и се възлага на пиксел на новото изображение, което съответства на позицията на центъра на прозореца.

В резултат на обработката на пиксела е написано в съответния момент клетъчна матрица на същия размер като на оригиналното изображение. Един запис в отделна временна матрица е необходимо, за да се елиминира влиянието на вече обработените пикселите момента не са обработени.

Не забравяйте да говорим за гранични условия. Така например, в горния ляв пиксел не съществува "съседи" наляво и по-горе, по тази причина, ние няма от какво да се размножават коефициентите на матрицата.

Филтриране на изображения на C # - програмиране в C, C # и Java

За да се реши този проблем изисква създаването на междинен образ. Идеята е да се създаде временна картинка с размери (ширина + 2 • празнина / 2, височина + 2 • празнина / 2, където ширината и височината - ширината и височината на филтрирания изображението и разликата - измерение на матрицата на намотка). В центъра на въвеждане картина изображението се копира и крайните ръбове пикселите са запълнени изображение. Blur се прилага в клипборда, а след това се изважда от резултата.

Филтриране на изображения на C # - програмиране в C, C # и Java

При използване на заточване алгоритъм подчертава различията между цветовете на съседни пиксели, са разпределени и незабележимо подробности. Централният ядрото на поле коефициент по-голям от 1, и е заобиколен от отрицателни числа, сумата от която е една по-малко от централната коефициент. По този начин, всички текущи увеличава контраста между цвета на пиксел и цветовете на своите съседи. При обработката на всеки пиксел в областта на изображението се използва ядро ​​размер 3 х 3:

При използване на размазването на изображението алгоритъм преразпределя цвят и омекотяват твърди ръбове. изглаждане на ядрото се състои от набор от фактори, всеки от които е по-малко от 1, и сумата им е 1. Това означава, че след филтриране, всеки пиксел ще поеме нещо от съседните цветове, но общият яркостта на изображението остава непроменен. При обработката на изображението, като използвате следната намотка ядрото:

Филтриране на изображения на C # - програмиране в C, C # и Java

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

Промяна на осветеността
Функцията за затъмняване е преминал текущата стойност цвят пиксела, текущата позиция на плъзгача (поз) регулирате яркостта и максималната стойност, която може да приема (дължина).

1) се изчислява броят на процента N = (100 / дължина) * поз.
2) В съответствие с формула (1), нова стойност се изчислява за всеки цвят канал.
3) контрол на препълване променливи:
АКО мИ <0, ТО I = 0,
АКО I> 255, тогава = 255,
където I -, съответно, R, G, B пиксел.
4) връща стойността на цвета на пиксел.

В контраст промяна функция се предава текущия цвят на пикселите стойност, текущата позиция на плъзгача (поз) промени контраста и максималната стойност, която може да приема (дължина).
1) се изчислява броят на процента N = (100 / дължина) * поз.
2) Ако N <0, то новое значение цвета каждого канала рассчитывается (N берется по модулю) по формуле (2)
ДРУГ формула (3).
3) контрол на препълване променливи:
АКО мИ <0, ТО I = 0,
АКО I> 255, тогава = 255,
където I -, съответно, R, G, B пиксел.
4) връща стойността на цвета на пиксел.

Промяна на баланса на цветовете

Функцията за промяна на баланса на цветовете се предава на съответния канал на текущия цвят на пикселите стойност, текущата позиция на плъзгача (поз) променя баланса на цветовете и максималната стойност, която може да приема (дължина).
1) се изчислява броят на процента N = (100 / дължина) * поз.
2) В съответствие с формула (4), новата стойност, изчислена за съответния цвят канал.
3) контрол на препълване променливи:
АКО мИ <0, ТО I = 0,
АКО I> 255, тогава = 255,
където I - съответния (R, G или B) цвят пиксел канал.
4) връща стойността на цвета на пиксел.

Изостряне и Blur

Той действа на ширината и височината на редактираното изображение, пикселите на матрицата на изображението, размера на матрицата на намотка, и на самата матрица.
1) Създаване на временна матрица на удължения образ и пълнене.
2) Приложение на намотка ядрото за всеки пиксел, където променливите контролните преливник (0 ... 255 за всеки канал). новите стойности на цвета на пиксела се вписват в отделна матрица (newpixel)
3) функция връщане newpixel матрица.

Описание Според структурата

За изграждането на потребителски интерфейс, използван Accelerat-филни подсистемата Windows Forms. Докато програмата се използва за Form1, ФОРМА2, Form3, BrightnessContrast, ColorBalance, филтър, който включва следните методи:
Яркост - метод, който се променя яркостта на текущата точка.
Контраст - метод, който променя контраста на текущата точка.
ColorBalance_R - метод, който променя точката на цвят баланс на канала R.
ColorBalance_G - метод, който променя точката на цвят баланс на канала Г.
ColorBalance_B - метод, който променя цвета баланс по отношение на канал В.
matrix_filtration - метод, който изпълнява филтриране на базата на ядрото на изображението гънка на мозъка.

Описание на структурата на потребителския интерфейс

Филтриране на изображения на C # - програмиране в C, C # и Java
Филтриране на изображения на C # - програмиране в C, C # и Java

Фигурата по-горе показва главното меню. В "Файл" на раздел съдържа бутони за отваряне и съхраняване на изображения. В раздела "Филтри" представени инструменти за филтриране на заредения картинката: "Brightness / Contrast", "Color Balance", "Sharpen", "Блър". Когато се обадите на първите две изскачащи прозорци, които са плъзгачите да променят съответните компоненти на филтрира изображението и бутона "Прилагане", за да запазите промените:

Филтриране на изображения на C # - програмиране в C, C # и Java

Филтриране на изображения на C # - програмиране в C, C # и Java

Демонстрация на работната програма

Филтриране на изображения на C # - програмиране в C, C # и Java

Филтриране на изображения на C # - програмиране в C, C # и Java

Филтриране на изображения на C # - програмиране в C, C # и Java

Промяна на баланса на цветовете

Филтриране на изображения на C # - програмиране в C, C # и Java

Филтриране на изображения на C # - програмиране в C, C # и Java

Филтриране на изображения на C # - програмиране в C, C # и Java