VB.NET a práce s grafikou   otázka

VB.NET, Algoritmy, Grafika

Dobrý den,

našel jsem řadu příkladů, kde pomocí matice můžu měnit kontrast, sytost a další parametry obrazu. Příklady fungují, nicméně jsem nepochopil jak to s tou transformační maticí je.

Poradí někdo její strukturu, jaké prvky matice mají na co vliv? Předpoklám, že takto lze naprogramovat jednoduchý grafický editor pro úpravu obrázků. Potěšil by i nějaký odkaz, kde je to uceleně vysvětleno...

Dále bych prosil o radu jak udělat složitější úpravy obrazu, třeba analýzu čar, prahování a podobné věci. Jde mi třeba o to, aby filtr dokázal určit a vykreslit čáru (nebo i kružnici) na rozhraní světlé/tmavé místo v obraze apod.

Opět by nějaký tutorial nebo funkční odkaz na problematiku pomohl.

Moc děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

každý barevný bod je určen hodnotou 3 barev RGB a průhledností A, tedy maticí ve tvaru (R,G,B,A,1). Tato matice se vynásobí zmíněnou transformační maticí (5x5) a výsledkem je opět matice ve tvaru (R,G,B,A,1), kde hodnoty R,G,B,A určují novou barvu pixelu. Postup násobení matic nalezenete např. na wikipedii.

Jednotková matice (neprovede žádnou změnu):

 1  0  0  0  0
 0  1  0  0  0
 0  0  1  0  0
 0  0  0  1  0
 0  0  0  0  1

Inverze barev, průhlednost zůstane zachována:

-1  0  0  0  0
 0 -1  0  0  0
 0  0 -1  0  0
 0  0  0  1  0
 1  1  1  0  1

Odstranění zelené složky:

 1  0  0  0  0
 0  0  0  0  0
 0  0  1  0  0
 0  0  0  1  0
 0  0  0  0  1

Lze provést i složitější úpravy obrazu. Jednotlivé pixely lze změnit voláním Bitmap.SetPixel(). To je však časově velmi náročný postup. Efektivnější řešení (Bitmap.LockBits()) popisuje tento článek: http://www.zive.cz/clanky/stante-se-prog...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji alespoň za toto... nicméně bylo by možné uvést nějaké použitelné filtry (contrast, brightness, emboss, odbarvení, prahování...) za předpokladu, že chci měnit jejich hodnotu plynule, tedy proměnnou "x" v intevalu <-1,1>.

Např. předpokládám, podle předchozího příspěvku, že Inverze barev by byla takhle:

x 0 0 0 0
0 x 0 0 0
0 0 x 0 0
0 0 0 1 0
0 0 0 0 1

kde x leží od -1 do 0

atd...

Nebo prosím alespoň o odkaz kde je to vysvětleno jak to funguje.

Dále jsem našel pár článků, kde se používají složitější postupy třeba na zvýraznění obrysů apod., jenže v "C". Má s tím někdo zkušenost nebo existuje nějaký tutoriál prop VB.NET ? A nebo existuje nějaká free .dll knihovna, která tohle všechno umí?

Moc děkuji za snahu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Neprve musíte zjistit postup (algoritmus) na kterém je daný filtr založen a následně jej implementovat pomocí transformační matice nebo metodou uvedenou ve výše odkazovaném článku.

Příklad změny jasu:

Podle článku http://www.gutgames.com/post/Adjusting-B... vyplývá, že změna jasu se provádí přičtením (nebo odečtením) konstantní hodnoty od každé barvy RGB. Matice tedy bude vypadat takto:

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
x x x 0 1

Kde x je z <-1;1>. Jedničky v úhlopříčce značí koeficient, kterým jsou jednotlivé kanály rgb násobeny. (Např. 0.5 v druhém sloupci druhém řádku by způsobilo potlačení zelené barvy na polovinu). Hodnoty v posledním řádku se přičtou. Tzn. že ke každému kanálu se přičte konstantní hodnota x.

Nevím, zda inverze barev může být plynule měněna proměnou x. Prostě filtr je nebo není aplikován, nic mezi není.

http://docs.rainmeter.net/tips/colormatr...

Free knihovna: http://csharpgdiplus11.codeplex.com/

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tohle je přesně ono MOC DĚKUJI !

Ale je to jak v té pohádce..."dej mu prst a ukousne ti celou ruku".

Potřeboval bych algoritmus, který dokáže detekovat obrysy, případně jednodušší obrys rozpoznat a proložit jej přímkou, kružnicí, oválem, obdélníkem, apod.? Tzn. např. když na kontrastní scéně bude kružnicový útvar aby na tento "kruhový "flek" dokázal algoritmus vložit kružnici, případně ji vycentrovat tak, aby se kryla s obrysem.

Děkuji :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback