Latest:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
By month:
- November 2021
- January 2019
- December 2017
- December 2016
- May 2014
- April 2014
- November 2013
- April 2013
- April 2011
- February 2011
- January 2011
- August 2010
- May 2010
- March 2010
- January 2010
- October 2009
- April 2009
- February 2009
- October 2008
- September 2008
- August 2008
- April 2008
- March 2008
- February 2008
Topic:
Softwarové vyvážení bílé v libv4l
Z kamery již dostávám použitelný obraz. Pořád je ale co zlepšovat. Při zkoumání oficiálního ovladače pro Windows jsem zjitil že tento driver dělá hodně věcí softwarově, jak je u levných web kamer běžné. V linuxu ale není moc možností jak obraz z v4l zařízení softwarově upravovat a tento upravený obraz v reálném čase posílat aplikaci. První vlaštovkou je upravená v4l knihovna od Hanse de Goede o které jsem psal v souvisloti s převodem video formátu pro Skype.
Libv4l se nabízí k implementaci mnohem více funkcí než „jen“ převod do jiného formátu. Např. rotace obrazu již byly impementovány. I když teda rotace v barevném prostoru yuv420 zatím nefungují tak jak by měli…
Nejvíce mi u m5602 chybělo vyvážení bílé barvy. Bez něj z této kamery teče za různých světelných podmínek rozličně zbarvený obraz. Tak jsem jsem si řekl že jej zkusím napsat sám. Zprvu jsem si na implementaci netroufl. Se zpracováním obrazu jsem neměl žádné zkušenosti. Ztrávil jsem tedy asi půl dne googlením a procházením zdrojáků různých knihoven v naději že najdu jednoduchý a jasný algoritmus implementující vyvážení bílé.
Nakonec jsem hledání vzdal a řekl jsem si že na tom nemůže být nic zas tak těžkého. Vždyť „vyvážený“ obraz by měl splňovat jednu jednoduchou podmínku. Poměr různých složek spektra (r:g:b) by měl být 1:1:1. Takže by mělo stačit zjistit průměrné hodnoty barev a pak tu které je tam málo trochu zesílit a ostatní ubrat… S touto úvahou jsem se vrhnul do nitra libv4l aniž bych tušil jak to dopadne. Nakonec mi mnohem větší problém než implementace samotného algoritmu dělalo pochopení bayer formátu. Konečný výsledek mě mile překvapil.
Ovládání obrazu přes sdílenou paměť
Další drobností, která používání kamery na linuxu značně znepříjemňuje je fakt, že žádná aplikace (já žádnou nenašel) neumožňuje ovládat všechny dostupné parametry. Takže vývojáři ovladačů hackují ovládání různých parametrů přímo na hardwaru, jako zrcadlení obrazu, kontrast, vyvážení barevných kanálů… aby nakonec v aplikaci v uživatelském protoru šel upravovat třeba jenom jas.
Z toho důvodu jsem se pustil do implementace ovládání kamery přes sdílenou paměť. Moje idea byla následující: Ve Skypu si pustím video s použitím libv4l a v konzoli ovládacím prográmkem budu moci měnit parametry obrazu. Protože v4l zařízení může být otevřeno pouze jedním programem (pokud je mi známo), tak ovládací program bude komunikovat s knihovnou přes dílenou paměť, nikoliv přímo se zařízením.
Výsledek můžete vidět na screencastu (x264 avi,
2.6MB).