Beeld stabilisatie, de basis
Beeld stabilisatie voor video kan in twee categorieën onderverdeeld worden; Optische beeld stabilisatie, waarbij de lens of sensor bewogen wordt om de bewegingen van het apparaat te compenseren en elektronische (of digitale) beeld stabilisatie, waarbij de opgenomen frames worden verschoven en omgevormd om ze op elkaar af te stemmen. Dat kan in real-time gedaan worden indien de gemaakte bewegingen van het opname toestel bekend zijn, of achteraf in na-bewerkings software, door blokken van pixels in de frames met elkaar te vergelijken en deze uit te lijnen.
Allereerst moet men weten dat er twee soorten bewegingen zijn die een tril of schud effect veroorzaken in een video. Ten eerste de zijwaartse bewegingen, waarbij het toestel zijwaarts, op en neer of heen en weer wordt bewogen. Alleen als het object zeer dichtbij is, zullen deze bewegingen een probleem vormen. Trillingen door zijwaarts bewogen opnames van verweggelegen objecten zijn nauwelijks zichtbaar in de video. Zijwaartse bewegingen zijn ook onmogelijk om volledig te compenseren met beeldstabilisatie, omdat het gezichtspunt van de camera verandert. Terwijl objecten in de nabije omgeving veel bewegen, doen de objecten in de achtergrond dit veel minder.
Het tweede type bewegingen, die een veel grotere impact op de waargenomen shake in een video hebben, zijn de rotatie (of draai) bewegingen. Schokken zo klein als 0,1 graad zijn reeds duidelijk zichtbaar in een video die niet gestabiliseerd is. Omdat het gezichtspunt van de camera niet verandert wanneer rotatiebewegingen zich voordoen, worden de objecten in de voor- en achtergrond dezelfde hoeveelheid verplaatst en vervormd en dus is het mogelijk deze draaibewegingen te compenseren.
De toestel keuze
De ZeroShake stabilisatie technologie kan worden toegepast op zowel optische en elektronische beeldstabilisatie. Bij een smartphone ontbreekt het echter aan de ruimte voor een fatsoenlijk optisch systeem. Om de ZeroShake app te maken, begon de zoektocht naar een toestel dat de volgende specificaties had;
- On-board accelerometer, gyroscoop en magnetometer; om de bewegingen van het toestel nauwkeurig vast te leggen.
- Een goede kwaliteit camera, geschikt voor het opnemen van tenminste HD-kwaliteit.
- Een snelle GPU en CPU, om de real-time verwerking van de frames te kunnen doen en om de beweging filter te kunnen draaien.
- Heeft een solide ontwikkelplatform.
- Staat aan of nabij de top in verkochte aantallen; er dient een stabilisatie profiel voor de camera van het apparaat te worden gecreëerd. Hiervoor zijn vele experimenten nodig, wat veel tijd in beslag neemt.
Er werd besloten om de eerste versie van de ZeroShake applicatie voor de iPhone 4S te ontwikkelen, daar het in die tijd een van slechts een zeer beperkt aantal apparaten was dat aan alle eisen voldeed. Tijdens de ontwikkeling werd de iPhone 5 uitgebracht en er zijn vervolgens nieuwe stabilisatie-profielen voor dat model ontwikkeld.
Het vastleggen van beweging data
Een belangrijk onderdeel om een opname adequaat te stabiliseren is de mogelijkheid beweging en oriëntatie data zeer nauwkeurig te verkrijgen. Het iOS-platform biedt een Core Motion kader dat een sensor fusie filter gebruikt om de gesamplede gegevens van de accelerometer, gyroscoop en magnetometer samen te kunnen voegen tot een stabiele oriëntatie waarde van het apparaat, vanuit verschillende referentiepunten en beschreven in ofwel graden, vectoren of quaternionen. Het probleem met eerdergenoemd filter is dat het niet alleen wordt beïnvloed door rotatiebewegingen, maar ook door zijwaartse bewegingen. Snelle zijwaartse bewegingen worden weergegeven als kleine rotaties in het Core Motion filter.
Voor onze beeldstabilisatie toepassing was dit niet acceptabel, dus moest een andere oplossing worden gevonden. Het samplen van uitsluitend roterende bewegingen via de gyroscoop werkte niet voor ons doel aangezien gyroscopen een vertekening geven dat zich uit in drift, wanneer de gegevens worden geïntegreerd in een oriëntatie. Dit is niet van belang voor andere stabilisatie technieken, waarbij de oriëntatie van het apparaat niet bekend hoeft te zijn. Die systemen stabiliseren slechts de snelle rotaties, en hoeven niet bij te houden in welke richting het apparaat wordt gewezen. Maar bij ZeroShake, wordt de gebruiker de stand van het apparaat getoond, zodat alle bewegingen binnen vastgestelde grenzen kunnen worden gecompenseerd, is dit van groot belang, alsmede om toekomstige functies, zoals soepele panning en voorgeprogrammeerde panning correct te laten functioneren.
Dus werd een op maat ontworpen complementaire beweging filter ontwikkeld. Eentje die nauwkeurige gegevens over de stand van het apparaat biedt, maar met minimale drift en niet wordt gecorrumpeerd door zijwaartse bewegingen.
De beweging data wordt beschreven als een quaternion, met het midden van het ZeroShake doelgebied als de referentie. Dit maakt het mogelijk om het apparaat in alle posities te draaien, zonder dat de assen in de war geraken. Omdat het referentiepunt bekend is, kan nauwkeurig worden gestabiliseerd in alle drie draairichtingen tegelijk.
Het stabiliseren van de video frames
Een complexe algoritme wordt gebruikt om te berekenen wanneer en hoeveel stabilisatie vereist is en wanneer het referentiepunt opnieuw dient te worden bepaald. De OpenGL en GPUImage kaders worden gebruikt om de frames te verplaatsen en de vorm aan te passen. GPUImage zorgt voor veel snellere beeldverwerking direct via de GPU. Dit stelt ons in staat om niet alleen de ZeroShake gebruikersinterface markeringen op het scherm in real-time weer te geven, maar ook om een volledig gestabiliseerde preview te tonen.
Er zijn dienen verschillende stappen te worden genomen om een video frame met het referentiepunt overeen te laten komen; Het eenvoudigste is de rotatie van het gehele beeld. Draai het toestel rechtsom, en het beeld moet tevens in zijn geheel worden geroteerd om die beweging te compenseren. Evenzo kunnen zijwaartse of op- en neerwaartse draai bewegingen worden gecompenseerd door translatie van het beeld. Als de camera naar rechts draait, verplaatst het opgenomen object naar links. Verschuiving (translatie) van het frame naar rechts brengt je je weer op referentie. Hoewel het gezichtspunt van de camera niet verandert met draaiende bewegingen, doet het perspectief dit wel. De meeste beeldstabilisatie technologieën doen geen moeite dit te compenseren, omdat ze alleen kleine, snelle bewegingen stabiliseren. ZeroShake zorgt voor een veel grotere stabilisatie, alsmede langzame bewegingen. Dientengevolge is de verandering van het perspectief duidelijk zichtbaar, indien dit niet wordt gecorrigeerd. Doordat de oriëntatie van het toestel bekend is, kunnen we een waarde in de rotatie matrix voor het perspectief voegen om hier rekening mee te houden. Om nauwkeurig te berekenen wat de benodigde translatie, rotatie en perspectief kromming is, moeten het exacte gezichtsveld van de camera alsmede de opnameresolutie bekend zijn.
Het ‘rolling shutter’ effect
De meeste standaard digitale camera’s en alle smartphones hebben een CMOS beeld sensor. Deze beeldsensor is klein, goedkoop, en levert een goede kwaliteit beeld. Anders dan een CCD sensor, die het gehele frame in één momentopname vangt, leest een CMOS sensor het beeld rij voor rij. Het heeft een zogenaamde rollende sluiter. Dit ‘rolling shutter’ effect maakt het onmogelijk om de vastgelegde beweging van het toestel op één bepaald moment met alle gebieden in een video frame overeen te laten komen. In plaats daarvan moet elke rij in het frame worden gecompenseerd volgens de precieze bewegingen van het apparaat die zich tijdens de registratie van die rij voordeden. Als zodanig is een tabel gemaakt die bepaalt hoe een beeld vervormd dient te worden. Een vertraging tussen de bewegingsgegevens en de onderste rij van het frame wordt bepaald om deze overeen te laten komen en afhankelijk van de snelheid van de sluiter van de sensor worden de individuele vertragingen bepaald voor de andere beeld rijen.
Het afstemmen van de timing van de beweging gegevens en beeldgegevens
Natuurlijk is het zeer belangrijk dat de beweging gegevens van het toestel worden gebruikt die exact overeenkomen met het tijdstip waarop een rij van het beeld is vastgelegd. Daarom draait onze complementaire bewegingsfilter op een zeer hoge frequentie, en wordt het uiterste van de sensoren en de CPU gevraagd om zoveel samples per seconde te verwerken. De twee beweging samples die vlak voor en na het eigenlijk tijdstip van de opname van de rij in het het frame liggen worden bepaald en met behulp van een slerp methode wordt de meest waarschijnlijke oriëntatie op dat precieze moment berekend.
De discrepantie tussen het tijdstip van beweging en de opname van het frame wordt verder beïnvloed door de belichtingstijd van het frame. Vandaar dat er een algoritme is ontworpen om dit in acht te nemen , waardoor de toegepaste vertraging voortdurend aan het omgevingslicht wordt aangepast.
Omdat het onmogelijk is om toekomstige bewegingen van een toestel vast te leggen, is een kleine vertraging ingebouwd in de preview, die nagenoeg onopgemerkt blijft door de gebruiker. Dit maakt het mogelijk voor het systeem om frames en beweging gegevens te koppelen volgens bovenstaande beschrijving, terwijl een volledig gestabiliseerd beeld op het scherm wordt weergegeven.
Verwerking van de opname
Omdat frames worden bewogen, vervormd en veranderd tijdens het stabilisatieproces, zullen er zwarte randen en hoeken ontstaan in een gestabiliseerde video. Om dit te voorkomen, worden de frames bijgesneden. Dat maakt dat het lijkt dat het beeld iets is ingezoomd. Bijsnijden kan echtertot een minimum beperkt blijven, omdat de maximale hoeken van toegestane tril- en zwenk bewegingen bekend zijn, waardoor het maximaal benodigde bijsnijden kan worden berekend.
Voor een snellere verwerking van de nabewerking filters en effecten en het delen van video’s via internet, wordt de resolutie van de video verlaagd. Voor een video die in de Filmrol van het toestel wordt opgeslagen blijft de resolutie ongewijzigd. Desalniettemin zijn we erin geslaagd om de bestands-grootte van de HD en FullHD opgenomen beelden te verkleinen met een factor 3 zonder een significant verlies in beeldkwaliteit.
Wat te verwachten in de nabije toekomst
ZeroShake is afhankelijk van de accuraatheid van meerdere parameters die de camera(‘s) in het toestel, de beweging-filter en de koppeling met de vastgelegde beeldgegevens beschrijven. Als gevolg hiervan zijn er meer dan 20 parameters in te stellen voor elke camera, en dat voor iedere resolutie. Het is een moeizaam en lang proces om de optimale waarden te verkrijgen, daar de verandering van één de andere beïnvloedt. Als zodanig is er zeker ruimte voor verbetering in de stabilisatie in de huidige versie van de ZeroShake toepassing.
ZeroShake Versie 1.x zorgt voor volledige stabilisatie, zolang de gebruiker zijn schudden of zwaaien binnen de ingestelde waarden houdt. In de toekomst zullen we een versie ontwikkelen die enkele van de andere functies implementeren die dankzij ZeroShake mogelijk zijn, zoals soepele panning en voorgeprogrammeerde panning.
Als je een idee met ons wenst te delen over hoe de ZeroShake toepassing nog beter kan worden gemaakt, dan vernemen we dat graag via het formulier op de suggesties pagina.