Konvoluce je matematický operátor zpracovávající dvě funkce.
Spojitá konvoluce (značí se hvězdičkou) jednorozměrných funkcí
a
je definována vztahem:
Funkci
se říká konvoluční jádro. Hodnota konvoluce funkce
s jádrem
v bodě
je integrál ze součinu funkce
s otočenou funkcí konvolučního jádra (integrační proměnná
má v argumentu konvolučního jádra
záporné znaménko) posunutou do bodu
.
Pokud jde o konvoluci při zpracovávání obrazu, je funkce
většinou zkoumaný obrázek a funkce
nějaký filtr.




kde δ je tzv. Diracova delta funkce (distribuce):

a
. Integrál Delta funkce je roven 1:

Jde tedy o puls trvající nekonečně krátkou dobu.

pro všechna reálná (nebo komplexní) čísla
.
![{\mathcal {F}}(f*g)=\left[{\mathcal {F}}(f)\right]\cdot \left[{\mathcal {F}}(g)\right]=F\cdot G](https://wikimedia.org/api/rest_v1/media/math/render/svg/6af4db5050e0e4da2ea899d4118ca26275d61268)
kde
značí Fourierovu transformaci
![{\mathcal {F}}\left[f(x)\right]\equiv F(k)\equiv \int _{{-\infty }}^{\infty }f(x)\exp(-2\pi ikx)\,{\mathrm {d}}x](https://wikimedia.org/api/rest_v1/media/math/render/svg/40a031d3c064af9fce90d754347578b015be8942)
Dk.:



![H(k)=\int _{{-\infty }}^{\infty }h(z)\exp(-2\pi ikz)\,{\mathrm {d}}z=\int _{{-\infty }}^{\infty }\left[\int _{{-\infty }}^{\infty }f(x)g(z-x)dx\right]\exp(-2\pi ikz)\,{\mathrm {d}}z=](https://wikimedia.org/api/rest_v1/media/math/render/svg/a8aa5d6ba5f00262dc200aa18cc6e01dd705afd7)
![=\int _{{-\infty }}^{\infty }f(x)\left[\int _{{-\infty }}^{\infty }g(z-x)\exp(-2\pi ikz)\,{\mathrm {d}}z\right]{\mathrm {d}}x=](https://wikimedia.org/api/rest_v1/media/math/render/svg/dd0bca411a24eba36a67ebfcacf37f19584097ec)
substituce:
a tedy
![=\int _{{-\infty }}^{\infty }f(x)\left[\int _{{-\infty }}^{\infty }g(y)\exp(-2\pi ik(y+x))\,{\mathrm {d}}y\right]{\mathrm {d}}x=](https://wikimedia.org/api/rest_v1/media/math/render/svg/549e5236b93df85765e3749081b247fd0bf5dd4c)


V případě dvou konečných řad se samozřejmě nesčítá od −∞ do +∞, ale pouze přes existující prvky. (Případně si lze na pozici neexistujících prvků řady představit nuly.) Výsledná řada je o jeden prvek kratší než je součet délek konvoluovaných řad.
Konvoluce dvou řad:
(a, b, c, d) * (e, f, g) =
= (a*e) (a*f) (a*g)
(b*e) (b*f) (b*g)
(c*e) (c*f) (c*g)
(d*e) (d*f) (d*g)
-----------------------------------
následuje sečtení pod sebou
Výsledek je stejný, jakoby se jednalo o součin dvou polynomů. (Koeficienty násobených polynomů by představovaly dvě konvoluované řady, koeficienty součinu polynomů by odpovídaly výsledku konvoluce.)
Konkrétní čísla:
(1, 2, -2, -1) * (1, -1, 2) =
= 1 -1 2
2 -2 4
-2 2 -4
-1 1 -2
------------------
(1, 1,-2, 5,-3,-2)
Jinou možností výpočtu je použití maticového násobení.
Konkrétní čísla:
Konvoluce se často používá při algoritmech zpracování dvourozměrného diskrétního obrazu v počítačové grafice. Vzorec diskrétní konvoluce má potom tvar:
Princip diskrétní dvourozměrné konvoluce
V případě diskrétní konvoluce lze jádro chápat jako tabulku (konvoluční maska), kterou položíme na příslušné místo obrazu. Každý pixel překrytý tabulkou vynásobíme koeficientem v příslušné buňce a provedeme součet všech těchto hodnot. Tím dostaneme jeden nový pixel.
Například mějme konvoluční masku o rozměru 3×3 (bude překryto 9 pixelů) a všechny buňky mají koeficient 0,111 (1/9). Nový pixel, který vypočteme po aplikaci na jedno místo v původním obraze, tedy bude průměrem z devíti okolních pixelů. Neudělali jsme totiž nic jiného, než že jsme sečetli hodnoty 9 pixelů a vydělili 9. Pokud aplikujeme konvoluci na celý obraz, pak dostaneme rozostřený obraz. Pokud použijeme větší konvoluční masku 5×5 s koeficienty 1/25, pak bude obraz rozostřen více.
Koeficienty uvnitř konvoluční masky udávají vliv hodnoty pixelu pod nimi. Lze tak nadefinovat velké množství operací, např. derivace obrazu (u diskrétního obrazu mluvíme o tzv. odhadu derivace), tedy zvýraznění hran (viz detekce hran).