summaryrefslogtreecommitdiff
path: root/werteunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2017-09-26 11:31:08 +0200
committerErich Eckner <git@eckner.net>2017-09-26 11:31:08 +0200
commitf9087da82461781ea6c7c45805f9d2ad58cce4af (patch)
tree09eeefa5f6511463ad732f0623b1bfad043d0c12 /werteunit.pas
parent9997fe40e2ba62d236a304696d58f39ada8a908c (diff)
downloadepost-f9087da82461781ea6c7c45805f9d2ad58cce4af.tar.xz
werteunit.pas: Filter repariert
Diffstat (limited to 'werteunit.pas')
-rw-r--r--werteunit.pas17
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