diff options
Diffstat (limited to 'werteunit.pas')
-rw-r--r-- | werteunit.pas | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/werteunit.pas b/werteunit.pas index b62282e..89fcb08 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -2064,11 +2064,11 @@ end; procedure tLLWerte.kantenFilter(betraege: tLLWerte; xFak,yFak: extended; filterTyp: tKantenFilterTyp; einseitig: boolean; out maxPos: tInt64Point); var - maxima: tInt64PointArray; - i,iM,j,jM,jP,mCnt,di,dj: int64; - wert,minWert,maxWert: extended; - istVollKomplex: byte; // 1=nein, 2=ja - schiebung: tInt64Point; + maxima: tInt64PointArray; + i,iM,j,jM,jP,mCnt,di,dj: int64; + wert,minWert,maxWert,radius: extended; + istVollKomplex: byte; // 1=nein, 2=ja + schiebung: tInt64Point; begin istVollKomplex:=params.tSiz div betraege.params.tSiz; if (betraege.params.tSiz*istVollKomplex <> params.tSiz) or @@ -2129,9 +2129,10 @@ begin if istVollKomplex=1 then begin iM:=params.xSteps div 2 + 1; jM:=params.tSiz div 2 + 1; + radius:=sqr(min(maxPos['x'],iM-maxPos['x']))*xFak + sqr(min(maxPos['y'],jM-maxPos['y']))*yFak; for j:=0 to jM do for i:=0 to iM do begin - wert:=(sqr(i)*xFak+sqr(j)*yFak)/(sqr(maxPos['x'])*xFak+sqr(maxPos['y'])*yFak); + wert:=sqrt((sqr(i)*xFak+sqr(j)*yFak)/radius); if wert > 0.6 then wert:=0 else if wert > 0.4 then @@ -2158,11 +2159,13 @@ begin if einseitig then begin schiebung:=maxPos; filterTyp:=kfTiefpass; + // wir nehmen nur Frequenzen, die nah an maxPos liegen - das ist ein Tiefpass auf den verschobenen Werten! end else schiebung:=int64Point(0,0); iM:=params.xSteps; jM:=params.tSiz div 2; + radius:=sqr(min(maxPos['x'],iM-maxPos['x']))*xFak + sqr(min(maxPos['y'],jM-maxPos['y']))*yFak; for j:=0 to jM-1 do begin dj:=abs(j-schiebung['y']); if jM-dj<dj then @@ -2171,7 +2174,7 @@ begin di:=abs(i-schiebung['x']); if iM-di<di then di:=iM-di; - wert:=(sqr(di)*xFak+sqr(dj)*yFak)/(sqr(maxPos['x'])*xFak+sqr(maxPos['y'])*yFak); + wert:=sqrt((sqr(di)*xFak+sqr(dj)*yFak)/radius); if wert > 0.6 then wert:=0 else if wert > 0.4 then |