I förra inlägget testade jag att göra om bildrutor från video till punktmoln med WebODM. Det fungerade över förväntan, men det fanns en del tidskrävande moment.
Att plocka ut bildrutor kunde enkelt göras med ett terminalkommando (ffmpeg) och att sedan sortera bort dåliga bilder var heller ingen stor belastning. Det jobbiga var att skapa maskeringsbilder för de delar i bilderna som inte borde vara med.
När det är relativt få bilder så tar det inte så väldigt mycket tid, eller om det bara är några få bilder av många som behöver maskeras. Men om det är hundratals bilder som i fallet med Castle Gwynn, där det är unika masker i varje bild, då kan det bli väldigt tidsödande.
Innan jag gav mig på att undersöka alternativ så gav jag mig faktiskt på att göra alla masker manuellt. Det tog timmar att få färdigt även om varje bild tog mindre än en minut att skapa en mask för i Gimp.
Var det värt det? Tja, resultatet blev ganska mycket bättre, så ur det perspektivet så var det värt det.

Maskerade bilder, inställningar på ”High” och 242 bilder att beräkna (jag provade med ”Ultra” men då räckte inte mina 64 GB Ram till). Detta tog nästan 5 timmar, men resultatet var en punktmoln på 28 miljoner punkter med ganska otrolig upplösning.
Men det hade varit betydligt mer värdefullt om processen att skapa bildmasker gick snabbare.
En mask är en bildfil, med samma namn som originalbilden, men som har filnamnstillägget ”_mask” före filnamnstillägget. Bilden innehåller svarta och vita fält, där det svarta betyder att ODM helt skall strunta i att beräkna dessa pixlars motsvarighet i originalbilden. Det är med andra ord bara pixlar som i maskfilen har vit färg som beräknas. Väldigt praktiskt att svärta ut himmel och objekt långt bort i horisonten som man inte vill ha med i resultatet, men även texter och överlagrad grafik, eller enskilda objekt i bilder. Jag kan tänka mig att bilar eller människor i rörelse skulle gå att maskera bort på det här sättet.
Efter omfattande Googlingar så lyckades jag inte hitta något program som gör skapandet av denna typ av masker så enkelt som jag skulle önska. Det optimala hade varit att kunna peka på en katalog och få programmet att förhandsvisa miniatyrer av alla bilder. Genom att markera en bild så skulle denna visas i större format och utan några speciella åtgärder så skulle man kunna ”rita” i bilden och markera områden som skall maskeras bort. Programmet skulle automatiskt skapa ”*_mask.jpg” bilder baserat på dessa redigeringar, och visar dessa som miniatyrer tillsammans med bildminiatyrerna i förhandsgranskningen. Det vore bra om man även kunde kassera bilder direkt från programmet, så slipper man göra det i andra program. Om det även vore möjligt att skapa GCP filer för noggrann positionering direkt i programmet så vore det också fantastiskt.
Något liknande program har jag dock inte hittat, så då blir det att fundera på alternativ. Jag tycker dock att Krita fungerar bättre än Gimp för att redigera maskerna i metoden nedan än vad Gimp gör.
Genom att använda ”Magick” och kommandot ”Convert” så kan man göra ganska mycket från terminalen med bilder.
for i in `ls *.jpg`; do convert -brightness-contrast 25 ${i%} mask/${i%.*}_mask.jpg; done
Ovanstående kommando skapar kopior på alla *.jpg bilder med 25% högre ljusstyrka (brightness) och lägger till ”_mask” i slutet av filnamnet. Dessutom så sparas kopiorna i en egen katalog, som redan måste finnas.
Att bilderna görs ljusare är ett sätt att minimera risken för att det finns områden som är helt svarta i bilderna. Förklaring kommer senare.

Dessa ”mask” bilder kan sedan redigeras i valfritt ritprogram, ju simplare desto bättre. Det enda som behöver göras är att rita helt svart i de områden som skall maskeras bort, det vill säga inte finnas med i modellen.
När alla bilder är redigerade (bilder som inte behöver maskeras kan tas bort helt), så är det dags för ett nytt kommando.
for i in `ls *.jpg`; do convert -threshold 0% ${i%} ../${i%}; done
Kommandot måste köras från ”mask” katalogen och flyttar tillbaka bilderna en katalog upp, samtidigt som alla färger över den angivna gränsen ”0%” sätts till ”max” värde för bandet och alla under gränsen sätts till ”min” värdet. Resultatet är en bild som är svart-vit med de svärtade områdena svarta och resten vitt.

Beroende på ritprogram så kan det hända att det som ritats svart inte är ”totalsvart” och då kommer resultatet inte att bli bra. Det går dock att justera gränsen för vad som skall blir svart med procentsatsen i kommandot. Genom att i första kommandot göra bilden rejält ljusare, så kan man som standard ange ett lite högre värde här.
Om detta vinner mycket tid eller ej, beror framför allt på hur det ritprogram man använder fungerar. Är det lätt att öppna och spara om bilder, samtidigt som rita, maskera, fyll (etc) är enkelt att hantera, då finns här tid att spara.
Om någon har ett tips på ett sådant program så får ni gärna tipsa om det i kommentarerna.
Det rigtig spænde ud. Vil teste det på område med kendte proportioner så man kan sammenligne nøjagtighed.