Filtrarea imaginilor de c # - programare în C, C # și Java

Va prezentam software-ul nostru sursă pentru bitmap-uri de filtrare ușor, schimbarea luminozitatea, contrastul, balansul de culoare al imaginii, precum și Sharpen și estompa imaginea. În plus, algoritmii vor fi descrise pentru grafice utilizate în program.

informații teoretice

Filtru „Luminozitate / Contrast“
Pentru a modifica luminozitatea în procente N, cu următoarea formulă:
I = I + N • 128/100 (1)
unde I -, respectiv, canalele R, G, B ale fiecărui punct de imagine.
Contrast reducerea N la suta:
I = (I • (100 - N) + 128 • N) / 100 (2)
Contrast accesoriu în procente N:
I = (I • 100-128 • N) / (100 - N) (3)
Dacă un nou nu se încadrează în intervalul 0..255 - ar trebui să fie tăiate din nou.

Filter "Color Balance"
Pentru a schimba echilibrul de culoare în funcție de unul dintre canalele R, G, B la sută N trebuie să calculeze o nouă valoare canal de culoare cu formula:
I = I + N • 128/100 unde I - este R, G sau B din fiecare punct de imagine. (4)
Dacă un nou nu se încadrează în intervalul 0..255 - ar trebui să fie tăiate din nou.

Filtru „Sharpen“ si „Blur“
Aceste filtre sunt puse în aplicare pe baza nucleului convoluție. pixel primește o nouă valoare bazată pe grupul de elemente adiacente acest lucru. regiunea de joncțiune are o matrice pătrată a cărei dimensiune este egală cu dimensiunea nucleului convoluție selectat, iar centrul în elementul prelucrat.

Filtrarea imaginilor de c # - programare în C, C # și Java

nucleu convoluție este o matrice 3x3, 5x5, 7x7, etc. pe care este definită o funcție. Kernel-ul este numit fereastra convoluție, și având în vedere că o funcție - funcția de greutate sau de fereastră. Fiecare element al ferestrei corespunde unui număr numit factorul de greutate. Totalitatea tuturor factorilor de ponderare, și este o funcție de ponderare. Dimensiunile Odd ferestre sunt necesare pentru a identifica în mod unic elementul central.

De fapt, nucleul convoluție este un filtru care permite de a spori sau atenuarea componentelor de imagine. Filtrarea prin ferestre în mișcare pe imaginea filtrului. Funcția de ponderare în procesul de mutare rămâne neschimbat. La fiecare poziție de fereastră, există operația de convoluție - o combinație liniară de valori ale pixelilor:

Filtrarea imaginilor de c # - programare în C, C # și Java

La fiecare poziție a funcției fereastră de ponderare este multiplicată element de înțelept pixelii corespunzători ai imaginii originale și produsul însumate. Suma rezultată se numește răspunsul filtrului și este atribuit pixelul de noua imagine, care corespunde poziției centrului ferestrei.

Rezultatul procesării pixel este scris în matricea de timp corespunzătoare celulei de aceeași dimensiune ca imaginea originală. O intrare într-o matrice temporară separată este necesară pentru a elimina influența asupra pixelilor deja procesate nu au fost încă prelucrate.

Asigurați-vă că pentru a menționa condițiile limită. De exemplu, pixelul din stânga sus nu există „vecini“ stânga și de mai sus, prin urmare, nu avem nimic de a multiplica coeficienții matricei.

Filtrarea imaginilor de c # - programare în C, C # și Java

Pentru a rezolva această problemă necesită crearea unei imagini intermediare. Ideea este de a crea o imagine temporară cu dimensiuni (lățime + 2 • gap / 2, înălțime + 2 • gap / 2, unde lățimea și înălțimea - lățimea și înălțimea imaginii filtrate și diferența - dimensiunea matricei convoluție). În centrul imaginii de intrare a imaginii este copiat, iar pixelii de margine extreme sunt pline de imagine. Blur este aplicat în clipboard și apoi este îndepărtat din rezultat.

Filtrarea imaginilor de c # - programare în C, C # și Java

Atunci când se utilizează un algoritm de ascuțire scoate în evidență diferențele dintre culorile pixelilor adiacenți sunt alocate și de detaliu imperceptibil. Nucleul central al coeficientului de câmp mai mare de 1 și este înconjurat de numere negative, suma care este unul mai mic decât coeficientul central. Astfel, orice curent crește contrastul dintre culoarea pixelilor și culorile vecinilor săi. La procesarea fiecărui pixel în câmpul de imagine este utilizat dimensiunea miezului 3 × 3:

Când se utilizează algoritmul neclarității imaginii redistribuită culoarea și înmoaie marginile dure. netezirea miezul constă dintr-un set de factori, dintre care fiecare este mai mică de 1, iar suma lor este 1. Acest lucru înseamnă că, după filtrare, fiecare pixel va absorbi ceva din culorile vecine, dar luminozitatea totală a imaginii rămâne neschimbată. La procesarea imaginii folosind următorul kernel convoluție:

Filtrarea imaginilor de c # - programare în C, C # și Java

Descrierea algoritmilor

Modificarea luminozității
Funcția de reglare a intensității luminoase este trecută valoarea curentă de culoare pixeli, poziția curentă a cursorului (POZ) reglați luminozitatea și valoarea maximă pe care îl poate primi (lungime).

1) Se calculează numărul procente N = (100 / lungime) * POZ.
2) Conform formulei (1), o nouă valoare este calculată pentru fiecare canal de culoare.
3) Controlul variabilelor de preaplin:
DACĂ <0, ТО I = 0,
DACĂ> 255, atunci I = 255,
unde I -, respectiv, R, G, B pixel.
4) returnează valoarea culorii pixelilor.

În contrast cu funcția de schimbare este trecut valoarea curentă de culoare pixeli, poziția curentă a cursorului (POZ) modifică contrastul și valoarea maximă pe care îl poate primi (lungime).
1) Se calculează numărul procente N = (100 / lungime) * POZ.
2) IF N <0, то новое значение цвета каждого канала рассчитывается (N берется по модулю) по формуле (2)
ELSE formula (3).
3) Controlul variabilelor de preaplin:
DACĂ <0, ТО I = 0,
DACĂ> 255, atunci I = 255,
unde I -, respectiv, R, G, B pixel.
4) returnează valoarea culorii pixelilor.

Modificarea echilibrului de culoare

Funcția de schimbare a echilibrului de culoare este transmis pe canalul corespunzător valorii curente de culoare pixeli, poziția curentă a cursorului (POZ) modifică echilibrul de culoare și valoarea maximă pe care îl poate primi (lungime).
1) Se calculează numărul procente N = (100 / lungime) * POZ.
2) Conform formulei (4), noua valoare calculată pentru canalul de culoare corespunzătoare.
3) Controlul variabilelor de preaplin:
DACĂ <0, ТО I = 0,
DACĂ> 255, atunci I = 255,
unde I - corespunzătoare (R, G sau B) canal de culoare pixeli.
4) returnează valoarea culorii pixelilor.

Ascuți și Blur

Acesta acționează pe lățimea și înălțimea imaginii editate, pixelii matricei imaginii, dimensiunea matricei convoluție și matricea în sine.
1) Crearea unei matrice temporară a imaginii extinse și umplerea acesteia.
2) Aplicarea nucleului convoluție pentru fiecare pixel, în care variabilele de control de preaplin (0 ... 255 pentru fiecare canal). Noile valori de culoare ale pixelilor sunt introduse într-o matrice separată (newpixel)
3) matrice funcția de retur newpixel.

Descriere Conform structurii

Pentru construirea interfeței cu utilizatorul utilizat Acceleratelor-lic subsistemului Windows Forms. În timp ce programul este utilizat Form1, Form2, Form3, BrightnessContrast, ColorBalance, filtru, care includ următoarele metode:
Luminozitate - o metodă care se schimbă luminozitatea punctului curent.
Contrast - o metodă care se schimbă contrastul punctului curent.
ColorBalance_R - o metodă care se schimbă punctul de echilibru de culoare al canalului R.
ColorBalance_G - o metodă care se schimbă punctul de echilibru de culoare al canalului G.
ColorBalance_B - o metodă care își schimbă echilibrul de culoare în ceea ce privește canalul B.
matrix_filtration - metoda care realizează filtrarea bazată pe nucleul imaginii convoluție.

Descrierea structurii interfeței cu utilizatorul

Filtrarea imaginilor de c # - programare în C, C # și Java
Filtrarea imaginilor de c # - programare în C, C # și Java

Figura de mai sus arată meniul principal. În tab-ul „File“ conține butoane pentru deschiderea și salvarea imaginilor. În fila „Filtre“ unelte prezentate pentru filtrarea imaginii încărcate: „Luminozitate / Contrast“, „Color Balance“, „Sharpen“, „Blur“. Când apelați primele două ferestre pop-up, care sunt cursoarele pentru a schimba componentele relevante ale imaginii filtrate și butonul „Aplicare“ pentru a salva modificările:

Filtrarea imaginilor de c # - programare în C, C # și Java

Filtrarea imaginilor de c # - programare în C, C # și Java

Demonstrarea programului de lucru

Filtrarea imaginilor de c # - programare în C, C # și Java

Filtrarea imaginilor de c # - programare în C, C # și Java

Filtrarea imaginilor de c # - programare în C, C # și Java

Modificarea echilibrului de culoare

Filtrarea imaginilor de c # - programare în C, C # și Java

Filtrarea imaginilor de c # - programare în C, C # și Java

Filtrarea imaginilor de c # - programare în C, C # și Java