Je leest:

Onscherpe foto’s worden weer scherp

Onscherpe foto’s worden weer scherp

Een veelbelovende sneakpreview van Adobe

Auteur: | 19 oktober 2011

In een sneakpreview op hun jaarlijkse congres liet Adobe (de maker van onder andere Photoshop) een knap staaltje fotobewerking zien. Van een bewogen foto maakten ze met een paar klikken weer een mooi scherp plaatje. Hoe werkt dat?

Veel ‘Ooohs’ en ‘Aaahs’ tijdens een sneak preview op het congres Adobe MAX 2011 dit jaar. De makers van – onder andere – Photoshop gaven een voorproefje van een nieuwe truc in fotobewerking: men neme een bewogen foto, klikt op een paar knoppen en voilà, daar heb je weer een scherp plaatje!

Wat Adobe – globaal gezien – doet, is proberen te achterhalen hoe het plaatje is vervormd en dan vanaf het onscherpe plaatje terugrekenen. De strategie is bij wetenschappers wel bekend, maar hoe kun je het best de vervorming bepalen en hoe reken je dan terug? Dat probleem houdt wetenschappers al jaren bezig.

Van scherp naar onscherp

Laten we bij het begin beginnen. Bij de genoemde methode – vervorming achterhalen en dan terugrekenen – ga je ervan uit dat een onscherp plaatje de combinatie is van een scherp plaatje en een ‘blur’. Preciezer gezegd, een onscherp plaatje is de convolutie van een scherp plaatje met een blur kernel (een ‘onscherpmaakfilter’). Dat klinkt misschien ingewikkeld, maar het valt mee.

We beginnen met het oorspronkelijke, scherpe plaatje A en een ‘blur kernel’ B. A is – zoals elk plaatje – niets anders dan een matrix van getallen, waarbij elk getal de (kleur)waarde van een pixel weergeeft. B is ook een matrix van getallen, maar dit noemen we geen pixels maar coëfficiënten.

In het midden een gewoon, scherp plaatje (A), waarbij je ziet dat de pixels in feite getallen zijn. De kernel zie je rechts (B). In dit geval is de kernel drie bij drie, maar hij kan ook groter zijn.

Hoe ontstaat hieruit een onscherp plaatje? Daarvoor leggen we B op A, zodanig dat het midden van B precies op een pixel van A ligt. Nu gaan we de ‘response’ uitrekenen: R = b1•a1 + b2•a2 + b3•a3 + b4•a4 + b5•a5 + b6•a6 + b7a7 + b8•a8 + b9•a9. We vermenigvuldigen elke pixel van A dus met de coëfficiënt die erop ligt, en tellen alle uitkomsten bij elkaar op. De totaaluitkomst R zetten we steeds in een nieuw plaatje C, op de plek die overeenkomt met het midden van de kernel. Vervolgens schuiven we B naar de volgende pixel van A en rekenen daar de R uit. Ook die R zetten we weer in C. Op deze manier wordt C gevuld: het wordt de convolutie van A en B.

Zoals je misschien al ziet, ligt het aan de getallen in de kernel hoe het nieuwe plaatje C eruit komt te zien. Als je de middencoëfficiënt in B de waarde 1 geeft en de rest op 0 zet, dan gebeurt er bijvoorbeeld helemaal niets en is C gelijk aan A. En als alle coëfficiënten 1/9 zijn, dan wordt de nieuwe pixel het gemiddelde van de negen waarden en krijg je een vervaagd beeld, zoals in de figuur hieronder. Zo kan een kernel dus een onscherp plaatje veroorzaken.

Convolutie met een kernel betekent in feite dat je een formule (functie) loslaat op elke pixel van het plaatje. De kernel wordt daarom ook wel de ‘point spread function’ (PSF) genoemd. De PSF vertelt hoe elke pixel (point_) wordt ‘uitgesmeerd’ (_spread). Oftewel, hoe plaatje A is vervormd tot C. Wetenschappers willen die functie dan ook graag hebben, want dan heb je de vervorming in handen en kun je gaan terugrekenen.

En weer terug

Het terugrekenen noemt men deconvolutie. Op zichzelf is dat wel te doen, maar de PSF is meestal onbekend. De foto kan onscherp zijn omdat jij – als fotograaf – beweegt, het voorwerp beweegt, de lens niet scherp genoeg stelt, enzovoort. De PSF ziet er in alle gevallen anders uit. Ook kunnen er meerdere typen blur tegelijk in het spel zijn (de camera én het gefotografeerde voorwerp bewegen bijvoorbeeld), wat het nog ingewikkelder maakt.

In de ruimte

Soms is de PSF wel bekend of relatief makkelijk te achterhalen. Dat is bijvoorbeeld het geval bij astronomische foto’s (van sterren en planeten). Bij zulke foto’s weet je dat alle objecten die erop staan eigenlijk punten hadden moeten zijn. Hierdoor kun je de PSF vaak bepalen op basis van de vervorming die je op de foto ziet.

Het scherpe plaatje terugrekenen zonder dat je de PSF weet, heet blind deconvolution. Het is een heel moeilijke opgave, omdat je twee onbekenden hebt, namelijk het scherpe plaatje en de PSF. Je probeert als het ware de som a x b = c op te lossen en je weet alleen c. Er zijn dan meerdere oplossingen die wiskundig gezien kloppen. In dit geval er zijn meerdere combinaties scherp plaatje_/_PSF die hetzelfde onscherpe plaatje opleveren. Maar je wilt slechts één specifieke combinatie, want je wilt dat het scherpe plaatje ook echt het oorspronkelijke plaatje is.

In Photoshop?

Wetenschappers werken al jaren aan blind deconvolution, waaronder dus ook de mensen van Adobe. Omdat het zo’n lastig probleem is, bestaat er (nog) niet één perfecte oplossing. Elke wetenschapper bedenkt weer iets nieuws of net weer een andere variatie op een bestaande methode.

De techniek die Adobe in de sneak preview demonstreert, ziet er in ieder geval veelbelovend uit. In een blog is te lezen dat ze gebruikmaken van scherpe overgangen in een plaatje, zoals de randen van een object (edges). Door in te schatten hoe die oorspronkelijk hadden moeten lopen, kun je bepalen hoe ze vervormt zijn. En die informatie kun je gebruiken om de PSF van het hele plaatje te berekenen.

Bij bovenstaand plaatje werkt de methode van Adobe erg goed.

Nadeel van Adobe’s techniek is dat de onscherpe foto dus wel een aantal scherpe overgangen moet bevatten, anders werkt het niet goed. De onderzoekers zijn nu bezig zulke belemmeringen weg te nemen. Pas wanneer zij tevreden zijn, zal het gereedschap in Photoshop verschijnen. Maar geef de moed niet op: de inpaint-tool werd namelijk ook toegevoegd nadat het in een sneakpreview (zie hieronder) gedemonstreerd was.

Bronnen

  • Fergus et al., ‘Removing camera shake from a single photograph’, In ACM SIGGRAPH 2006 Papers (SIGGRAPH ’06). ACM, New York, USA, 787-794. doi:10.1145/1179352.1141956
  • Shan et al., ‘High-quality motion deblurring from a single image’, ACM Trans. Graph. 27, 3, Article 73 (August 2008), 10 pages. doi:10.1145/1360612.1360672

Lees meer over beeldverwerking op Kennislink:

Oeps: Onbekende tag `feed’ met attributen {"url"=>"https://www.nemokennislink.nl/kernwoorden/beeldverwerking/photoshop/index.atom?m=of", “max”=>"7", “detail”=>"minder"}

Dit artikel is een publicatie van NEMO Kennislink.
© NEMO Kennislink, sommige rechten voorbehouden
Dit artikel publiceerde NEMO Kennislink op 19 oktober 2011

Discussieer mee

0

Vragen, opmerkingen of bijdragen over dit artikel of het onderwerp? Neem deel aan de discussie.

NEMO Kennislink nieuwsbrief
Ontvang elke week onze nieuwsbrief met het laatste nieuws uit de wetenschap.