Fjern daude pikslar med eit skript

Merknad: Dette innlegget er fleire år gammalt. Informasjonen kan vere utdatert.

I videobloggen min nemnte eg at fotoapparatet mitt slit med daude pikslar1. Eg prøvde å visa eit bilete der prikkane syntest, men det var kanskje litt vanskeleg å sjå i videoen. Eg har difor lagt ut biletet her (klikk for større):

Bilete av daude pikslar i fotoapparatet mitt

Bilete av daude pikslar i fotoapparatet mitt. Kvar prikk er ein daud piksel.

Alle prikkane er synlege på kvart einaste bilete eg tek med fotoapparatet. Greit nok, prikkane er ikkje store, men dei er irriterande lell. Til å byrja med redigerte eg kvart enkelt bilete med GIMP. Eg brukte anten klonestempelet eller «spot healing» på kvar ein prikk. Dette tok tid. Finst det ikkje kjappare måte å gjera dette på? Jo, sjølvsagt! Det finst eit lite, kommandolinebasert program som heiter jpegpixi, og fungerer om lag på same vis som til dømes «healing» i GIMP/Photoshop. Du finn det t.d. i pakkebrønnen til Ubuntu:

sudo apt-get install jpegpixi

Programmet køyrer du i terminalen slik:

jpegpixi fil.jpg nyfil.jpg X,Y,SX,SY

der X og Y er koordinatet (0,0 er øvst til venstre), SX er breidda og SY er høgda til prikken du vil ha vekk. (SX og SY er som standard lik 1, så du kan sjå vekk frå desse viss du har ein prikk som er 1 piksel stor.)

Dette er jo vel og bra, men framleis tungvint. Heldigvis treng du ikkje gjera mykje arbeid kvar gong du skal reparera eit bilete. Faktisk treng du berre setja opp eit skript som tek seg av dette… Det fyrste du må gjera, er å finna koordinatane og storleiken til alle dei ekle prikkane. Dette skriv du ned i ei tekstfil som du t.d. kallar pikslar.txt. Her er innhaldet i mi tekstfil:

398,191,3,3
1235,368,5,5
1481,466,3,1
1171,524,2,2
1201,527,5,4
762,603,3,1
1260,757,2,2
1566,856,2,1
271,858,2,1
1365,1074,3,3
1640,1453,3,3

Når alle prikkane er rita ned, kan du setja opp bashskriptet som skal taka seg av alt saman. Det følgjande skriptet kladda eg ned for eit par år sidan, lagra som fjernpikslar.sh:

#!/bin/bash
# v0.1 2009-05-17 Simon Hansen
#
clear
 
feilmelding() {
	echo "Syntaksen er: $0 [katalog]"
	exit 1;
}
test -d "$1" || feilmelding
 
katalog=$1
 
echo "Fjernar daude pikslar frå:"
ls -C1 $katalog/*.JPG
 
gammal=".JPG"
ny="_kopi.jpg"
 
for fil in $katalog/*.JPG;
do 
	nyfil="${fil/%${gammal}/${ny}}"
	mv $fil $nyfil
	jpegpixi -f pikslar.txt $nyfil $fil
done
 
echo "Ferdig!"
exit

Pass på å leggja fjernpikslar.sh på same stad som pikslar.txt. Du køyrer det frå terminalen med syntaksen:

./fjernpikslar.sh biletkatalog

Skriptet gjer tre ting. 1: Det sjekkar om du har skrive inn ein katalog, og at katalogen faktisk finst. 2: Den lagar ein kopi av dei opphavlege bileta. 3: Den fjernar prikkane på koordinatane frå tekstfila.

  1. Eg nemnte også at fotoapparatet har opptaksfunksjon, men det er veldig låg oppløysing på videoar derifrå []

Permanent link to this article: https://boba.no/2012/08/fjern-daude-pikslar-med-eit-skript/