Popis nástroje Image Processing Toolbox. Grafické filtry založené na Twist matici

Tento článek pojednává nejen o nejběžnějších filtrech pro zpracování obrazu, ale přehlednou formou popisuje i algoritmy pro jejich provoz. Článek je určen především programátorům zabývajícím se zpracováním obrazu.

Konvoluční matice

Existuje mnoho filtrů využívajících konvoluční matici, ty hlavní budou popsány níže.

Konvoluční matice je matice koeficientů, která se „vynásobí“ hodnotou pixelu obrázku, aby se dosáhlo požadovaného výsledku.
Níže je aplikace konvoluční matice:

Div je normalizační koeficient, takže průměrná intenzita zůstává nezměněna.

V příkladu je matice 3x3, i když velikost by mohla být větší.

Rozostření filtru

Nejčastěji používaným filtrem založeným na konvoluční matici je filtr rozostření.

Obvykle je matice vyplněna podle normálního (Gaussova zákona). Níže je matice rozostření 5x5 vyplněná Gaussovým rozložením.

Koeficienty jsou již normalizovány, takže div pro tuto matici je jedna.

Síla rozostření závisí na velikosti matrice.

Za zmínku stojí okrajové podmínky (tento problém je relevantní pro všechny maticové filtry). Levý horní pixel nemá napravo „souseda“, takže nemáme čím násobit maticový koeficient.

Existují 2 řešení tohoto problému:

1. Použití filtru pouze na „okno“ obrázku, které má souřadnice pro levý horní roh a pro pravý dolní roh. kernelSize – velikost matice; šířka, výška – velikost obrázku.

Toto není nejlepší metoda, protože filtr není aplikován na celý obrázek. Pokud je velikost filtru velká, kvalita dost trpí.

2. Druhý způsob (přidávání) vyžaduje vytvoření meziobrazu. Cílem je vytvořit dočasný obrázek s rozměry (šířka + 2 * kernelSize / 2, výška + 2 * kernelSize / 2). Vstupní obraz je zkopírován do středu obrazu a okraje jsou vyplněny nejvzdálenějšími pixely obrazu. Rozostření se aplikuje na mezilehlou vyrovnávací paměť a poté se z ní extrahuje výsledek.

Tato metoda nemá žádné nedostatky v kvalitě, ale vyžaduje zbytečné výpočty.

Gaussův filtr rozostření má složitost O(hi * wi * n * n), kde hi, wi jsou rozměry obrázku, n je velikost matice (jádra filtru). Tento algoritmus lze optimalizovat s přijatelnou kvalitou.

Čtvercové jádro (matrice) lze nahradit dvěma jednorozměrnými: horizontálním a vertikálním. Pro jádro velikosti 5 budou vypadat takto:

Filtr se aplikuje ve 2 průchodech: nejprve vodorovně a poté svisle na výsledek (nebo naopak).

Složitost tohoto algoritmu bude O(hi * wi * n) + O(hi * wi * n) = 2 * O(hi * wi * n), což je pro velikost jádra větší než dva rychlejší než tradiční čtverec. maticová metoda.

Filtr ostrosti

Pro zlepšení přehlednosti použijte následující matici:

Tato matice zvyšuje rozdíl hodnot na hranicích. Div pro tuto matici je 1.

GIMP má filtr Convolution Matrix, který usnadňuje nalezení transformace matice, kterou potřebujete.

Podrobnější informace o filtrech založených na konvoluční matici naleznete v článku „Grafické filtry založené na konvoluční matici“.

Mediánový filtr

Mediánový filtr se obvykle používá ke snížení šumu nebo „vyhlazení“ obrazu.

Filtr pracuje s maticemi různých velikostí, ale na rozdíl od konvoluční matice ovlivňuje velikost matice pouze počet uvažovaných pixelů.

Algoritmus středního filtru je následující:

Pro aktuální pixel se seřadí pixely, které „spadnou“ do matice, a vybere se průměrná hodnota ze setříděného pole. Tato hodnota je výstupem pro aktuální pixel.

Níže je uvedena práce středního filtru pro velikost jádra tři.

Růstové a erozní filtry slouží k získání morfologické expanze, resp. Zjednodušeně to pro obrázky znamená výběr pixelu s maximální nebo minimální intenzitou z okolí.

V důsledku akrece se světlé objekty zvětšují, zatímco eroze má za následek zvětšení tmavých objektů.

Filtr používá vstupní obrázek a binární matici. Binární matice určuje tvar okolí. Okolí má obvykle kruhový tvar.

Build-up filtr lze použít ke zvýšení jasů a jasných odrazů.

Závěr

Článek popsal některé filtry pro zpracování obrazu, popsal jejich algoritmy a vlastnosti aplikace.

Obrazový šum. Hlukové modely

Již výše jsme psali, že úlohou „filtrování obrazu“ v širokém slova smyslu je někdy chápána jakákoli procedura zpracování obrazu, při níž je na vstup procedury přiveden (jeden) rastrový obraz a rastrový obraz je rovněž tvořen při výstup. Takové procedury typu (jeden rastrový vstup, jeden rastrový výstup) se nazývají\linebreak $\it(filtry)$.

Častěji se však „filtrováním“ v užším slova smyslu rozumí tzv. $\textit(noise filtering)$ neboli filtrování obrázků od „šumu“. V tomto případě se implicitně předpokládá, že zpočátku někde existoval určitý „originální“ ideálně čistý (zašuměný) obraz, ze kterého pak prostřednictvím $\it(noise)$ (určitý typ zkreslení) vznikl skutečný obraz, který bylo získáno pozorování. Úkol filtrování šumu se tedy scvrkává na to, že nějakým zpracováním pozorovaného reálného obrazu jej co nejlépe „očistíme od šumu“, tedy získat obraz, který se svými vlastnostmi nejvíce blíží původní „šumný“ obraz.

Ve skutečnosti je nutné pochopit, že „šum“ je jen velmi zjednodušený idealizovaný model výskytu zkreslení v digitálních obrazech reálných objektů. Obecně řečeno, zkreslení obrazu získaného videozáznamem skutečného trojrozměrného objektu v přírodním prostředí může být velmi složité v závislosti na podmínkách fotografování (světlo, mlha, oslnění, stíny, déšť, sníh atd.), vlastnosti optického systému (zkreslení, rozostření, zakalení čoček a zrcadel atd.), vlastnosti elektronického záznamového zařízení, vlastnosti přenosového kanálu, vlastnosti digitalizačních zařízení a mnoho a mnoho dalších faktorů. Matematické modely tvorby digitálního obrazu, které se blíží realitě, obsahují stovky složitých nelineárních rovnic a mnoho tabulkových oprav. V tomto případě zákon tvorby hodnoty jasu každého pixelu obrazu zpravidla není nezávislý na vytváření sousedních pixelů, parametry jasu obrazu závisí na geometrických atd. Při pokusu o matematickou „korekci“ takto složitého registračního modelu obrazu se již nemluví o filtrování od šumu, ale o $\it(restoration)$ nebo $\it(reconstruction)$ obrázků.

Bohužel metody obnovy obrazu jsou příliš výpočetně složité na to, aby byly prakticky použity v systémech počítačového vidění v reálném čase. Navíc vyžadují přesnou znalost matematického modelu a všech parametrů systému záznamu videa, což je v praxi také prakticky nemožné. Proto se v reálných systémech počítačového vidění zpravidla používají jednodušší, ale přesto docela účinné postupy filtrování šumu, určené k boji s mnohem jednoduššími zkresleními ve formě $\it(nezávislý šum pixelů)$ obrazu.

Nejobecnějším modelem pro nezávislý šum pixelů je $\it(substituční šum)$. Dostaneme počáteční („zašuměný“) polotónový obrázek Im$$, jehož každý pixel může nabývat hodnot v rozsahu $$. Obecný model náhradního šumu předpokládá, že po šumu si každý obrazový pixel, který měl dříve hodnotu jasu $i$, buď tuto hodnotu zachová se známou pravděpodobností $p(i)$, nebo bude tato hodnota jasu náhodně nahrazena s pravděpodobností $q(i ,j)$ nějakou jinou hodnotou jasu $j$ ze stejného konečného diskrétního rozsahu $$. Jak je vidět, k popisu takového obecného modelu náhodné substituce budeme muset specifikovat tabulku $\it(pravděpodobnosti přechodu)$ o velikosti $I_(\textrm(max))^(2)$, což je velmi významné množství v případě konvenčního $8$-bitového polotónového obrázku (velikost tabulky - $256\krát 256$ prvků). Tento popis je zjevně nekompaktní, a proto se v praxi u polotónových obrázků používá jen zřídka. Zároveň pro binární obrázky, ve kterých $I_(\rm (max)) = 2$, je takový popis nejpohodlnější, nejjednodušší a nejpřirozenější. Níže se také podíváme na model substitučního šumu na binárních obrázcích – tzv. model šumu „sůl a pepř“.

Pro polotónové obrazy se zpravidla uvažuje jiný, specifičtější model šumu - $\it(additivní šum)$, který předpokládá, že je generován zašuměný obraz podle zákona.

$$ (\rm Im)^(\prime) = (\rm Im) + R(x,y), $$

kde $(\rm Im)^(\prime)$ je pixel zašuměného obrázku, $(\rm Im)$ je pixel původního obrázku a $R(x,y)$ je náhodný $\ textit(aditivní složka šumu)$ . Kromě toho je ve většině aplikací závislost šumu na souřadnicích pixelů považována za nevýznamnou. Konečně, na základě $\it(zákona velkých čísel)$ známého ve statistice, je zákon rozdělení aditivní složky šumu přednostně popsán pomocí vhodné parametrické rodiny $\it(normal)$ ($\it(Gaussův )$) rozdělení s nulovým průměrem. Tedy $\textit(Gaussův aditivní šum)$ je popsán výrazem

$$ (\rm Im)^(\prime) = (\rm Im) + N(0,\sigma), $$

kde $N(a,\sigma)$ je normální rozdělení, $a$ je matematické očekávání normálně rozděleného signálu, $\sigma$ je střední kvadratická odchylka (MSD) normálně rozdělené hodnoty. Právě tento typ modelu šumu je nejčastěji zvažován v problémech filtrování polotónových obrázků.

Na Obr. Obrázky 2 - 8 ukazují příklady umělého šumu původního polotónového obrazu leukocytů (obr. 1) se speciálně generovaným aditivním Gaussovým šumem s různými hodnotami směrodatné odchylky. Jak vidíte, čím větší je parametr šumu $\sigma$, tím více zkresleně vypadá obrázek. Při velkých hodnotách $\sigma $ (obr. 7, 8) má i lidské oko potíže s rozlišením obecných obrysů velkých obrazových objektů (v tomto případě jsou menší a méně kontrastní objekty prakticky nerozeznatelné); .

V následujících částech budeme mít tento příklad na paměti, když se podíváme na různé techniky filtrování digitálního obrazu.

Okenní filtrování obrazu v prostorové doméně

Na základě úkolu obnovit původní hodnoty jasu zašuměného obrazu a také ze skutečnosti, že složka šumu každého pixelu je dříve neznámá náhodná veličina, vyplývá, že k vyřešení tohoto problému je nutné použít jednu resp. další $\textit(statistický odhad)$ procedura. Může to být Bayesovský odhad, odhad maximální pravděpodobnosti nebo jakákoli jiná metoda známá z kurzu matematické statistiky. Všechny tyto metody však vyžadují použití nejen jednoho jediného měření k odhadu požadované hodnoty (koneckonců může být také hlučné), ale větší nebo menší $\textit(statistický vzorek, )$vždy včetně několika odečtů charakterizujících toto hodnota. V tomto ohledu je hlavní myšlenkou filtrování obrazového šumu to, že k odhadu počáteční hodnoty každého pixelu v obrázku se používá nejen hodnota tohoto pixelu samotného (jako v dříve diskutovaných transformacích gradace), ale také hodnoty několika dalších pixelů v jeho blízkosti, které spadají do takzvaného filtru "$\it(window)$" nebo $\it(aperture)$. V tomto případě je „blízkost“ pixelů k tomu, co je vyhodnocováno, chápáno v doslovném geometrickém smyslu.

Nejjednodušší pro výpočetní implementaci je tradičně používané filtrování $\textit(obdélníková okna)$ (apertura), definované jednoduchou podmínkou jako "$\textit(všechny pixely daného okna jsou od testovaného centrálního pixelu vzdáleny více než WinX /2 horizontálně a WinY /2 vertikálně)$", kde WinX a WinY jsou horizontální a vertikální velikosti okna filtrování. Jsou možné i jiné, složitější způsoby vytváření filtračních oken - kulaté, trojúhelníkové nebo jakýkoli jiný libovolný tvar.

Typický postup filtrování oken předpokládá, že se okno filtru pohybuje sekvenčně přes $\textit(vstupní obrázek)$ (algoritmus může například procházet obrazem „v pořadí čtení“: shora dolů v řádcích, zleva doprava v každém řádek), přičemž v každém pozičním okně jsou analyzovány všechny pixely aktuálně patřící do okna a na základě takové analýzy je centrálnímu pixelu okna v $\textit(výstupní obrázek)$ přiřazena ta či ona konečná hodnota. Takto vygenerovaný výstupní obrázek se také nazývá $\textit(výsledek filtrování)$.

Postupy filtrování oken se mohou lišit:

  1. velikost a tvar okna (apertura);
  2. typ místní statistiky shromážděné v okně;
  3. způsob, jak se rozhodnout na základě shromážděných statistik.

V každém případě mluvíme o použití informací o hodnotách jeho sousedů na obrázku k odhadu hodnoty centrálního pixelu clony. Ve statistickém smyslu to znamená, že implicitně spoléháme na předpoklad, že v původním bezšumovém obrázku byly hodnoty jasu všech těchto sousedních pixelů stejné nebo velmi blízké a pozorované rozdíly v jejich jasu v zašuměném obraz jsou určeny pouze přítomností šumové složky, kterou je nutné vyloučit. Mezitím, jak jsme již viděli při zkoumání obrazových profilů, smysluplný obraz vůbec nepředstavuje jednu souvislou „rovinu“. V těch oblastech, které nám vizuálně připadají jako oblasti se stejným nebo pomalu se měnícím jasem, se hodnoty sousedních pixelů ve skutečnosti mírně liší. Současně jsou na hranicích takových oblastí pozorovány někdy velmi ostré změny jasu - rozdíl hodnot se pohybuje od desítek do stovek gradací intenzity, a to i mezi přímo sousedícími pixely. Vidíme tedy, že okenní filtry nemohou efektivně fungovat na hranicích homogenních oblastí, naopak zde pravděpodobně dělají chyby, které vizuálně povedou k efektu $\textit(deformace tvaru kontur)$. Pokud navíc původní obrázek obsahuje kontrastní objekty (oblasti), jejichž velikost je výrazně menší než velikost okna filtrování, filtr si takového objektu jednoduše „nevšimne“ a odfiltruje jej jako šum, což povede k $\textit (zmizení objektů malé velikosti)$ pro výsledný výstupní obraz.

Zdálo by se, že z předchozích diskuzí vyplývá, že je potřeba pracovat s malými otvory filtrů. Čím menší je totiž okno filtru, tím menší počet obrysových bodů bude „ovlivňovat“ a tím větší bude počet bodů umístěných na „náhorní plošině“ homogenních oblastí, pro které platí předpoklad stejného jasu všech pixelů v okolí bude platné. Intuitivně je však jasné, že čím silnější je šum přítomný na obrázku (čím rozporuplnější a „falešnější“ jsou v průměru důkazy bodů o jejich jasu), tím více pixelů je třeba prozkoumat, aby se dosáhlo požadovaného stupně důvěra v odpověď. Čili větší clony mají větší schopnost potlačit šumovou složku, proto v zásadě vzniká interferenční filtr.

Kvalita filtrace

Při konstrukci a studiu postupů filtrování obrazu v okně tedy musíme pozorovanou $\textit(kvalitu filtrování)$ vždy hodnotit podle následujících dvou hlavních pozic:

  1. schopnost filtru odstranit (filtrovat) šum z obrazu;
  2. schopnost filtru zachovat malé detaily a tvar obrysů v obraze.

Z hlediska následné analýzy obrazu by byl ideální šumový filtr takový, který by dokázal zcela odfiltrovat šum bez zkreslení tvaru kontur. Bohužel jsou tyto požadavky protichůdné, takže v různých metodách filtrování řešíme pouze různé kompromisy mezi nimi. Výběr konkrétního šumového filtru pro implementaci do praktického systému počítačového vidění závisí na tom, který z požadavků je v tomto konkrétním úkolu důležitější, a také na omezeních uložených systému architekturou a rychlostí dostupných výpočetních zařízení. .

Přejděme nyní ke konkrétním algoritmům pro filtrování okenních obrázků. Protože základní význam základních filtrovacích procedur je snazší pochopit na příkladu filtrování binárních obrázků, začneme studiem nejjednoduššího $\textit(binární filtry)$.

Tento článek pojednává nejen o nejběžnějších filtrech pro zpracování obrazu, ale přehlednou formou popisuje i algoritmy pro jejich provoz. Článek je určen především programátorům zabývajícím se zpracováním obrazu.

Konvoluční matice

Existuje mnoho filtrů využívajících konvoluční matici, ty hlavní budou popsány níže.

Konvoluční matice je matice koeficientů, která se „vynásobí“ hodnotou pixelu obrázku, aby se dosáhlo požadovaného výsledku.
Níže je aplikace konvoluční matice:

Div je normalizační koeficient, takže průměrná intenzita zůstává nezměněna.

V příkladu je matice 3x3, i když velikost by mohla být větší.

Rozostření filtru

Nejčastěji používaným filtrem založeným na konvoluční matici je filtr rozostření.

Obvykle je matice vyplněna podle normálního (Gaussova zákona). Níže je matice rozostření 5x5 vyplněná Gaussovým rozložením.

Koeficienty jsou již normalizovány, takže div pro tuto matici je jedna.

Síla rozostření závisí na velikosti matrice.

Za zmínku stojí okrajové podmínky (tento problém je relevantní pro všechny maticové filtry). Levý horní pixel nemá napravo „souseda“, takže nemáme čím násobit maticový koeficient.

Existují 2 řešení tohoto problému:

1. Použití filtru pouze na „okno“ obrázku, které má souřadnice pro levý horní roh a pro pravý dolní roh. kernelSize – velikost matice; šířka, výška – velikost obrázku.

Toto není nejlepší metoda, protože filtr není aplikován na celý obrázek. Pokud je velikost filtru velká, kvalita dost trpí.

2. Druhý způsob (přidávání) vyžaduje vytvoření meziobrazu. Cílem je vytvořit dočasný obrázek s rozměry (šířka + 2 * kernelSize / 2, výška + 2 * kernelSize / 2). Vstupní obraz je zkopírován do středu obrazu a okraje jsou vyplněny nejvzdálenějšími pixely obrazu. Rozostření se aplikuje na mezilehlou vyrovnávací paměť a poté se z ní extrahuje výsledek.

Tato metoda nemá žádné nedostatky v kvalitě, ale vyžaduje zbytečné výpočty.

Gaussův filtr rozostření má složitost O(hi * wi * n * n), kde hi, wi jsou rozměry obrázku, n je velikost matice (jádra filtru). Tento algoritmus lze optimalizovat s přijatelnou kvalitou.

Čtvercové jádro (matrice) lze nahradit dvěma jednorozměrnými: horizontálním a vertikálním. Pro jádro velikosti 5 budou vypadat takto:

Filtr se aplikuje ve 2 průchodech: nejprve vodorovně a poté svisle na výsledek (nebo naopak).

Složitost tohoto algoritmu bude O(hi * wi * n) + O(hi * wi * n) = 2 * O(hi * wi * n), což je pro velikost jádra větší než dva rychlejší než tradiční čtverec. maticová metoda.

Filtr ostrosti

Pro zlepšení přehlednosti použijte následující matici:

Tato matice zvyšuje rozdíl hodnot na hranicích. Div pro tuto matici je 1.

GIMP má filtr Convolution Matrix, který usnadňuje nalezení transformace matice, kterou potřebujete.

Podrobnější informace o filtrech založených na konvoluční matici naleznete v článku.

Mediánový filtr

Mediánový filtr se obvykle používá ke snížení šumu nebo „vyhlazení“ obrazu.

Filtr pracuje s maticemi různých velikostí, ale na rozdíl od konvoluční matice ovlivňuje velikost matice pouze počet uvažovaných pixelů.

Algoritmus středního filtru je následující:

Pro aktuální pixel se seřadí pixely, které „spadnou“ do matice, a vybere se průměrná hodnota ze setříděného pole. Tato hodnota je výstupem pro aktuální pixel.

Níže je uvedena práce středního filtru pro velikost jádra tři.

Růstové a erozní filtry slouží k získání morfologické expanze, resp. Zjednodušeně to pro obrázky znamená výběr pixelu s maximální nebo minimální intenzitou z okolí.

V důsledku akrece se světlé objekty zvětšují, zatímco eroze má za následek zvětšení tmavých objektů.

Filtr používá vstupní obrázek a binární matici. Binární matice určuje tvar okolí. Okolí má obvykle kruhový tvar.

Build-up filtr lze použít ke zvýšení jasů a jasných odrazů.

Závěr

Článek popsal některé filtry pro zpracování obrazu, popsal jejich algoritmy a vlastnosti aplikace.

Filtrování pomocí funkce imfilter

Filtrování obrazu, včetně korelace a konvoluce, lze implementovat pomocí funkce imfilter. Uvažujme příklad filtrování obrazu pomocí posuvné clony o rozměrech 5×5 a shodných hmotnostních složkách. Takový filtr se nazývá průměrovací filtr.

I = imread("coins.png"); 0.0.0.0.0.0 400 0,0400 0,0400 0,0400 0,0400 0,0400 0,0400 0,0400 0,0400 0,0400 I2 = imfilter(I,h); imshow(I); % Obrázek zdrojového obrázku, imshow(I2); % Obrázek po filtrování

Typy dat

Datové typy ve funkci imfilter se nastavují stejným způsobem jako při použití jiných podobných aritmetických funkcí. Výsledný obrázek bude ve stejném datovém formátu jako původní obrázek. Funkce imfilter vypočítá hodnoty každého výsledného pixelu ve formátu s dvojnásobnou přesností pomocí aritmetiky s plovoucí desetinnou čárkou. Pokud výsledné hodnoty překročí rozsah definovaný pro daný datový typ, může je funkce imfilter zkrátit na požadovaný rozsah. Záleží na formátu prezentace dat. Pokud jsou data ve formátu celého čísla, pak funkce imfilter zaokrouhlí zlomkovou část.

Proto při použití funkce imfilter musíte zvážit formát obrazových dat. Podívejme se na příklad, kde funkce imfilter vede k záporným hodnotám. Zdrojová data byla prezentována ve dvojím formátu.

A = magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 h = [-1 0 1] h = -1 0 1 imfiltr (A ,h) ans = 24 -16 -16 14 -8 5 -16 9 9 -14 6 9 14 9 -20 12 9 9 -16 -21 18 14 -16 -16 -2

Všimněte si, že výsledek je také reprezentován zápornými hodnotami. Pokud matice A není reprezentována ve dvojitém formátu, ale ve formátu uint8, dostaneme následující výsledek:

A = uint8(magic(5)); imfilter(A,h) ans = 24 0 0 14 0 5 0 9 9 0 6 9 14 9 0 12 9 9 0 0 18 14 0 0 0

Jakmile budou zdrojová data reprezentována ve formátu uint8, výsledná data budou také reprezentována ve formátu uint8 a záporné hodnoty budou zkráceny na 0. Zdrojová data tak mohou být převedena do jiných formátů, například celé číslo se znaménkem , před použitím funkce jednoduchého nebo dvojitého filtru.

Možnosti korelace a konvoluce

Funkce imfilter může provádět filtrování pomocí korelace nebo konvoluce. Výchozí hodnota je korelace, protože funkce generování filtrů generují korelační jádra.

Pokud však chcete filtrovat pomocí konvoluce, musíte zadat volbu "conv" jako volitelný argument ve funkci imfilter. Podívejme se na příklad.

A = magie(5); h = [-1 0 1] imfilter(A,h) % filtrování pomocí korelace ans = 24 -16 -16 14 -8 5 -16 9 9 -14 6 9 14 9 -20 12 9 9 -16 -21 18 14 -16 -16 -2 imfilter(A,h,"conv") % filtrování pomocí konvoluce ans = -24 16 16 -14 8 -5 16 -9 -9 14 -6 -9 -14 -9 20 -12 -9 -9 16 21 -18 -14 16 16 2

Možnost odsazení okrajů obrázku

Při výpočtu výsledných pixelů na okraji obrázku bude část masky filtru přesahovat hranice obrázku, jak je ukázáno na obrázku.


Hodnoty masky filtru přesahující hranice obrázku

Obvykle, když maska ​​filtru přesahuje hranice obrázku, funkce imfilter vyplní chybějící buňky nulovými hodnotami. Příklad takového plnění je znázorněn na obrázku níže.


Doplnění chybějících pixelů nulovými hodnotami

Pokud obrázek vyfiltrujete vyplněním chybějících pixelů nulami, výsledný obrázek bude mít na okraji obrázku tmavou čáru. To je znázorněno na obrázku.

I = imread("osm.tif"); h = jedničky(5,5)/25; I2 = imfilter(I,h); imshow(I), title("Původní obrázek"); obrázek, imshow(I2), title("Obrázek po filtrování");

K odstranění artefaktů, které jsou způsobeny chybějícími prvky vyplněnými nulami, používá imfilter alternativní metody pro doplnění chybějících prvků. Jednou z těchto metod je doplnění chybějících pixelů hodnotami nejvzdálenějších pixelů obrázku. Tato metoda je znázorněna na obrázku níže.


Vyplnění masky nejvzdálenějšími pixely obrázku

Při implementaci filtrování pomocí vyplnění chybějících prvků extrémními prvky obrázku musíte navíc ve funkci imfilter zadat volbu „replikovat“.

I3 = imfilter(I,h,"replikovat");

obrázek, imshow(I3);

Funkce imfilter podporuje také další metody doplnění chybějících pixelů při zpracování okrajových prvků obrázku. K tomu existují možnosti jako "kruhový" a "symetrický". Další podrobnosti naleznete v popisu funkce imfilter.

Vícerozměrné filtrování

Funkce imfilter dokáže zpracovat i vícerozměrné obrázky. Rozdíly mezi filtrováním dvourozměrných a trojrozměrných obrázků jsou v tom, že při zpracování trojrozměrných obrázků je každá barevná vrstva, která představuje dvourozměrný obrázek a může být zpracována dvourozměrným filtrem, podrobena filtrování samostatně.


MATLAB má několik dvojrozměrných a vícerozměrných filtračních funkcí. Funkce filter2 provádí dvourozměrné lineární filtrování, conv2 provádí konvoluci na dvourozměrných signálech a convn provádí konvoluci na vícerozměrných signálech. Při práci s každou z těchto funkcí je nutné, aby zdrojová data byla prezentována ve dvojím formátu. Výsledek bude také prezentován ve dvojím formátu. Tyto funkce vždy používají nulové odsazení pro chybějící pixely při práci na okraji obrazu a nepodporují jiné způsoby odsazení.

Na rozdíl od pojmenovaných funkcí imfilter nevyžaduje převod zdrojových dat do dvojitého formátu. Funkce imfilter má také několik možností pro doplnění chybějících prvků na okraji obrázku.

Použití předdefinovaných typů filtrů

Funkce fspecial má schopnost generovat několik typů předdefinovaných filtrů, což se odráží ve tvaru masky. Po vytvoření filtru pomocí funkce fspecial jej můžete použít na obrazová data pomocí funkce imfilter. Uvažujme příklad implementace filtru typu fuzzy maskování pro zpracování plnobarevného obrázku. Metoda fuzzy maskování se efektivně používá k vylepšení okrajů a zvýšení detailů obrázků.

I = imread("měsíc.tif"); h = fspecial("unsharp") h = -0,1667 -0,6667 -0,1667 -0,6667 4,3333 -0,6667 -0,1667 -0,6667 -0,1667 I2 = imfilter(I,h); imshow(I), title("Původní obrázek") postava, imshow(I2), title("Zpracovaný obrázek")

Metody frekvenční konverze

Metody frekvenční konverze používají jednorozměrné i dvourozměrné filtry s konečnou impulsní odezvou. Tyto metody využívají transformační matici, jejíž prvky definují frekvenční transformace.

Funkce aplikace ftrans2 je navržena tak, aby implementovala metody zpracování obrazu založené na frekvenci. Tato funkce generuje masku 2D lineárního filtru pomocí metody frekvenční transformace pro transformaci 1D filtru s konečnou impulsní odezvou. (Další podrobnosti viz Jae S. Lim, Dvourozměrné zpracování signálu a obrazu, 1990.

Všimněte si, že metody frekvenční transformace poskytují velmi dobré výsledky zpracování. Podívejme se na příklad.

B = remez(10,,); h = ftrans2(b);


= freqz(b,1,64,"celý"); colormap(jet(64)) plot(w/pi-1,fftshift(abs(H))) figure, freqz2(h,)

Jednorozměrná frekvenční odezva (vlevo) a její odpovídající dvourozměrná frekvenční odezva (vpravo)

V metodách založených na frekvenci je lineární filtrační maska ​​vytvořena na základě požadované amplitudově-frekvenční odezvy.

V aplikaci funkce fsamp2 generuje lineární masku 2D filtru na základě požadované frekvenční charakteristiky 2D filtru. Vygenerovaná maska ​​je určena k předání odpovídajícím funkcím (například filter2 nebo conv2), které provádějí dvourozměrné lineární filtrování. Zvažme výše uvedené na konkrétním příkladu.

Hd = nuly(11,11); Hd(4:8,4:8) = 1;


= freqspace(11,"síťka");

mesh(f1,f2,Hd), osa ([-1 1 -1 1 0 1.2]), mapa barev (jet(64)) h = fsamp2(Hd);

obrázek, frekvence2(h,), osa([-1 1 -1 1 0 1,2])

Lokální (okenní) metody


V nástroji Image Processing Toolbox jsou funkce, které generují masky lineárního filtru na základě požadované amplitudově-frekvenční odezvy pomocí jednorozměrného nebo dvourozměrného okna. Při vytváření matice požadované amplitudově-frekvenční odezvy se pro získání přesnějšího výsledku doporučuje použít frekvenční vzorky vrácené funkcí freqspace.

Podívejme se na to na příkladu.

Hd = nuly(11,11); Hd(4:8,4:8) = 1;

= freqspace(11,"síťka"); mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64)) h = fwind1(Hd,hamming(11)); obrázek, frekvence2(h,), osa([-1 1 -1 1 0 1,2])

Požadovaná 2D frekvenční odezva (vlevo) a skutečná 2D frekvenční odezva (vpravo)


Vytvoření požadované amplitudově-frekvenční odezvy

Funkce návrhu filtru fsamp2, fwind2 a fwind2 vytvářejí filtry založené na matici požadovaných hodnot frekvenční odezvy. Odpovídající požadovanou frekvenční odezvu lze vytvořit pomocí funkce freqspace.

Podívejme se na příklad vytvoření kruhové dolní propusti s cutoffem 0,5. Chcete-li to provést, použijte následující kód:

Freqspace(25"mřížka");

Hd = nuly (25,25); d = sqrt(f1.^2 + f2.^2)

Perfektní kruhová nízkofrekvenční odezva


Výpočet frekvenční odezvy filtru

Funkce freqz2 vypočítá frekvenční odezvu 2D filtru. Pokud pro filtr s konečnou impulsní odezvou předpokládáme, že

H =;

poté zvažte výpočet a vizualizaci bodů frekvenční odezvy 64x64 h.

Podívejme se na příklad rozmazání obrazu. Tento postup realizujeme pomocí dvourozměrné dolní propusti (LPF) s konečnou impulsní odezvou (FIR), která je tvořena z jednorozměrné LPF metodou frekvenční konverze.

Některé typy transformací při zpracování obrazu

Ve většině případů je obraz reprezentován matematicky jako funkce dvou prostorových proměnných ƒ(x,y). Funkční hodnota v bodě (x,y) je ekvivalentní úrovni intenzity v tomto bodě.

  1. Fourierova transformace;
  2. Diskrétní kosinové transformace
  3. Radonové přeměny
  4. Promítací transformace

Zvážíme také některé termíny, které se budou používat pro různé typy transformací.

Období

Definice

Diskrétní transformace

Jedná se o typ transformace, ve kterém jsou zdrojová a výsledná data reprezentována jako diskrétní hodnoty. Diskrétní transformace, které jsou implementovány v MATLABu a zejména v Image Processing Toolbox, zahrnují diskrétní Fourierovu transformaci a diskrétní kosinusovou transformaci.

Frekvenční doména Oblast, ve které je obraz reprezentován jako součet periodických signálů s různými frekvencemi.
Prostorová oblast Oblast, ve které je obraz reprezentován jako body v prostoru, z nichž každý odpovídá určité hodnotě intenzity.
Konverze

Alternativní matematické znázornění obrázků. Například Fourierovy transformace představují obraz jako součet komplexních exponenciálních proměnných amplitudy, frekvence a fáze. Tento typ transformace se nejčastěji používá při analýze, vylepšení a kompresi obrazu.

Anotace: Zavedení. Lineární filtry: definice, antialiasingové filtry, filtry pro zvýšení kontrastu, rozdílové filtry. Nelineární filtry: příklady nelineárních filtrů, morfologické operátory

8.1. Zavedení

Představme si, že při pohledu na nějakou scénu jedním okem k ní přineseme skleněnou desku. Pokud tato deska nebyla dokonale průhledná, pozorovaný obraz se změní. V závislosti na skle, ze kterého je deska vyrobena, může být změna velmi různorodá. Pokud bylo například toto sklo barevné, obrázek získá příslušný odstín, ale pokud je sklo zakalené, bude rozmazané.

Filtrování obrázků je podobný pohledu na svět přes skleněnou desku, i když umožňuje dosáhnout mnohem větší rozmanitosti efektů než experimenty s různými deskami. Filtrování obrázků je operace, jejímž výsledkem je obrázek stejné velikosti, získaný z původního podle určitých pravidel. Typicky je intenzita (barva) každého pixelu ve výsledném obrázku určena intenzitami (barvami) pixelů umístěných v nějakém jeho sousedství v původním obrázku.

Pravidla, která definují filtrování (tzv filtry), mohou být velmi rozmanité. V této přednášce se podíváme na nejjednodušší filtry. Všimněte si, že podle navrhované definice je filtrem také operace sestávající z postupné aplikace dvou nebo více filtrů. Můžeme tedy mluvit o kompozitní filtry, odpovídající kombinacím prvočísel. Po prostudování základních typů filtrů v této přednášce se budeme v následujících přednáškách zabývat využitím filtrů z nich složených k řešení různých problémů. Filtrování obrazu je jednou z nejzákladnějších operací počítačového vidění, rozpoznávání vzorů a zpracování obrazu. Ve skutečnosti práce velké většiny metod začíná jakýmsi filtrováním zdrojových obrázků. Filtry probírané v této přednášce jsou proto mimořádně důležité z hlediska jejich použití v různých aplikacích.

8.2. Lineární filtry

Definice

(8.1)

Výsledkem je obrázek B. V definici (8.1) jsme vynechali sumační limity. Obvykle je jádro filtru nenulové pouze v nějakém okolí N bodu (0, 0). Mimo toto okolí je F(i, j) buď přesně nula, nebo je jí velmi blízko, takže ji lze zanedbat. Sčítání v (8.1) se provádí přes a hodnota každého pixelu B(x, y) je určena pixely obrázku A, které leží v okně N se středem v bodě (x, y) (označíme tato množina N(x, y)) . Jádro filtru definované na pravoúhlém sousedství N může být viděno jako matice m x n, kde jsou délky stran lichá čísla. Když specifikujete jádro pomocí matice M kl , mělo by být vystředěno:

(8.2)

Dále je třeba objasnit situaci, kdy se pixel (x, y) nachází v blízkosti okrajů obrazu. V tomto případě může A(x + i, y + j) v definici (8.1) odpovídat pixelu A ležícímu mimo obraz A. Tento problém lze vyřešit několika způsoby.

  • Nefiltrujte takové pixely oříznutím obrazu B na okrajích nebo jeho malováním, například černou barvou.
  • Nezahrnujte odpovídající pixel do součtu, rozdělte jeho váhu F(i, j) rovnoměrně mezi ostatní pixely v okolí N(x, y) .
  • Určete hodnoty pixelů mimo hranice obrázku pomocí extrapolace. Uvažujme například hodnotu intenzity blízko hraniční konstanty (pro pixel (-2, 5) máme A(-2, 5) = A(0, 5) ) nebo uvažujme gradient intenzity poblíž hraniční konstanty ( A(-2, 5) = A(0, 5) + 2(A(0, 5) - A(1, 5))).
  • Definujte hodnoty pixelů mimo hranice obrazu pomocí zrcadlového odrazu (A(-2, 5) = A(2, 5) ).

Výběr konkrétní metody musí být proveden s ohledem na konkrétní filtr a vlastnosti konkrétní aplikace.

Po prozkoumání obecné definice lineárních filtrů přejděme k příkladům.




Nahoru