Konvoluce se používá pro mnoho věcí, jako je výpočet derivací, detekce hran, aplikování rozostření atd. a to vše se provádí pomocí „konvolučního jádra“. Konvoluční jádro je velmi malá matice a v této matici má každá buňka číslo a také kotevní bod.
přidávání řetězců java
Kotevní bod se používá ke zjištění polohy jádra vzhledem k obrázku. Začíná v levém horním rohu obrázku a pohybuje se postupně po každém pixelu. Jádro překrývá několik pixelů na každé pozici na obrázku. Každý pixel, který se překrývá, se vynásobí a poté sečte. A součet je nastaven jako hodnota aktuální pozice.
Konvoluce je proces, při kterém je každý prvek obrazu přidán k jeho místním sousedům a poté je vážen jádrem. Souvisí s formou matematické konvoluce.
V konvoluci matice neprovádí tradiční násobení matic, ale je označena *.
Předpokládejme, že existují dvě matice 3x3, jedna je jádro a druhá je obrazový kus. Při konvoluci se řádky a sloupce jádra převracejí a poté se násobí a poté se provádí sčítání. Prvky, které jsou přítomny ve středu matice, tj. v [2,2] obrázku, budou váženou kombinací matice obrázku a váhy budou dány jádrem. Podobně budou zváženy všechny ostatní prvky matice a poté budou vypočteny váhy.
Následuje pseudo kód pro popis procesu konvoluce:
For each image row in input image: For each pixel in image row: Set accumulator to zero For each kernel row in kernel: For each element in kernel row: If element position corresponding* to pixel position then Multiply element value corresponding*to pixelvalue Add result to accumulator Endif Set output image pixel to accumulator
Konvoluci lze vypočítat pomocí více smyček for. Ale použití for smyček způsobuje mnoho opakovaných výpočtů a také se zvětšuje velikost obrazu a jádra. Pomocí techniky diskrétní Fourierovy transformace lze výpočet konvoluce provést rychle. V této technice je celá operace konvoluce převedena na jednoduché násobení.
Při konvoluci nastává problém, když je jádro blízko okraje nebo rohů, protože jádro je dvourozměrné.
K překonání těchto problémů lze udělat následující věci:
- Jedny lze ignorovat
- V blízkosti okrajů lze vytvořit další pixely.
Další pixely lze vytvořit následujícími způsoby:
- Duplicitní okrajový pixel.
- Odrážet hrany
- Pixely lze kopírovat z druhého konce.