9.2. Konvoluční matice

9.2.1. Overview

Tento filtr je rájem matematiků. Mnoho filtrů interně používá konvoluční matici. S filtrem Konvoluční matice si ale můžete vytvořit filtr vlastní.

Co je konvoluční matice? Konvoluce je operace s maticí pomocí jiné matice zvané „jádro“. Jako první matice se používá obrázek určený k úpravě. Obrázek je vlastně dvojrozměrná pravoúhlá souřadnicová síť pixelů. Použité jádro závisí na požadovaném efektu.

GIMP používá matice 5×5 nebo 3×3. Zde budeme uvažovat pouze o maticích 3×3, jsou nejpoužívanější a obvykle dostačující pro všechny požadované efekty. Pokud jsou všechny krajní hodnoty jádra nastaveny na nulu, bude systém považovat jádro za matici typu 3×3.

Filtr postupně zpracovává všechny pixely obrázku. Pro každý z nich vynásobí hodnotu aktuálního pixelu a jeho osmi sousedních pixelů odpovídajícími hodnotami jádra. Výsledné hodnoty pak sečte a výsledek je pak hodnotou přiřazenou aktuálnímu pixelu.

Jednoduchý příklad:

Vlevo je matice obrázku: každý pixel je popsán svou hodnotou. Aktuální pixel je vyznačen červeně. Oblast, se kterou jádro pracuje, je označena zeleně. Uprostřed obrázku je jádro a vpravo je výsledek konvoluce.

Stalo se následující: filtr postupně zleva doprava a shora dolů načte všechny pixely z oblasti, se kterou jádro pracuje. Hodnotu každého takového pixelu vynásobí příslušnou hodnotou jádra a výsledky sečte: (100*0)+(50*1)+(50*0)*(100*0)+(100*0)+(100*0)+(100*0)+(100*0)+(100*0)+(100*0) = 50. Aktuální pixel tak získá hodnotu 50. Filtr nepracuje přímo s obrázkem, ale s jeho kopií. Výsledkem tohoto filtru bude proto posun o pixelů o jeden pixel dolů.

Here is what happened: the filter read successively, from left to right and from top to bottom, all the pixels of the kernel action area. It multiplied the value of each of them by the kernel corresponding value and added results. The initial pixel has become 42: (40*0)+(42*1)+(46*0) + (46*0)+(50*0)+(55*0) + (52*0)+(56*0)+(58*0) = 42. (the filter doesn't work on the image but on a copy). As a graphical result, the initial pixel moved a pixel downwards.

9.2.2. Activating the filter

This filter is found in the image window menu under FiltersGenericConvolution Matrix….

9.2.3. Options

Obrázek 17.175. Convolution matrix options

„Convolution matrix“ options

Presets, Input Type, Clipping, Blending Options, Preview, Split view
[Poznámka] Poznámka

These options are described in 2 – „Common Features“.

Matice

Jaderná matice 5×5: hodnoty zapisujte přímo do jednotlivých polí.

Divisor

The result of previous calculation will be divided by this divisor. You will hardly use anything else than 1, which leaves results unchanged, and 9 or 25 according to matrix size, which gives the average of pixel values. The divisor can only be changed when Normalize is unchecked.

Offset

This value is added to the division result. This is useful if result may be negative. This offset may be negative. It can only be changed when Normalize is unchecked.

Channels

Here you can select which channels the filter should change.

Normalize

Pokud je tato volba aktivní, je dělitel výsledkem konvoluce. Pokud je tento výsledek nulový (nulou nelze dělit), je použit posun o velikosti 128. Pokud je záporný (záporná barva není možná), je použit posun o velikosti 255 (invertuje výsledek).

Alpha-weighting

Pokud není tato volba zvolena, nebere filtr v úvahu průhlednost, což může vést k artefaktům při rozmazávání.

Obvod

Když je aktuální pixel na okraji, je část jádra mimo obrázek. Je třeba se rozhodnout, co má v takovém případě filtr dělat:

From left: source image, None border, Loop border, Clamp border

None

This part of kernel is not taken into account.

Loop

This part of kernel will study pixels of the opposite border, so pixels disappearing from one side reappear on the other side.

Clamp

Pixels on borders are not modified, but they are cropped.

Black

Pixels on borders are changed to black.

White

Pixels on borders are changed to white.

9.2.4. Příklady

Návrh jader je založen na složité matematice. Hotová jádra ale můžete nalézt na webu. Zde je několik příkladů:

Obrázek 17.176. Sharpen

Sharpen
Sharpen

Obrázek 17.177. Blur

Blur
Blur

Obrázek 17.178. Vylepšení hran

Vylepšení hran
Vylepšení hran

Obrázek 17.179. Detekce hran

Detekce hran
Detekce hran

Obrázek 17.180. Reliéf

Reliéf
Reliéf