diffuus of verscherpen
Diffusie is een familie van fysieke processen waarbij deeltjes bewegen en zich geleidelijk met de tijd verspreiden, vanuit een bron die ze genereert. Bij beeldverwerking vindt diffusie meestal op twee plaatsen plaats:
-
diffusie van fotonen door lensglas (blur) of vochtige lucht (nevel),
-
diffusie van pigmenten in natte inkten of aquarellen.
In beide gevallen maakt diffusie het beeld minder scherp door deeltjes te “lekken” en lokale variaties glad te strijken.
De module diffuus of verscherpen gebruikt een gegeneraliseerd fysiek model om verschillende soorten diffusie te beschrijven, en kan door beeldmakers worden gebruikt om diffusieprocessen te simuleren of terug te draaien.
Omdat het een zeer technische module is, zijn er verschillende presets beschikbaar om het gebruik voor verschillende doeleinden te demonstreren.
Diffusie kan worden verwijderd om:
-
herstel het originele beeld van sensoren met een anti-aliasingfilter of verzacht de onscherpte die wordt veroorzaakt door de meeste demozaïekalgoritmen (gebruik de voorinstelling verscherp sensor demozaïek en verplaats de module vóór de ingaand kleurprofiel-module in de pijplijn),
-
omgekeerde statische lensvervaging/onscherpte (gebruik een van de lens deblur-presets),
-
atmosferische nevel verwijderen (gebruik de nevel verwijderen-voorinstelling),
-
voeg extra scherpte toe voor een betere leesbaarheid (gebruik de lokaal contrast voorinstelling).
Merk op dat bewegingsonscherpte niet ongedaan kan worden gemaakt door het diffusieproces ongedaan te maken, omdat ze niet diffuus van aard zijn.
Diffusie kan worden toegevoegd om:
-
maak een gloei- of Orton-effect (gebruik de gloei-preset),
-
vul ontbrekende of beschadigde delen van een afbeelding (gebruik de vul hooglichten voorinstelling),
-
ontruis op een randbehoudende manier (gebruik een van de ruisreductie-voorinstellingen)
-
een oppervlaktevervaging toepassen (gebruik de voorinstelling oppervlakvervaging).
Omdat het proces fysiek is, kunnen zelfs ongewenste effecten voor creatieve doeleinden worden gebruikt. Je kan bijvoorbeeld:
-
lijntekening of aquarel simuleren (gebruik de voorinstellingen simuleer lijntekening en simuleer aquarel),
-
creëer willekeurige patronen en texturen door ruis te vergroten (na verloop van tijd, met iteraties, zal ruis contact maken met buren om willekeurige stippen te creëren).
Opmerking: Deze module vergt veel rekenkracht, omdat het in feite een anisotrope, meerschalige partiële differentiaalvergelijkingsoplosser is. De looptijd van de module neemt toe met het aantal iteraties en OpenCL wordt daarom sterk aanbevolen. Sommige “snelle” voorinstellingen zijn ook beschikbaar voor gebruik op systemen zonder OpenCL.
🔗concepten
🔗tijd
Diffusie is een tijdsafhankelijk proces: hoe meer tijd het heeft, hoe verder de deeltjes zich kunnen verspreiden. In deze module wordt tijd gesimuleerd met behulp van het aantal iteraties (het aantal keren dat het algoritme boven op zichzelf draait). Meer iteraties kunnen de reconstructie (vervaging wegwerken, ruisreductie, nevel verwijderen) nauwkeuriger maken als deze correct is ingesteld, maar kan er ook voor zorgen dat deze degenereert.
🔗richting
Natuurlijke diffusie vindt meestal plaats van punten met een hoog potentieel (hoge energie of hoge concentratie van deeltjes) naar punten met een laag potentieel (lage energie of lage concentratie van deeltjes). In een afbeelding betekent dit dat diffusie altijd plaatsvindt van de helderste pixels naar de donkerste.
Deze specifieke implementatie kan natuurlijke diffusie simuleren, met behulp van wat een isotrope diffusie wordt genoemd (alle richtingen hebben hetzelfde gewicht, zoals warmtediffusie), maar kan ook een gewogen richting evenwijdig aan de gradiënten forceren (diffusie over objectranden forceren en spookranden creëren) , of een gewogen richting loodrecht op de gradiënten, isofoot genoemd (dwingt diffusie binnen randen te houden, zoals in een druppel waterverf). Het relatieve gewicht van elke richting (gradiënt en isofiet) is door de gebruiker gedefinieerd en kan worden gevonden in de sectie richting van de module.
🔗snelheid
Afhankelijk van hoe vloeibaar de omgeving is, kunnen deeltjes min of meer vrij bewegen en dus min of meer snel. De diffusiesnelheid kan worden ingesteld in de sectie snelheid van de module.
Bij het uitvoeren van reconstructies (ruisreductie, verscherpen, nevel verwijderen) is het raadzaam om kleinere snelheden te gebruiken voor een betere nauwkeurigheid. Dit voorkomt numerieke overshoots (en dus degeneratie van de oplossing) en kan meer iteraties vereisen. Voor kleine aantallen iteraties kunnen hogere snelheden worden gebruikt. Merk op dat grote vervagingen veel iteraties nodig hebben voor een goede reconstructie, dus de snelheid moet worden aangepast om te voorkomen dat de oplossing degenereert.
Alle snelheden worden opgeteld (eerste tot vierde orde), en de sommen “eerste orde + tweede orde
” en “derde orde + vierde orde
” mogen nooit groter zijn dan ±100%, tenzij u glitch art wilt produceren.
🔗schaal
Natuurlijke diffusie wordt verondersteld alleen te gebeuren met de dichtstbijzijnde naburige coördinaten. Dat wil zeggen, bij elke iteratie mag elke pixel alleen interactie hebben met zijn 9 dichtstbijzijnde buren.
Hier versnellen we de zaken een beetje om tijd te besparen en het meerschalige wavelets-schema van de contrast equalizer module opnieuw te gebruiken, zodat we op verschillende schalen kunnen diffunderen. De maximale diffusieschaal wordt gedefinieerd door de parameter straalbereik.
Ongeacht de diffusie, kan jemet een scherpte-parameter de details op elke schaal vergroten of verkleinen, net zoals de spline-instellingen van de contrast-equalizer. Samen met de randgevoeligheid schuiregelaar biedt dit dezelfde functies als de contrast equalizer module (luma en rand tabs), maar in een scene-gerefereerde RGB-ruimte.
🔗module instellingen
🔗kenmerken
- iteraties
- Het aantal keren dat het algoritme bovenop zichzelf moet draaien. Hoge waarden vertragen de module, maar maken nauwkeurigere reconstructies mogelijk, op voorwaarde dat de diffusiesnelheden laag genoeg zijn.
- centrale straal
- De hoofdschaal van de diffusie. Nul zorgt ervoor dat de diffusie zwaarder werkt op fijne details (gebruikt voor onscherpte en ruisonderdrukking). Waarden die niet nul zijn, definiëren de grootte van details die sterk verspreid moeten worden (gebruikt om het lokale contrast te vergroten).
- straal span
- Hiermee kan je de band met detailradii selecteren om op te werken, rond de centrale straal. De diffusiespanwijdte definieert een reeks detailschalen (tussen ‘center - span’ en ‘center + span’) waarbinnen de diffusie wordt beperkt. Hoge waarden diffunderen over een grote band van stralen, ten koste van rekentijd. Lage waarden diffunderen dichter rond de centrale straal. Als je van plan bent om onscherpte te verwijderen, moet de straal ongeveer de breedte van uw lensonscherpte zijn en moet de centrale straal nul zijn. Als je van plan bent om het lokale contrast te vergroten, maar de scherpte of ruis niet wilt beïnvloeden, moet de radiusspanwijdte 3/4 van uw centrale radiusmaximum zijn.
De stralen worden uitgedrukt in pixels van de afbeelding met volledige resolutie, dus instellingen voor kopiëren en plakken tussen afbeeldingen met verschillende resoluties kunnen tot licht verschillende resultaten leiden, behalve voor de scherpte op pixelniveau.
Voor elektrotechnici is hier een banddoorlaatfilter in de wavelets-ruimte ingesteld, waarbij gebruik wordt gemaakt van een gaussiaans frequentievenster dat is gecentreerd op de ‘centrale straal’ met een uitval (standaarddeviatie) van ‘radius bereik’. Wavelet-schalen zijn analoog aan harmonische frequenties en elke wavelet-schaal definieert de straal van de details waarop moet worden gereageerd.
🔗snelheid (verscherpen ↔ diffuus)
In de volgende bediening voegen positieve waarden diffusie toe en negatieve waarden maken diffusie ongedaan (ofwel verscherpen) en nul doet niets.
- 1e orde snelheid (gradiënt)
- De diffusiesnelheid van de laagfrequente wavelet lagen in de richting gedefinieerd door de instelling van de 1e orde anisotropie.
- 2e orde snelheid (laplacian)
- De diffusiesnelheid van de laagfrequente waveletlagen in de richting gedefinieerd door de instelling 2e orde anisotropie.
- 3e orde snelheid (gradiënt van laplaciaan)
- De diffusiesnelheid van de hoogfrequente waveletlagen in de richting gedefinieerd door de instelling van de 3e orde anisotropie.
- 4e orde snelheid (laplacian of laplacian)
- De diffusiesnelheid van de hoogfrequente waveletlagen in de richting gedefinieerd door de instelling van de 4e-orde anisotropie.
🔗richting
Bij de volgende bediening geven positieve waarden zorgen dat diffusie randen vermijd (isofoto’s), negatieve waarden zorgen dat de diffusie de gradiënten meer nauwlettend volgen en nul heeft op beide evenveel invloed (isotroop).
- 1e orde anisotropie
- De diffusierichting van de laagfrequente wavelet lagen ten opzichte van de oriëntatie van de gradiënt van de laagfrequente (1e orde snelheid instelling)
- 2e orde anisotropie
- De diffusierichting van de laagfrequente waveletlagen ten opzichte van de oriëntatie van de gradiënt van de hoogfrequente (2e orde snelheid instelling).
- 3e orde anisotropie
- De diffusierichting van de hoogfrequente waveletlagen ten opzichte van de oriëntatie van de gradiënt van de laagfrequente (_3e orde snelheid instelling).
- 4e orde anisotropie
- De diffusierichting van de hoogfrequente waveletlagen ten opzichte van de oriëntatie van de gradiënt van de hoogfrequente (4e orde snelheid instelling).
🔗rand beheer
- scherpte
- Een versterking toepassen op wavelet details, ongeacht hierboven ingestelde eigenschappen. Nul doet niets, positieve waarden verscherpen, negatieve waarden vervagen. Dit is vooral handig als aanpassingsvariabele bij uitbloeien of vervagen, om wat scherpte te behouden terwijl er een gloed rond randen wordt toegevoegd. Het is niet aan te raden om dit alleen voor het slijpen te gebruiken, aangezien er met deze instelling niets is dat halo’s of franjes voorkomt.
- randgevoeligheid
- Pas een boete toe op de diffusiesnelheden wanneer randen worden gedetecteerd. Deze detectie gebruikt de lokale variantie rond elke pixel. Nul schakelt de straf uit, hogere waarden maken de straf sterker en gevoeliger voor randen. Verhoog als je randartefacten zoals franjes en halo’s opmerkt.
- rand drempel
- Definieer een variantiedrempel die vooral van invloed is op gebieden met een lage variantie (donkere of wazige gebieden of vlakke oppervlakken). Positieve waarden verhogen de straf voor gebieden met een lage variantie, wat goed is voor het verscherpen of vergroten van het lokale contrast zonder zwarten te verpletteren. Negatieve waarden verminderen de straf voor gebieden met een lage variantie, wat goed is voor ruisonderdrukking of vervaging met een maximaal effect op zwarte en wazige gebieden.
🔗diffusieruimtelijkheid
- luminantie maskeerdrempel
- Deze instelling is handig als je markeringen in de verf wilt aanbrengen. Voor waarden groter dan 0% zal de diffusie alleen plaatsvinden in gebieden met een luminantie groter dan deze instelling. Merk op dat in deze regio’s Gauss-ruis wordt toegevoegd om deeltjes te simuleren en de in-painting te initialiseren.
🔗werkvolgorde
De grootste moeilijkheid met deze module is dat hoewel de output enorm kan variëren, afhankelijk van de inputparameters, deze parameters geen intuïtieve link hebben met het dagelijks leven. Gebruikers zullen waarschijnlijk overweldigd worden, tenzij ze al bekend zijn met Fourier partiële differentiaalvergelijkingen. Deze sectie stelt enkele manieren voor om deze module te benaderen zonder de last van de onderliggende theorie.
🔗globaal advies
Als je van plan bent jouw afbeelding onscherp te maken met behulp van deze module, begin dan altijd met het correct corrigeren van eventuele chromatische aberraties en ruis in de afbeelding, aangezien de onscherpte deze artefacten kan vergroten. Het is ook belangrijk dat je geen afgekapte zwarte pixels in je afbeelding hebt. Deze kunnen worden gecorrigeerd met de zwartniveaucorrectie van de belichting module.
Aangezien het op aparte RGB-kanalen werkt, is het beter deze module toe te passen na kleurkalibratie, zodat je begint met een volledig neutraal, witgebalanceerd, invoerbeeld. Merk op dat het verhogen van lokaal contrast of scherpte ook zal leiden tot een licht kleurcontrast en verzadiging, wat meestal een goede zaak is. Aangezien het een op variaties gebaseerde regularisatie gebruikt om randen te detecteren, is het ook beter om deze module voor een niet-lineaire operatie te plaatsen.
🔗beginnend met voorinstellingen
De meegeleverde voorinstellingen zijn door de ontwikkelaar afgestemd en getest op een reeks afbeeldingen voor typische doeleinden. De gemakkelijkste manier is om gewoon te beginnen met de voorinstellingen en ze vervolgens naar behoefte aan te passen:
-
als het effect te sterk lijkt, verminder dan het aantal iteraties,
-
als er randartefacten verschijnen, verhoog dan de randgevoeligheid,
-
als de vervaging verwijderen invloed begint te hebben op geldige wazige delen (bokeh), verklein dan de straal,
-
als onscherpte correct lijkt in heldere gebieden, maar overdreven in donkere gebieden, verhoog dan de randen drempel,
-
als de vervaging van zwarte pixels wordt verwijderd, verlaagt u de zwartniveaucorrectie in de belichtings-module,
-
verfijn de scherpte naar jouw smaak.
🔗starten bij het begin
De standaardinstellingen van de module zijn volledig neutraal en doen niets aan jouw afbeelding. De idee van de module is dat elke volgorde de textuur van de afbeelding op een bepaalde manier beïnvloedt.
Begin met het afstemmen van de parameters van de eerste orde (snelheid en anisotropie) om een eerste basis te krijgen. Pas vervolgens de straal aan. Dit heeft invloed op grovere texturen (vervagen of verscherpen). Onthoud dat de eerste orde inwerkt op de lage frequenties van de wavelet-schaal en een richting volgt die evenwijdig of loodrecht staat op de gradiënt van de lage frequenties.
Begin vervolgens met het afstemmen van de parameters van de tweede orde (snelheid en anisotropie). De tweede orde werkt ook op de lage frequenties van de wavelet-schaal, maar deze keer volgt een richting evenwijdig aan of loodrecht op de gradiënt van de hoge frequenties, die ofwel de richting van maximale scherpte of van ruis kan zijn. Dit kan worden gebruikt om ruis te verminderen (met behulp van de tweede orde in diffusiemodus, met positieve waarden) wanneer u de eerste orde in verscherpingsmodus gebruikte (met negatieve waarden).
Deze twee stappen kunnen worden uitgevoerd op de uitgezoomde afbeelding. Onthoud dat, hoewel er grote zorg is besteed om het visuele resultaat van het algoritme redelijk schaalinvariant te maken, het voorbeeld alleen exact zal zijn als er 1:1 wordt ingezoomd. Alles wat op pixelniveau (straal < 2px) gebeurt, is in ieder geval niet zichtbaar voor zoomniveaus lager dan 50%.
Op dit punt wil je misschien de randgevoeligheid aanpassen om voor eventuele randartefacten te zorgen. In theorie zorgt diffunderen in de isofotische richting ervoor dat de diffusie binnen de randen wordt beperkt, maar dit is niet voldoende wanneer hoeken en scherpe convexe vormen in het beeld aanwezig zijn.
Wanneer de randgevoeligheidsregeling is aangepast om bevredigende resultaten te produceren, wordt het beeld meestal vrij zacht. In de meeste gevallen zal het op dit punt nodig zijn om het aantal iteraties te verhogen om te compenseren. Dit gaat gepaard met een prestatiestraf, dus ga voorzichtig om met de afweging tussen prestaties en kwaliteit, afhankelijk van jouw hardware. Als je het aantal iteraties niet kan verhogen, moet je de diffusiesnelheid verhogen.
De laatste stap is het verfijnen van de derde en vierde orde, die zorgen voor de hoge frequenties van elke wavelet-schaal. Je zult veel voorzichtiger moeten zijn met deze instellingen dan voor de eerste en tweede bestelling, omdat ze ervoor kunnen zorgen dat de ruis heel snel opblaast.
De derde orde volgt de gradiënt of isofote richting van de laagfrequente laag, en kan dus worden gebruikt om de hoogfrequente diffusie te leiden in een richting die waarschijnlijker legitiem is met betrekking tot echte randen (en minder geneigd om ruis op te vangen).
De vierde orde volgt de gradiënt of isofote richting van de hoogfrequente laag en heeft meer kans om ruis op te vangen. Diffuus op de vierde orde is de beste manier om ruis te verminderen zonder de scherpte al te veel aan te tasten, hetzij als een op zichzelf staande ruisonderdrukking, hetzij als een regularisatiestap in een onscherpteproces.
🔗meerdere instanties gebruiken voor beeldreconstructie
Ruis na filtering kan baat hebben bij introductie van een diffusieproces – dit kan worden toegepast als een extra stap na de ruisreductie (profiel) module.
Omgekeerd kunnen de volgende optische problemen baat hebben bij reconstructie door het diffusieproces ongedaan te maken:
-
onscherpte veroorzaakt door een laagdoorlaatfilter (LPF) van een sensor en/of anti-aliasing uitgevoerd door de demozaïek module,
-
statische lensvervaging,
-
nevel/mist,
-
lichtverspreiding (met een te grote diffusor), wat leidt tot gelijkmatige verlichting en gebrek aan lokaal contrast op het onderwerp.
Hoewel meer dan één van deze problemen tegelijkertijd van invloed kan zijn op dezelfde afbeelding, is het beter om te proberen ze afzonderlijk op te lossen door meerdere exemplaren van de module te gebruiken. Zorg er daarbij voor dat de problemen van grof naar fijn worden gecorrigeerd, en dat ruisonderdrukking altijd als eerste plaatsvindt. Dat wil zeggen, jouw instanties zouden in de volgende pipe-volgorde moeten verschijnen:
-
ruisreductie,
-
lokaal contrast verbeteren,
-
nevel verwijderen,
-
lensvervagingscorrectie,
-
sensor en demozaïekcorrectie.
Beginnen met de reconstructies op grovere schaal vermindert de kans op het introduceren of vergroten van ruis bij het uitvoeren van de reconstructies op fijnere schaal. Dit is niet intuïtief omdat deze processen niet in deze volgorde plaatsvinden tijdens de vorming van het beeld. Om dezelfde reden moet ruisonderdrukking altijd plaatsvinden vóór elke poging tot verscherping of verhoging van de scherpte.
🔗opmerkingen en waarschuwingen
Hoewel deze module is ontworpen om schaalinvariant te zijn, kan de uitvoer alleen worden gegarandeerd bij 100% zoom en export van hoge kwaliteit of volledige grootte. Resultaten bij lagere zoomniveaus of exportafmetingen kunnen al dan niet overeenkomen met jouw verwachtingen.
Probeer bij het instellen van een onscherpte-algoritme in gedachten te houden dat veel van de beste foto’s in de geschiedenis van de fotografie zijn gemaakt met lenzen die in de verste verte niet zo scherp waren als de lenzen die tegenwoordig beschikbaar zijn. Hoewel de huidige trend is om steeds scherpere lenzen te bouwen en te verkopen en software waanzinnige hoeveelheden verscherping bovenop te laten toepassen, leidt deze mode niet tot betere beelden en maakt het retoucheren vervelender. Zachte focus en een beetje onscherpte hebben ook enkele poëtische voordelen, die chirurgisch gezuiverde HD-beelden mogelijk niet kunnen overbrengen.
Opgemerkt moet worden dat globaal contrast (met behulp van eenvoudige tooncurven of zwart/wit-niveaus) ook onze perceptie van scherpte beïnvloedt, die heel anders is dan optische scherpte (optische resolutie). Menselijke ogen zijn alleen gevoelig voor lokaal contrast, dat kan komen door optische scherpte (bijv. afwezigheid van diffusie - dunne randen) en door versterkte toonovergangen. Als er een globale toonmapping aanwezig is om het contrast te verhogen, ziet het beeld er scherper uit. Als een toonmapping wordt gebruikt om het contrast te verlagen, ziet het beeld er waziger uit. In geen van deze gevallen worden de werkelijke randen van objecten op enigerlei wijze beïnvloed, en de perceptuele gevolgen zijn pure illusie.
Een deel van het verouderingsproces is verlies van gezichtsvermogen. De hoeveelheid verscherping die mensen boven de 50 prettig vinden, is misschien niet hetzelfde als voor mensen van in de twintig. Het is de moeite waard om te overwegen om te verscherpen om een plausibel resultaat te krijgen (dat overeenkomt met jouw dagelijkse waarneming) in plaats van een aangenaam resultaat (dat er alleen goed uitziet voor mensen met hetzelfde gezichtsvermogen als het jouwe).
Ten slotte is het een dwaze taak om de scherpte te beoordelen van afbeeldingen die zijn ingezoomd tot 1:1 (100%) of meer. In musea, tentoonstellingen en zelfs op het scherm kijkt het grote publiek naar beelden als geheel, niet met een vergrootglas. Bovendien overschrijden foto’s in de meeste praktische toepassingen zelden een resolutie van 3000 × 2000 pixels (ongeveer een afdruk van 300 DPI bij A4/Letter-afmetingen), wat voor 24 Mpx-sensoren een verkleining met een factor 4 betekent. Bij het onderzoeken van een 24 Mpx-bestand bij 1:1, kijk je eigenlijk naar een beeld dat nooit zal bestaan. Verscherpen op pixelniveau is in deze context een verspilling van tijd en CPU-cycli.