Spørsmål:
Få riktig eksponerte bilder og riktig lukkerhastighet for RPi-kameraet ved hjelp av raspistill
Vincent Tjeng
2013-12-17 02:09:11 UTC
view on stackexchange narkive permalink

Jeg bruker Raspberry Pi med RPi-kamerakortet for å ta en tidsforløpsvideo av utendørs landskap ved hjelp av raspistill -kommandoen. Når jeg laster opp bildene til en server etter at jeg har tatt hvert bilde, bruker jeg ikke den innebygde tidsforkortelsesfunksjonaliteten, men kjører i stedet en cronjob som kjører dette skriptet hvert minutt:

  filnavn = $ (dato + "% d% m% Y_% H% M-% S"). jpgraspistill --bredde 1280 - høyde 960 - kvalitet 100 - timeout 500 - koding jpg -sh 0 -co 0 -br 50 -sa 0 -ev 0 --eksponering snø --awb sol --ISO 100 --måling av gjennomsnitt --nopreview --output $ PROJECTDIR / $ IMAGEDIR / $ filnavn # noen tilleggskoder jeg bruker for å laste opp filene. 

Ettersom jeg kjører den samme koden for å ta bilder hele dagen og utover natten, trenger jeg koden for å velge passende lukkerhastigheter som gjør at bildet kan lyse riktig.

En mulig tilnærming for å få jevn belysning er å fikse lukkerhastigheten. Imidlertid fant jeg at denne tilnærmingen ikke var generell nok. Innstilling av --ss 1000 , eller en lukkerhastighet på 1 ms, er flott for solfylte dager, men det kreves en lukkertid på minst fire ganger så lang for gode bilder på overskyede dager (glem nattfotografering! )

Som sådan må jeg stole på kameraets interne måling. Dette gir meg en viss fleksibilitet siden det endrer lukkerhastigheten i henhold til det totale lyset som kommer inn, og gir anstendige bilder både om dagen og om natten. Bruk av standardinnstillingene på kameraet fører imidlertid til bilder som generelt er undereksponert, uansett forhold. Jeg har prøvd å leke med --ev , --brightness og så videre, men resultatene er ikke konsistente.

En tilnærming som jeg Vi har funnet å fungere er ved å endre innstillingene - timeout på kameraet. Generelt, jo kortere - timeout er valgt, desto lavere er sannsynligheten for lukkerhastigheten (og desto lysere blir det resulterende bildet).

Uten å stille en fast verdi for lukkerhastighet, har jeg funnet ut at Raspberry Pi velger en god lukkerhastighet i solfylte forhold når --timeout er satt til 500. Imidlertid på overskyet for nattetid er det resulterende bildet fra --timeout 500 for mørkt, og jeg må redusere --timeout til 200.

Her er litt data om lukkerhastighetene kameraet velger.

Sunny Days:

  • - timeout 500: eksponering 1/1060 s
  • - timeout 200: eksponering 1/366 s

Hvis det hjelper meg å laste opp bildene, kan du nevne i en kommentar nedenfor.

Får du lignende resultater når du bruker andre målemodi, f.eks. `- målematrise '?
Jeg har prøvd måling av '- spot' og '- average' - dokumentasjonen er ikke klar over hvordan begge fungerer, men jeg trodde at '- average' ville være en fornuftig måte å måle for utendørsbilder. Jeg er villig til å prøve matrise også når jeg kjører Pi-en igjen.
Hvis noen kunne peke meg på dokumentasjon som forklarer hvordan måling fungerer, vil jeg også være veldig glad :)
Jeg har ingen kunnskap om hvordan målemodus er implementert på RPi-kameraet spesifikt, men [prøv] (http://photo.stackexchange.com/questions/4687/when-best-to-use-multi-zone-matrix- spot-or-center-weight) [disse] (http://photo.stackexchange.com/questions/6769/what-is-ansel-adams-zone-system/6774) [lenker] (http: // foto. stackexchange.com/questions/6598/what-is-the-exposure-triangle/12441) for å få en bedre forståelse av hvordan måling og eksponering fungerer generelt. Gjennomsnittlig måling er akkurat hvordan det høres ut: Juster eksponering for å kompensere for de lyseste og mørkeste områdene i rammen.
Jeg foreslo opprinnelig matrise fordi det vanligvis er den "smarteste" av tilgjengelige moduser på de fleste kameraer. Dessverre har jeg ennå ikke et Pi-kamera å leke med, så jeg vet ikke hvor godt det fungerer for det.
takk, maniacyak. Jeg prøver å legge ut noen eksempler på bilder du kan se på. Jobber du tilfeldigvis med en speilreflekskamera?
Blant andre kameraer, ja! ;)
En svar:
sdenton4
2014-01-07 02:13:19 UTC
view on stackexchange narkive permalink

Jeg har jobbet med litt Python-kode for å gjøre akkurat dette. Du finner den her: https://github.com/sdenton4/pipic Og det er et eksempel på timelapse her: http://inventingsituations.net/2014/01/01/pilapse3/

Du må være oppmerksom på at både lukkertid (SS) og ISO er direkte kontrollerbar med nyere fastvare. (Kjør sudo rpi-update for å få den nyeste firmware og raspistill.) Begge disse påvirker den generelle lysstyrken til et bilde, og for å få jevn belysning over et tidsforløp må du kontrollere begge. Å stole på alle slags autoeksponering er dårlig, fordi autoeksponeringen vil ta forskjellige beslutninger for SS og ISO fra ett bilde til et annet, noe som vil resultere i betydelig flimring i timelapse. Og du bør deaktivere den automatiske hvitbalansen, av samme grunn. (Også tror jeg at bruk av både --exposure og --ISO konflikt; ikke bruk --exposure hvis du er manuell innstilling av ISO og SS.)

Jeg bør også være oppmerksom på at sensoren har en tendens til å låse seg hvis du ber om bilder med en lukkertid på mer enn 2,5 sekunder. (Egentlig ser det ut til at litt mer enn 2,5 sekunder fortsatt er ok, men jeg har aldri hatt problemer med bilder på 2,5 sekunder.) Dette fører noen ganger til at sensoren låses opp hvis du bruker innstillinger for automatisk eksponering; siden jeg byttet til å stille inn SS manuelt med et hardt maksimum på 2,5 sek, har jeg ikke hatt noen problemer med sensorlåsing; dette er et annet godt argument for manuell innstilling av SS og ISO.

Jeg gjorde opprinnelig et cron-basert bildeopptak, men har gått over til å kjøre et enkelt Python-skript, som kan huske en samling SS- og ISO-verdier. Jeg har da en @reboot kommando i cron som starter timelapse.py skriptet automatisk når Pi slås på. Jeg har også satt opp timelapse-programmet mitt for å ignorere bilder som er for langt fra min favorittlysstyrke; Dette lar meg unngå å ende opp med massive hauger med for mørke bilder fra midten av natten. (Jeg holdt nattskuddene i det koblede eksemplet, men til god effekt!)

Min tilnærming har vært å:

  1. Kjør en innledende sekvens av "rask" bildet tas for å finne en passende innledende lukkerhastighet og ISO. Dette tar vanligvis omtrent åtte sekunder for standard rombelysning.
  2. Når første verdier er kjent, sakte ned til å ta bilder med de ønskede intervallene. Vi fører en liste over lysstyrken på de siste 10 bildene, og justerer SS og ISO dynamisk for å opprettholde en konstant gjennomsnittslysstyrke.
  3. Jeg har også satt den opp for å kaste ut bilder som er for langt borte fra ønsket lysstyrke; Dette lar meg kjøre timelapse over natten i flere måneder uten å bekymre meg for å gå tom for diskplass. Ved å ha et gjennomsnitt på over ti bilder, forhindrer vi at individuelle avviksbilder får for stor innvirkning på SS og ISO, samtidig som vi er følsomme for generelle endringer i bildet (fra for eksempel solnedgangen).

Koden jeg har skrevet er satt opp for å øke SS før jeg øker ISO, siden jeg er interessert i å ha mindre sensorstøy, og ikke bryr meg så mye om bevegelsesuskarphet.

En annen måte å angripe problemet på er å gjøre noen regresjonsanalyser på kamerasensoren og egentlig skrive din egen målealgoritme. Men du vil fortsatt bare bruke måling for å få en initial verdi for SS og ISO, og deretter enten holde dem konstant eller sakte endre dem over tid. Jeg har lekt med denne tilnærmingen også, og håper å legge ut et blogginnlegg om det de neste par ukene. Det bør la meg redusere den åtte sekunders oppvarmingstiden for timelapse til omtrent 1 sekund.

Håper det er nyttig!

Hei Tom, det ser ut til at du har implementert en rekke ting som jeg er interessert i! Det er flere spørsmål jeg har som jeg vil ta opp i separate kommentarer.
1. Du nevner at du prøver å opprettholde en konstant gjennomsnittslysstyrke; betyr dette at algoritmen prøver å opprettholde den samme totale lysstyrken både natt og dag? Dette ser ikke ut til å være tilfelle fra tidsforløpet jeg så på nettstedet ditt. Ellers, hvordan identifiserer algoritmen din når det er hensiktsmessig å la den totale lysstyrken reduseres?
2. Jeg har hatt et lignende problem med at hvitbalansen endres, selv om jeg har satt `- eksponeringssnø - glødende sol`. Har du noen anelse om hvorfor dette skjer? Min antagelse er at bare lukkerhastigheten skal endres i denne situasjonen.
3. Opplever Python-skriptet tiden 'drift' som jeg beskriver her? http://raspberrypi.stackexchange.com/questions/12249/sleep-in-bash-is-innacurate Jeg bestemte meg for å kjøre timelapse som en cron-jobb som et resultat, men hvis Python kan gi en lignende grad av tidsnøyaktighet (fange bilder på minutt hvert minutt, vil jeg gjerne bruke det).
Spørsmål 1: Jeg setter en maksimums- og minimumsverdi for både SS og ISO. På hvert bilde måler manuset den gjennomsnittlige lysstyrken, og prøver å endre SS for å få en 'bedre' lysstyrke for neste bilde. Men til slutt, spesielt for nattbildene, vil det løpe opp mot min maksimale SS og ISO. Så da får du mørkere bilder om natten. Men med maks to sekunder for SS, 800 for ISO og en betydelig mengde lysforurensning rundt Toronto, tror jeg at nattbildene fremdeles fikk en lysstyrke på rundt 50-70 poeng, mens lysstyrken min var 100.
Q2: Jeg tror den automatiske hvitbalansen fortsatt prøver å gjøre noen dynamiske korreksjoner; det er tryggest å bare bruke '--awb off', og potensielt gjøre hvitbalanse i etterproduksjonen.
Q3: Python-tidsmodulene er ganske høy nøyaktighet, og heller mer nøyaktige enn cron. I min fotosløyfe tidlegger jeg hvor lang tid alle operasjonene tok (t), og ba den deretter sove i (si) 10-t sekunder. Dette kan ta en flottør, og ser ut til å gjøre en god jobb, i hvert fall i henhold til Pi-klokken. En annen mulighet er at den interne klokken på Pi bare har mye drift; en måte å håndtere dette på er å holde en åpen wifi-tilkobling og kjøre ntpd fra tid til annen. Jeg har ikke målt klokkedrift på pi, skjønt.
Takk for ditt svar. Jeg har stemt på svaret ditt, men markerer ikke svaret ditt som det aksepterte svaret ennå, spesielt siden jeg føler at dagskuddene er litt mørkere enn jeg ønsker. Forhåpentligvis kan noen andre som har gjort et lignende prosjekt kunne se på problemet og gi et annet synspunkt.
Hvis du spiller med skriptet jeg koblet til, er det et kommandolinjealternativ for målstyrken (eller du kan bare endre standardvariabelen i skriptet direkte). Hvis du ønsker et lysere bilde, kan du bare oppgi en annen verdi, mellom 0 og 255 - standard er 100.
@sdenton4 Hva er arten av denne sensorlåsen. Jeg prøver å gjøre noen lengre eksponeringer og etter googling avviklet her, og jeg bekrefter at hvis jeg gjør lenger eksponeringer, blir hele Raspberry Pi bare rart, og jeg kan ikke starte den på nytt. Jeg må hardt sykle det. Noen anelse om hva dette er, og hvorfor kan vi ikke løse dette problemet? : \
Min gjetning var at opplåsingen sannsynligvis var en slags overkjøring enten i kontrollerkoden eller i selve kameramodulen ... Det har gått år siden jeg har sett på det eller tenkt på det, og kameraets maskinvare ble solgt for Pi har endret seg litt siden den gang. En enkel løsning for lengre eksponering er å bare ta flere så lenge du kan eksponeringer og ta summen av bildene. Dette kan fungere så lenge de enkelte bildene får ikke-piksler ... Lykke til!


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...