Linux Magazine staat vaak vol met apparaatjes. Met kleine krachtige computer kaartjes zoals de Raspberry Pi of de Arduino kun je heel makkelijk zelfbouw projecten starten. Maar er zijn ook kant en klare (commerciële) apparaatjes die een bepaald trucje heel goed kunnen. Denk hierbij bijvoorbeeld aan 360° camera’s. Ze zijn er in allerlei soorten en maten, duur en goedkoop.

Auteur: Arjan ten Hoopen

Op Marktplaats kun je dergelijke camera’s vinden tegen zeer aantrekkelijke prijzen. Ik heb een Samsung Gear 360 gekocht en ben daar mee gaan experimenteren. Op mijn Android telefoon heb ik Snapseed en Streetview geïnstalleerd, om 360° foto’s te maken voor Google Streetview. Voordat je gaat publiceren, kun je ze nog met Snapseed patchen. Ik ben aan de slag gegaan en heb een aantal foto’s op Google Streetview gepubliceerd. Maar al snel kom je erachter dat bij een 360° foto de fotograaf er ook altijd bij op staat. Deze is te zien op de ‘bodem’ van de 360° foto (die bodem noemt men trouwens de ‘nadir’). Je ziet, van boven, het hoofd, schouders en vaak ook nog wel de armen van de fotograaf. Dat is niet zo mooi. Dus je moet jezelf wegpoetsen. Het wegpoetsen gaat met behulp van Snapseed behoorlijk eenvoudig, het is alleen wel erg tijd consumerend en het resultaat is niet altijd even strak. Snapseed geeft je namelijk de mogelijkheid om een foto, of beter de nadir, te egaliseren. Snapseed gaat dan raden wat er op de plek van de nadir eigenlijk te zien is, zeg maar door de fotograaf heen kijken. Dat klinkt fantastisch maar blijkt in de praktijk toch wel erg veel ‘gok’ werk. Het resultaat moet strakker kunnen. Een gekleurde cirkel, of logo, die de fotograaf bedekt is strakker. Kijk maar eens naar de 360° foto’s van huizen op Funda. Op de plek van de nadir staat vaak het logo van de makelaar of de fotograaf.

Je kunt natuurlijk aan de slag gaan met Gimp (en plug-ins zoals G’Mic) en zo zijn er nog wel een aantal tools, maar het gebruik hiervan is allemaal handmatig en dus tijdrovend.

Linux Magazine gaat over open source, maar als er geen open source is die je kan helpen moet je overgaan op plan B; zelf maken van open source. Aan de slag!

Samsung Gear 360

 

Bolletje

De eerste vraag is; wat genereert een 360° camera? De 360 Gear is een klein bolletje met twee camera’s. Het produceert een, wat men noemt, double fisheye afbeelding. Twee foto’s ‘naast’ elkaar, zoals een vis de wereld ziet. Daar kun je niet zo veel mee, maar gelukkig converteert de Gear 360 de double fisheye naar een equirectangular formaat. Hoe dat eruitziet zie je in Afbeelding 1. Het midden van de foto op Afbeelding 1 is gemaakt met de camera aan de voorzijde. De zijkanten zijn er aan ‘geplakt’ met behulp van de foto die gemaakt is door de camera aan de achterzijde. Als je goed kijkt, kun je wel zien waar ze ‘geplakt’ zijn. Het valt ook op dat de foto erg vervormd is. Dat komt omdat de foto’s eigenlijk op de binnenzijde van een bol geprojecteerd moeten worden, het is immers een 360° foto. Aan de onderkant zie je de fotograaf van ‘boven’. Zijn hoofd, schouders en armen zijn hier te zien. Dat stukje willen we weg werken.

Afbeelding 1 kun je ook op Google Streetview bekijken (zie Links). Hier zie je al het eindresultaat. De fotograaf is weggewerkt. Het trucje is redelijk simpel. Maak met (bijvoorbeeld) Gimp een cirkel met de gewenste kleur, of een cirkelvormig logo, in de juiste grote. Converteer deze 2D afbeelding naar een equirectangular formaat. Plak dit bovenop de  360° foto (ook in equirectangular formaat) en klaar is Kees.

 Afbeelding 1

 

Equirectangular

Hoe converteer je een 2D afbeelding naar equirectangular? Het makkelijkste is om dit te doen via Nadirptach.com (zie Links). Dit is een website die deze conversie gratis voor je uitvoert. Gebruik hier de tool ‘Logo to Ready for 360’. Upload je (logo) afbeelding die over de fotograaf geplakt moet worden. Upload vervolgens een equirectangular projectie. Dit is een afbeelding die als achtergrond gebruikt wordt. Gebruik hier een volledig transparante afbeelding voor die even groot is als de equirectangular foto van de 360° camera. Klik op Create en na enig rekenwerk krijg je nu een equirectangular formaat van je logo, download deze.

Open nu Gimp, laad de equirectangular foto uit je 360° camera, en voeg daar als layer de zojuist gecreëerde equirectangular projectie van je logo toe. Exporteer het geheel als een nieuw image. En Kees is weer klaar.

ImageMagick

Met een beetje geluk heb je nu een redelijk resultaat. Mogelijk is het logo nog wat te groot, of te klein. Maak je daar nu even niet ongerust over, het ging erom dat we het trucje leerden. En dat hebben we nu gedaan. Maar nu willen we het nog automatiseren en dan is Gimp niet zo’n goede keuze. Een betere keuze is ImageMagick. Deze kun je vanaf de commando regel aanroepen, en dus ook vanuit een script. ImageMagick heeft een enorm groot aantal opties en is zeer krachtig. We moeten dus nu uitzoeken hoe we ImageMagick moeten aanroepen. We hebben twee afbeeldingen, de originele 360° afbeelding, en een afbeelding, die even groot is als het originele 360° afbeelding, met een logo (of gekleurde cirkel) en voor de rest volledig transparant. Deze twee plakken we op elkaar en maken er een nieuwe afbeelding van. Het te gebruiken commando ziet er als volgt uit: magick composite -gravity center Hier horen nog drie bestands argumenten bij, te weten; de ‘logo afbeelding’, de originele afbeelding en een resultaat bestand. Alle afbeeldingen zijn equirectangular.

Om het te automatiseren, zullen we ook een bibliotheek aan moeten leggen met verschillende logo afbeeldingen. De logo’s kunnen simpel enkelkleur afbeeldingen zijn maar ook ‘echte’ logo’s. Tevens moeten ze er in diverse groottes zijn. Afhankelijk hoe hoog de camera boven de fotograaf staat, des te groter/kleiner is de fotograaf te zien.

Als je wat 360° afbeeldingen gemaakt hebt, zul je zien dat de fotograaf er soms wat groter, en soms wat kleiner op staat, daarom gaan we via Nadirptach.com een kleine bibliotheek aanleggen met nadir patch afbeeldingen van verschillende groottes. We beginnen met een zwarte cirkel als nadir patch. Vervolgens lezen we deze afbeeldingen in in Gimp, passen de kleur aan en zo breiden we de bibliotheek uit naar meerdere kleuren.

Coderen

Nu het echte programmeer werk. Via de Linux Magazine website kun je de volledige code van NadirPatch downloaden (zie Links). Unzip vervolgens de zip file met alle bronbestanden in je ‘home’ map. Zorg ervoor dat alle paden gereconstrueerd worden tijdens het unzippen. Het resultaat is dat er een NadirPatch map gemaakt wordt met daarin een bin map met de tool NadirPatch. Tevens is er een lib map gemaakt met de sjablonen voor de tool NadirPatch.

Open nu eerst het nadirpatch script bestand in de bin map met je favoriete editor en controleer of de waarde van de ‘LIB’ variabele (regel 12) correct is. Zo niet, pas deze dan aan naar de correcte waarde.

Open een Konsole en ‘cd’ naar de bin map met daarin NadirPatch. Begin met een simpele test: nadirpatch -h (of ./nadirpatch -h als de huidige map niet in je PATH staat) en je zult de help informatie zien.

Je kunt natuurlijk ook naar de code kijken. Dit script is gemaakt op een dusdanige wijze dat iedereen met een beetje gevoel voor de Linux commando regel het kan begrijpen. Er is tevens veel commentaar toegevoegd, dus ook als je niet zo begaafd bent met shell scripts, moet het mogelijk zijn het NadirPatch script te doorgronden. Bij het ontwikkelen van dit script is gekozen voor duidelijkheid boven code efficiëntie. Het staat je natuurlijk vrij om de code aan te passen, het is immers open source!

In de map test360afbeelding is een test afbeelding meegeleverd, maak hier een kopie van en gebruik deze kopie voor het testen. Het programma heeft twee gebruiksmogelijkheden. De eerste is het controleren van de afbeelding op fouten. Hiervoor wordt de afbeelding alleen gelezen, er worden geen acties op uitgevoerd. Het commando dat je hiervoor gebruikt is nadirpatch -c -f [naam-van-de-test-file]

Patchen

De tweede mogelijkheid is om de nadir te patchen. Dit doe je met het commando nadirpatch  -f [naam-van-de-test-file] Let op; dit commando past dus het bestand aan. Er zijn echter een paar uitzonderingen, als de afbeelding corrupt is wordt niets uitgevoerd. Ook als er in het proces wat fout gaat, wordt het originele bestand teruggezet (hier is namelijk een backup van gemaakt). Het programma is hier een beetje kritisch op, om de mogelijkheid van ‘kwijtraken’ van de afbeelding te minimaliseren.

Met de -t en -s optie (zie ook de output van NadirPatch -h) kun je de kleur en grote van de NadirPatch aanpassen.

We zijn er echter nog niet. We hebben nu wel een tool, maar hoe komen we bij de afbeelding? Als de Gear 360 een afbeelding maakt stuurt ze deze afbeelding naar de (Samsung) telefoon. Daar staat de afbeelding dus opgeslagen. We moeten die afbeelding met NadirPatch gaan bewerken. Met andere woorden we moeten de foto kopiëren naar onze desktop; daar de aanpassing met NadirPatch uitvoeren; en weer terug kopiëren.

NadirPatch output

 

KDE Connect

In het Linux Magazine van januari 2019 staat een artikel over KDE Connect. KDE Connect maakt het mogelijk om de disk in je telefoon te mounten op desktopsysteem. Je hoeft dan niets te kopiëren. Lees het artikel erop na!

We gaan nu, met KDE Connect, de disk van de telefoon mounten op je computer. Dit gebeurt automatisch als je computer en telefoon via KDE Connect gepaard zijn. Open een file browser en blader naar de …/Pictures/panoramas map op je telefoon (in de adres balk van de file browser staat het volledige pad). Open nu een terminal in deze map; en vanuit deze terminal kun je nu direct met NadirPatch de afbeeldingen aanpassen. Dit heeft echter wel een nadeel, het is nogal langzaam. Ik kies er altijd voor om alle afbeeldingen (waarvan de nadir aangepast moet worden) te kopiëren naar (bijvoorbeeld) de /tmp map op de desktop. Hier de afbeeldingen te bewerken, om ze na bewerking via KDE Connect weer terug te kopiëren naar de Pictures/panoramas map op de telefoon.

Heb je geen KDE Connect, geen nood, je kunt natuurlijk ook Airdroid gebruiken om ze van je telefoon naar je desktop te kopiëren. Nadat ze gepatched zijn kopieer je ze gewoon weer terug.

Dolphin KDE Connect

 

Tot slot

Je hebt mogelijk al wel gezien dat NadirPatch maar 1 afbeelding tegelijk kan bewerken. Heb je een (groot) aantal afbeeldingen in een map staan dan kun je eenvoudig via een klein loopje alle bestanden patchen. Voorbeeld: for f in `ls *.jpg` ; do ; nadirpatch -f $f ; done

Veel foto plezier met 360° foto’s!