Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168742
Image: ubuntu2004

Berechnung der Schärfentiefe und Plot der Zerstreuungskreisgröße

Formeln

Quelle: http://www.faqs.org/faqs/rec-photo/lenses/tutorial/

Definitionen:

    Soa     alternate object point to front principal point distance
    Sia     rear principal point to alternate image point distance
    h       hyperfocal distance
    C       diameter of circle of confusion
    c       diameter of largest acceptable circle of confusion
    N       f-stop (focal length divided by diameter of entrance pupil)
    Ne      effective f-stop Ne = N * (1+M/p) 
    D       the aperture (entrance pupil) diameter (D=f/N)
    M       magnification (M=f/(So-f))

The diameter of the circle of confusion can be computed by similar triangles, and then solved in terms of the lens parameters and object distances. For a while let us assume unity pupil magnification, i.e. p=1.

    When So is finite
    C = D*(Sia-Si)/Sia = f^2*(So/Soa-1)/(N*(So-f))
    When So = Infinity,
    C = f^2/(N Soa)

Note that in this formula C is positive when the alternate image point is behind the film (i.e. the alternate object point is in front of the main object) and negative in the opposite case. In reality, the circle of confusion is always positive and has a diameter equal to Abs(C).

C(f,So,Soa,N)= f^2*(So/Soa-1)/(N*(So-f));C.show()
\newcommand{\Bold}[1]{\mathbf{#1}}\left( f, \mbox{So}, \mbox{Soa}, N \right) \ {\mapsto} \ \frac{{\left(\frac{\mbox{So}}{\mbox{Soa}} - 1\right)} f^{2}}{{\left(\mbox{So} - f\right)} N}

Vorbelegung

Objektentfernung, Brennweite (jeweils Meter)

Blende

Sensorbreite in Pixel und Meter (daraus Zerstreungskreis)

So=1.12 # Gegenstandsweite f=0.2 # Brennweite N=5.6 # Blende hpixel=4928 # Sensorbreite Pixel swidth=0.0236 # Sensorbreite m

Dies sind die Werte für dieses Bild.

Nun die Zerstreuungskreisgröße in Abhängigkeit von der Distanz ausrechnen.

x=var("x") c=swidth/hpixel Cf(x)=C(f,So,x,N) show(Cf)
\newcommand{\Bold}[1]{\mathbf{#1}}x \ {\mapsto}\ \frac{0.00869565217391304}{x} - 0.00776397515527950
nah=solve(Cf(x)==c,x)[0].right() fern=solve(Cf(x)==-c,x)[0].right() print "nah/fern: %s und %s resp. %f und %f"%(nah,fern,nah,fern)
nah/fern: 128077/114425 und 71657/63940 resp. 1.119310 und 1.120691
dCf=derivative(Cf,x);aCf(x)=dCf(So)*(x-So) gerade=plot(aCf,So-0.5,So+0.5,color="red") plot (Cf,0.5,5)+gerade p=plot(gerade+plot (Cf,0.5,5)+text(u"Übersicht",(3,Cf(0.5)))) p.axes_labels(["Entfernung\n(m)","Zerstreuungskreis (m)",]) p.show()

Das obige Diagramm deckt auf der x-Achse den Entfernungsbereich von 50 cm bis 5 Meter ab, auf der y-Achse einen Zerstreuungskreisdurchmesser bis ca. 1 cm (d.h. 0.01 m).

Und nun ein Ausschnitt aus diesem Diagramm, welches nur den Bereich von +- 1 cm um die Fokusebene zeigt. Entsprechend ist die y-Achse so skaliert, daß sie nur bis ca 0.07 mm (7e-5 m) reicht. In diesem Bereich entspricht die Funktion praktisch einer Geraden.

lnnah=line([(nah,0),(nah,c)],rgbcolor=(0.8,0,0)) lnfern=line([(fern,0),(fern,-c)],rgbcolor=(0.8,0,0)) txt=text(u"Unschärfekreis %.3f mm"%(c*1000),(So,c),horizontal_alignment="left") txt2=text(u"Schärfentiefe %.3f m - %.3f m (%.2f mm)"%(nah,fern,(fern-nah)*1000),(So,-c*2),horizontal_alignment="right") p=plot(plot(Cf,So-0.01,So+.01)+lnfern+lnnah+txt+txt2) p.axes_labels(["Entfernung\n(m)","Zerstreuungskreis (m)",]) p.show()
lnnah=arrow((nah,0),(nah,c),rgbcolor=(0.8,0,0)) lnfern=arrow((fern,0),(fern,-c),rgbcolor=(0.8,0,0)) plot(plot(Cf,So-0.001,So+.001)+lnfern+lnnah,gridlines=True,ticks=[[],None])

Das Vorzeichen zeigt hier die Orientierung des Unschärfekreises. Bei einer kreisrunden bzw. symmetrischen Blende sieht man das natürlich nicht.