Směrová kubická konvoluce interpolace - Directional Cubic Convolution Interpolation - Wikipedia
Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Směrová kubická konvoluce interpolace (DCCI) je zaměřen na hranu změna měřítka obrazu algoritmus vytvořený Dengwen Zhou a Xiaoliu Shen.[1]
Zohledněním hran v obraz, toto měřítko algoritmus snižuje artefakty běžné pro jiné algoritmy změny měřítka obrazu. Například artefakty schodiště na diagonálních čarách a křivkách jsou vyloučeny.
Algoritmus změní velikost obrázku na dvojnásobek jeho původních rozměrů, minus 1.[2]
Algoritmus
Algoritmus pracuje ve třech hlavních krocích:
- Zkopírujte originál pixelů do výstupního obrazu, s mezerami mezi pixely.
- Vypočítejte pixely pro diagonální mezery.
- Vypočítejte pixely zbývajících vodorovných a svislých mezer.
Výpočet pixelů v diagonálních mezerách
Vyhodnocení diagonálních pixelů se provádí na původních obrazových datech v oblasti 4 × 4, přičemž nový pixel se počítá ve středu, v mezeře mezi původními pixely. Lze to také považovat za oblast 7 × 7 ve zvětšeném obrazu se středem na novém pixelu, která se má vypočítat, a původní pixely již byly zkopírovány.
Algoritmus rozhoduje o jednom ze tří případů:
- Okraj ve směru nahoru - interpoluje podél směru doprava dolů.
- Okraj ve směru dolů-vpravo - interpoluje se ve směru nahoru-vpravo.
- Hladká oblast - interpoluje v obou směrech, poté vynásobí hodnoty váhami.
Výpočet síly úhlopříčné hrany
Nechť d1 je součet hran ve směru nahoru a d2 je součet hran ve směru dolů.
Pro výpočet d1 vezměte součet abs (P (X, Y) - P (X - 1, Y + 1)) v oblasti X = 1 až 3 a Y = 0 až 2.
Chcete-li vypočítat d2, vezměte součet abs (P (X, Y) - P (X + 1, Y + 1)) v oblasti X = 0 až 2 a Y = 0 až 2.
Interpolace pixelů
Pokud (1 + d1) / (1 + d2)> 1,15, pak máte hranu ve směru nahoru. Pokud (1 + d2) / (1 + d1)> 1,15, pak máte hranu ve směru dolů-vpravo.
Jinak jste v hladké oblasti. Aby se zabránilo rozdělení a plovoucí bod to lze také vyjádřit jako 100 * (1 + d1)> 115 * (1 + d2) a 100 * (1 + d2)> 115 * (1 + d1).
Horní pravý okraj
U hrany ve směru nahoru-nahoru chceme interpolovat směrem dolů-vpravo.
Výstupní pixel = (-1 * P (0, 0) + 9 * P (1, 1) + 9 * P (2, 2) - 1 * P (3, 3)) / 16
Hodnotu pixelu bude nutné vynutit na platný rozsah hodnot pixelu (obvykle 0 až 255).
Dolní pravý okraj
U hrany ve směru dolů-vpravo chceme interpolovat směrem nahoru-vpravo.
Výstupní pixel = (-1 * P (3, 0) + 9 * P (2, 1) + 9 * P (1, 2) - 1 * P (0, 3)) / 16
Hodnotu pixelu bude nutné vynutit na platný rozsah hodnot pixelu (obvykle 0 až 255).
Hladká oblast
V hladké oblasti bude síla okraje zprava doprava přispívat k pixelu vzorkování zprava doleva a síla hrany zprava dole bude přispívat k vzorovanému pixelu vpravo.
w1 = 1 / (1 + d1 ^ 5)
w2 = 1 / (1 + d2 ^ 5)
hmotnost1 = w1 / (w1 + w2)
hmotnost2 = w2 / (w1 + w2)
DownRightPixel = (-1 * P (0, 0) + 9 * P (1, 1) + 9 * P (2, 2) - 1 * P (3, 3)) / 16
UpRightPixel = (-1 * P (3, 0) + 9 * P (2, 1) + 9 * P (1, 2) - 1 * P (0, 3)) / 16
Výstupní pixel = DownRightPixel * hmotnost1 + UpRightPixel * hmotnost2
Hodnotu pixelu bude nutné vynutit na platný rozsah hodnot pixelu (obvykle 0 až 255).
Výpočet zbývajících pixelů
Vyhodnocení zbývajících pixelů se provádí na měřítkových obrazových datech v oblasti 7 × 7, přičemž nový pixel se počítá ve středu. Tyto výpočty závisí buď na původních pixelech obrazu, nebo na diagonálním pixelu vypočítaném v předchozím kroku.
Algoritmus rozhoduje o jednom ze tří případů:
- Okraj ve vodorovném směru - interpoluje ve svislém směru.
- Okraj ve svislém směru - interpoluje se ve vodorovném směru.
- Hladká oblast - interpoluje v obou směrech, poté vynásobí hodnoty váhami.
Výpočet síly vodorovné / svislé hrany
Nechť d1 je součet hran ve vodorovném směru a d2 je součet hran ve svislém směru.
Vezměte v úvahu oblast 7 × 7 ve tvaru kosočtverce se středem na pixelu, která se má vypočítat, přičemž se použijí pouze hodnoty pixelů z originálu a hodnoty pixelů přidané z úhlopříčky.
Chcete-li vypočítat d1, vezměte součet absolutních rozdílů vodorovných hran a odeberte tyto hodnoty pixelů:
| P (X + 1, Y-2) - P (X-1, Y-2) | + | P (X + 2, Y-1) - P (X, Y-1) | + | P (X, Y-1) - P (X-2, Y-1) | + | P (X + 3, Y) - P (X + 1, Y) | + | P (X + 1, Y) - P (X-1, Y) | + | P (X-1, Y) - P (X-3, Y) | + | P (X + 2, Y + 1) - P (X, Y + 1) | + | P (X, Y + 1) - P (X-2, Y + 1) | + | P (X + 1, Y + 2) - P (X-1, Y + 2) |
Chcete-li vypočítat d2, vezměte součet absolutních rozdílů svislých hran a odeberte tyto hodnoty pixelů:
| P (X-2, Y + 1) - P (X-2, Y-1) | + | P (X-1, Y + 2) - P (X-1, Y) | + | P (X-1, Y) - P (X-1, Y-2) | + | P (X, Y + 3) - P (X, Y + 1) | + | P (X, Y + 1) - P (X, Y-1) | + | P (X, Y-1) - P (X, Y-3) | + | P (X + 1, Y + 2) - P (X + 1, Y) | + | P (X + 1, Y) - P (X + 1, Y-2) | + | P (X + 2, Y + 1) - P (X + 2, Y-1) |
Interpolace pixelů
Pokud (1 + d1) / (1 + d2)> 1,15, pak máte hranu ve vodorovném směru.
Pokud (1 + d2) / (1 + d1)> 1,15, pak máte hranu ve svislém směru.
Jinak jste v hladké oblasti.
Aby nedocházelo k dělení operací s plovoucí desetinnou čárkou, lze to také vyjádřit jako 100 * (1 + d1)> 115 * (1 + d2) a 100 * (1 + d2)> 115 * (1 + d1).
Vodorovná hrana
U vodorovné hrany chceme interpolovat ve svislém směru pomocí pouze sloupce se středem v pixelu.
Výstupní pixel = (-1 * P (X, Y - 3) + 9 * P (X, Y - 1) + 9 * P (X, Y + 1) - 1 * P (X, Y + 3)) / 16
Hodnotu pixelu bude nutné vynutit na platný rozsah hodnot pixelu (obvykle 0 až 255).
Svislá hrana
U svislé hrany chceme interpolovat ve vodorovném směru, pouze pomocí řady se středem v pixelu.
Výstupní pixel = (-1 * P (X - 3, Y) + 9 * P (X - 1, Y) + 9 * P (X + 1, Y) - 1 * P (X + 3, Y)) / 16
Hodnotu pixelu bude nutné vynutit na platný rozsah hodnot pixelu (obvykle 0 až 255).
Hladká oblast
V hladké oblasti bude síla vodorovné hrany přispívat k hmotnosti vertikálně vzorkovaného pixelu a síla vertikální hrany přispěje k hmotnosti horizontálně vzorkovaného pixelu.
w1 = 1 / (1 + d1 ^ 5)
w2 = 1 / (1 + d2 ^ 5)
hmotnost1 = w1 / (w1 + w2)
hmotnost2 = w2 / (w1 + w2)
HorizontalPixel = (-1 * P (X - 3, Y) + 9 * P (X - 1, Y) + 9 * P (X + 1, Y) - 1 * P (X + 3, Y)) / 16
VerticalPixel = (-1 * P (X, Y - 3) + 9 * P (X, Y - 1) + 9 * P (X, Y + 1) - 1 * P (X, Y + 3)) / 16
Výstupní pixel = VerticalPixel * weight1 + HorizontalPixel * weight2
Hodnotu pixelu bude nutné vynutit na platný rozsah hodnot pixelu (obvykle 0 až 255).
Nespecifikováno
Hraniční pixely
Algoritmus nedefinuje, co dělat při vzorkování hraničních oblastí mimo obraz. Mezi možné věci patří replikace hraničního pixelu, zabalení pixelů z druhé strany obrázku, zabalení stejné strany obrázku v opačném směru nebo použití konkrétní hodnoty barvy ohraničení.
Barevné obrázky
Algoritmus neurčuje barevné obrázky, ale můžete sečíst všechny RGB rozdíly komponent při výpočtu síly hrany a při interpolaci pixelů použijte všechny komponenty RGB. Nebo se můžete rozdělit na YCbCr, zpracovat pouze lumovou složku a roztáhnout chroma pomocí jiného algoritmu.
Viz také
- Bilineární interpolace
- Bikubická interpolace
- Lanczos převzorkování
- Srovnávací galerie algoritmů pro změnu měřítka obrazu
Reference
- ^ Dengwen Zhou; Xiaoliu Shen. „Zvětšení obrazu pomocí interpolace směrovou kubickou konvolucí“. Citováno 13. září 2015.
- ^ Sabir, Essaid; Medromi, Hicham; Sadik, Mohamed (02.02.2016). Pokroky ve všudypřítomných sítích: sborník UNet'15. Springer. ISBN 978-981-287-990-5.