Mihai își face periplul în prelucrarea imaginilor și începe să descopere modalități prin care acesta poate detecta contururile obiectelor din pozele analizate. Astfel, el a descoperit conceptul de aplicare a unui kernel asupra unei imagini.
Intro to kernels
Un kernel este o matrice pătratică de ordin impar care se poate aplica peste o matrice generală prin procedeul de convoluție. Convoluția este o operație matematică ce presupune, în acest caz, centrarea kernelului pe fiecare pixel din imagine (pe rând) și calcularea unei sume peste valorile pixelului central și a celor înconjurători, sumă care va înlocui pixelul în imaginea finală.
Spre exemplu, să presupunem că avem kernelul și matricea :
Elementele matricei , după aplicarea kernelului, vor avea valorile:
Ca o formulă generală, putem considera că aplicarea unui kernel produce pixelii conform formulei următoare (în care pixelii din membrul drept folosiți în calcule sunt exclusiv pixeli din vechea matrice, sau pentru acele poziții în care kernelul este aplicat pe un pixel marginal/colț și iese parțial din matrice):
Pentru matricea dată anterior, rezultatele sunt:
Cerință
Mihai a decis să realizeze un program care să îl ajute să înțeleagă aplicarea unui kernel specific pe o matrice oarecare, însă are o problemă. Mai exact, el nu obține rezultatele așteptate. Ajutați-l! Programul scris de Mihai îl puteți găsi aici sau în dreapta paginii sub „Atașamente”.
Date de intrare
Pe prima linie se află numărul de linii, respectiv coloane ale matricei, precum și o valoare maximă () pe care niciun element din matricea rezultat nu o poate depăși.
Pe următoarele linii se află matricea.
Date de ieșire
Se vor afișa datele primite la intrare (numărul de linii/coloane și valoarea maximă), precum și noile valori ale elementelor din matrice.
Restricții și precizări
- Elementele din rezultat trebuie să se încadreze în intervalul . Dacă se depășește, valoarea se aduce la capătul cel mai apropiat.
- Numărul de linii sau de coloane ale matricei nu va depăși .
Exemplul 1
stdin
2 2 100
1 2
3 4
stdout
2 2 100
0 5
10 15
Exemplul 2
stdin
2 2 10
8 6
-5 1
stdout
2 2 10
10 10
0 4
Explicație
Dacă nu ar fi fost limitată, matricea rezultată ar fi arătat astfel: