Skriva eget stackningsprogram

Programvara för astrofoto och bildbehandling.
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

Sommaren kom och sommaren gick, men inte så mycket hände ändå. Nu däremot har jag iaf fått klart centroid beräkning och FWHM. När jag grävt ner mig i dessa algoritmer så inser jag varför FWHM blir lite olika beroende på vilket program man använder. Bara sättet att beräkna en stjärnas mittpunkt har drösvis med variationer som i sin tur slår mot FWHM. Övergav dessutom HFD beräkningen tills vidare. Den är intressant för robust autofokus, men man kan inte i en och samma bild jämföra olika stjärnors HFD vilket däremot går bra med en exakt FWHM beräkning. Jag var mest ute efter nåt sätt att mäta seeing förhållanden så för mig kommer FWHM funka bättre.

När det gäller FWHM så kan man tex ta de pixlar som ligger horisontellt utmed stjärnans mittposition, men då använder man ju inte all information i bilden. Andra produkter som tex Mira Pro gör en radial profile + gaussian curve fitting för att estimera FWHM. Jag använder också alla pixlar, men har hittills fuskat med curve fitting. Jag kör en mindre exakt, men snabb approximation istället.

I grova drag så gör mitt program följande:
  1. Läs in råbild (TIFF, CR2 etc)
  2. Konvertera bilden till greyscale
  3. Gaussian blur -> Threshold bild där gränsen är median + bias
  4. Skapa lista över stjärnor i threshold bilden
  5. Sortera bort överexponerade stjärnor
  6. Sortera bort stjärnor som ligger för nära bildkanten (kommer orsaka problem senare)
  7. Sätt estimerat centrum för varje stjärna utifrån maxvärde i blur bild (pixel noggrannhet)
  8. Utvidga stjärnans radie en pixel i taget, avbryt då median värdet för cirkeln inte minskar nämnvärt längre
  9. Beräkna exakt mittpunkt för stjärnan utifrån föregående yta med "center of mass" algoritm (sub pixel)
  10. Beräkna FWHM i pixels och i arcsec per stjärna (se bild nedan)
  11. FWHM för bilden = Median värdet av alla FWHM
För att approximera FWHM värdet så sorterar jag varje stjärnpixel i fallande värden. MIN värdet får bli medelvärdet av de 20 pixlar som är längst från centrum. Half Maximum blir då värdet mitt i mellan MAX pixel (dvs första värdet i listan) och MIN värde. För att hitta Full Width så summerar jag värdet av de två pixlar som ligger närmast Half Maximum (på respektive sida). Som sagt är det fusk, men eftersom det är många pixlar för varje stjärna och dessutom många stjärnor bakom den totala beräkningen så verkar det funka hyfsat.
FWHM.png
FWHM.png (23.68 KiB) Viewed 8929 times
Exempel bild som visar FWHM för respektive stjärna.
debugImage_422.png
Här en bild som jämför samma bilders FWHM i DSS respektive mitt program. Har alltid tyckt att DSS är väldigt pessimistisk i sin FWHM beräkning och jag har fått vatten på min kvarn :)
Hur som helst så stämmer kurvornas utseende överlag så det är jag nöjd med.
DSS_vs_SubGrinder.png
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
hbar
Posts: 584
Joined: 2010-05-14 18:22:47
spamtest: JA
Location: Lund

Re: Skriva eget stackningsprogram

Post by hbar »

Du har verkligen utnyttjat denna molniga period. Intressant att få läsa om hur du tänker när du bygger upp programmet, det kommer att bli bra underlag när jag själv får tid att jobba med sådant. Var tvungen att köpa på mig en ny lic för Delphi till det projekt jag jobbar med nu så när det är klart så ska det bli kul att börja skriva lite liknande kod (o få valuta för de drygt 40kkr lic kostade).

För att bedöma bildkvalitet så vore det en hjälp att inte bara titta på fwhm utan även se hur det ser ut i regionen strax över min nivån (10-20% regionen, fwem - Full width eighth maximum). När pixlarna ligger i bågsekund regionen o man vill försöka få fram max upplösning (lite typ lucky imaging) på urvalet så börjar detta bli intressant.

Vid kortvariga men kraftigare seeing eller tracking störningar kan de sabotera en bild trots att den har ett bra fwhm. Om den tex under 10% av tiden fått maximum att hoppa några pixlar i sidled så ger det en puckel i min regionen men når inte upp till fwhm. Jag har sett detta på många bilder som varit kassa men ändå fått bra score.

På en enstaka bild så är det svårt då tex dubbelstjärnor skulle störa. En möjlighet är naturligtvis om en majoritet har störning i samma riktning men det är tidsödande (även om det naturligtvis går snabbare än manuellt).

Enklast är nog att köra en första sållning på fwhm och sen får man manuellt välja ett mindre antal ref stjärnor som man gör fwem på. Då kan också bilder där max är betydligt lägre pga transparens fluktuationer sorteras bort.

Ser fram emot vidare rapporter och om du hittar sidor med bra algoritmtips så får du gärna ge länkar.

/Håkan
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

Hej Håkan,
Intressant det du skriver om FWEM, en helt ny term för mig.
Tror jag förstår vad du är ute efter - det är en bra feature! Skulle underlätta lite om du har nån exempelbild, som uppvisar detta beteende. Du får gärna länka till sån i tråden här :) + en bild som inte har detta problem. Alltid bra med både positiva och negativa exempel..
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
hbar
Posts: 584
Joined: 2010-05-14 18:22:47
spamtest: JA
Location: Lund

Re: Skriva eget stackningsprogram

Post by hbar »

Att du inte hört talas om FWEM kan bero på att jag hittat på den:)

Skall gräva fram lite exempel o skickar en länk i pm (kan ta någon dag då jag brukar radera de riktigt dåliga direkt).

Såg du Christers tips om ASTAP, mest för att det brukar kunna ge nya idéer när man ser hur andra löst det o här var dessutom källkoden med (även om den var i pascal). Att han anv FPC gör att man ev skulle kunna skala ner det för att göra live stacking på en r-pi.

/Håkan
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

Jobbar på lite oregelbundet med detta "SubGrinder" projekt.

Har nyligen byggt en egen Arduino autofocuser och jobbar nu på mjukvaran för att hitta optimal position. Det slår mig när jag testar med olika sekvenser att FWHM är rätt skakigt mellan subbar. Under fokuserings körning så använder jag väldigt korta exponeringar på 2 sekunder och det spelar nog in. Det roliga är att antalet överexponerade pixlar för större stjärnor i bilden är betydligt mer stabilt.

Så min märkliga idé just nu går ut på att bästa fokus kan härledas ur när den största stjärnan i bilden har minimalt antal överexponerade pixlar. Kan det stämma? Detta är i såna fall en väldigt enkel beräkning jämfört med att hålla på med FWHM, CoM osv. Testade att positionera fokus på detta sätt, lade sen på Bahtinov masken och resultatet såg helt korrekt ut. Så även om inte bästa metod så verkar den duga bra för min situation :)
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
hbar
Posts: 584
Joined: 2010-05-14 18:22:47
spamtest: JA
Location: Lund

Re: Skriva eget stackningsprogram

Post by hbar »

Trevligt Magnus att du jobbar vidare med ditt projekt.

Min erfarenhet är att man skall ställa fokus på en icke överexponerad stjärna. Jag brukar titta på både FWHM och peak amplitud när jag ställer fokus (i Nebulosity).

Det funkar nog när du ligger mycket ur fokus men när du närmar dig så blir det nog svårt. Om du har en stjärna som är lite överexponerad och får bättre fokus så blir den visserligen smalare men samtidigt blir energin mer koncentrerad och därmed blir även de delar av tvärsnittet som ligger längre från max också överexponerade. Kombinerad med seeing och rörelseoskärpa så tror jag att det är svårt att dra någon generell slutsats om detta.

Tidsmässigt borde det inte ta så mycket längre tid att räkna fram ett medelvärde av några centrala pixlarna, dela med 2 och sen räkna hur många pixlar som är större än detta inom en fix yta. Ingen riktig FWHM men når centrala delarna över 50% av max så blir inte felet så stort och borde funka utmärkt för fokus.

När jag använder lång brännvidd (~0.5"/pix) så är det lite tålamodsprövande att hitta precis rätt fokus. Seeingen o transparensen gör att värdena dansar upp o ner. Går manuellt förbi några gånger o noterar var jag tyckte det blev bäst, sätter den sen ungef i mitten av dessa.

Man skulle behöva lite AI kärnor till detta, bara att sätta dom på träning några nätter:).

/Håkan
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

hbar wrote:Det funkar nog när du ligger mycket ur fokus men när du närmar dig så blir det nog svårt. Om du har en stjärna som är lite överexponerad och får bättre fokus så blir den visserligen smalare men samtidigt blir energin mer koncentrerad och därmed blir även de delar av tvärsnittet som ligger längre från max också överexponerade. Kombinerad med seeing och rörelseoskärpa så tror jag att det är svårt att dra någon generell slutsats om detta.
Ja svårt att säga säkert vad som funkar - menar du att antalet överexponerade pixlar tillfälligt skulle öka just vid fokus?
Har bifogat ett Excel diagram som visar hur värdena förändras när jag flyttar fokus med jämna intervall. Har även lagt på ett andragrads polynom best fitted enligt Excel.
StarPixelSize.PNG
StarPixelSize.PNG (24.74 KiB) Viewed 8453 times
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
hbar
Posts: 584
Joined: 2010-05-14 18:22:47
spamtest: JA
Location: Lund

Re: Skriva eget stackningsprogram

Post by hbar »

Jag menade inte att de skulle öka men eftersom de två funktionerna jobbar mot varandra så får du en rätt vid flack dal där man i kombination med andra fluktuationer inte vet riktigt var min är. Detta märks förmodligen mest då stjärnan bara är lite överexponerad. Här har du en stjärna som har 300 överexponerade pixlar och ändå är det svårt att avgöra var fokus ligger (23..37). Om optiken var perfekt så kunde du avgöra respektive flanks position o ta mitten av detta men många teleskop har olika lutning på respektive sida av fokus.

Så mycket beror på hur bra seeing o transparens variationerna är. Vore kul att se om du hade både FWHM, peak o din överexponerings rutin som jobbade under samma förhållande. Om du använder din nuvarande rutin och bara parallellt sparade undan de andra två värdena (för en icke överexponerad stjärna i närheten) i en tabell så hade vi något konkret att jämföra med. Har du några sådana att jämföra mellan så kanske du kan komma fram till att för din utrustning är bästa fokus tex 25% in mot centrum från vänster av de överexponerade. Då kan du använda detta framöver.

/Håkan
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

Ahh ok tror jag är med nu. Vet inte vad Peak är, men kan lägga in FWHM (från DSS) i samma diagram.
Kan ju vara fasförskjutet som du antyder.
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
hbar
Posts: 584
Joined: 2010-05-14 18:22:47
spamtest: JA
Location: Lund

Re: Skriva eget stackningsprogram

Post by hbar »

Peak = max som du har i din fwhm beräkning. Mest intr för att se hur mycket fwhm påverkas av max amplituden. Det kan du förmodligen inte få fram ur DSS i efterhand utan det var närmst om du körde din egen algoritm.

/Håkan
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

Håkan du hade helt rätt! FWHM kurvan matchar tyvärr inte saturated pixels kurvan så bra att du reagerade.
Så här ser det ut om man även lägger in DSS FWHM och min egen FWHM beräkning i diagrammet.
FocusCurve.png
FocusCurve.png (24.71 KiB) Viewed 8292 times
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
megmar
Posts: 186
Joined: 2014-05-25 14:22:57
spamtest: JA

Re: Skriva eget stackningsprogram

Post by megmar »

Att hitta bästa fokus via FWHM krävde också att jag fick skriva om algoritmen och byta ut fuskberäkningen mot en äkta gaussian curve fit. Det gjorde att FWHM estimaten blev betydligt stabilare och var ganska kul att skriva koden (optimerar på MSE, Mean Squared Error, mha simulated annealing).

Några bilder hur det ser ut. Plupparna är mätvärden och orange kurvan är best fit gaussian.
StarProfiles.PNG
Här är två bilder med dåligt respektive bra fokus.
Man kan se att FWHM värdet är hyfsat stabilt över alla stjärnor inom bilden till skillnad från tidigare algoritm som jag har nån skärmdump på tidigare i tråden.

Dåligt fokus
debugImage_230823_0116.jpg

Bra fokus
debugImage_230823_0133.jpg
/Magnus
EQ5, GSO 200/800 f4, ASI 290MM, ASI 120MC
hbar
Posts: 584
Joined: 2010-05-14 18:22:47
spamtest: JA
Location: Lund

Re: Skriva eget stackningsprogram

Post by hbar »

Inspirerande Magnus. Det är ju fördelen med att skriva det själv, att du kan anpassa koden efterhand. För fokus så gör det inte så mycket om beräkningarna tar lite tid. Gör du en fullständig tvådimensionell gaussian fit?

Om du har lite länkar till bra algoritmer så får du gärna dela med dig. Lär dröja minst ett år innan jag får tid att börja själv men både för EAA och lucky imaging så är snabba och bra analysverktyg värdefulla.

/Håkan