apr
Hypes zijn heerlijk. Het brengt me de externe energie om op de golf mee te drijven. Zo ook met R. Als je dan toch bezig bent, is het ook leuk om iets grappigs mee te maken en te laten zien.
Dit artikeltje is een voorbeeld van de kracht van R en is makkelijk na te spelen.
Zorg eerst voor een installatie van R en RStudio via respectievelijk: https://cran.r-project.org en https://www.rstudio.com sites.
In RStudio heb je de mogelijkheden om je R code te schrijven, op te slaan en uit te proberen en is het erg eenvoudig om beschikbare packages op te halen van het Internet en vervolgens op te nemen in je code.
Voor dit voorbeeld heb je de jpeg package nodig. Met de jpeg package kan je foto’s met het type .jpg en .jpeg inlezen in een R variabele van het type DataFrame. Dit gebeurt via de volgende regels code
De variabele img is nu een 3 dimensionale matrix. Elke pixel van de foto is ingelezen als een positie op een rij, een posities op een kolom en een waarde voor de R (Rood) intensiteit, de G (Groen) intensiteit en de B (Blauw) intensiteit. De intensiteiten zijn waarden tussen 0 en 1. De variabele img die een foto met een resolutie van 768 bij 1024 ingelezen heeft, is dan gedefinieerd als img[1:768,1:1024,1:3].
Iedere RGB waarde kan met R code makkelijk worden aangepast.
Voorbeeld: Het statement img[1,1,1] <- 1 zal de Rood intensiteit van de pixel linksboven van het plaatje vol aan zetten. Dit betekent overigens niet dat de pixel fel rood wordt, want dan zullen de G en B intensiteiten eerst op 0 gezet moeten worden.
Uiteindelijk kan de aangepaste variabele img worden weggeschreven naar een nieuw plaatje met de volgende code:
Nu volgen twee leuke voorbeelden. We laden de volgende foto in:
Vervolgens geven we elke pixel het gemiddelde van de 3 RGB waarden met drie regels code:
De vraag aan u als lezer is: wat verwacht je van de uitkomst van deze manipulatie? De RGB waarden zijn voor alle 3 kleuren gelijk en het plaatje wordt……
een perfecte zwart-wit foto.
Voor het tweede voorbeeld is het mijn doel om de foto van buiten naar binnen van donker naar licht te laten vervagen. In dit voorbeeld doe ik dat niet lineair maar met een sinus functie anders wordt de foto te donker. Eerst heb ik een functie gemaakt die een matrix oplevert ter grootte van de foto met waarden tussen 0 en 1 waarbij de 0 waarden aan de buitenkant zitten en de 1 waarden in het centrum.
Deze functie kan aangeroepen worden met de nrow(img) functie (het aantal rijen van de foto) en de ncol(img) functie (het aantal kolommen van de foto). Elke RGB code kan vervolgens vermenigvuldigd worden met de waarde in de voorbereide matrix.
De code van het aanroepen en de fotomanipulatie ziet er dan als volgt uit:
En wanneer de img weer als foto wordt weggeschreven is het resultaat als volgt
Ik vermoed dat Photoshop het op dezelfde manier doet als ik met R voor elkaar kan krijgen. Erg leuk om mee te experimenteren.
28 februari 2023 • Transfer Solutions
19 januari 2023 • Transfer Solutions