Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lineare Steigung eines schwarzen Balkens in einer BMP finden (https://www.delphipraxis.net/99891-lineare-steigung-eines-schwarzen-balkens-einer-bmp-finden.html)

Alex_ITA01 19. Sep 2007 09:51


Lineare Steigung eines schwarzen Balkens in einer BMP finden
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
ich habe folgendes Problem.

Ich soll in einer BMP ein waagerechten schwarzen Balken erkennen.
Dann soll geprüft werden, ob der schwarze Balken mindestens 3 Pixel "hoch" ist.
Das kann ich alles. Ist also kein Problem!

Jetzt kommts aber...

Dieser Balken kann jetzt über die komplette Bildbreite linear ansteigen. Das heißt, er ist nicht mehr ganz waagerecht sondern nach 500 Pixeln (auf die Breite bezogen) steigt er 1 Pixel an und verläuft da weiter waagerecht. Die "Höhe" des Balkens verändert sich auch nach dem Anstieg nicht. Dort sind auch alle 3 Pixel vorhanden (nur eben alles 1 Pixel höher).
Wisst ihr, ob es eine Funktion in Delphi gibt, die mir ein linearen Trend ausrechnen kann?
Das heißt ich will wissen, ab welcher Spalte (in Pixel) ich nicht mehr waagerecht sondern eben ein Pixel weiter oben und dann wieder waagerecht gucken muss.
Ich habe mal zwei Grafiken angehängt.

Beide besitzen ein gültigen Balken (in dem Beispiel glaube nur 2 Pixel hoch).
Nur das zweite Bild steigt eben minimal an über die Balkenlänge.

Ich hoffe ihr versteht mein Problem und könnt mir helfen.

MFG Alex

s-off 19. Sep 2007 10:35

Re: Lineare Steigung eines schwarzen Balkens in einer BMP fi
 
Hallo,

lt. Deiner Aussage kannst Du ja den Anfang der Linie in jedem Fall erkennen, egal ob linear ansteigend, oder nicht.
Wenn Du nun dieser Linie folgst, bis zu dem Punkt, wo sich der Farbwert ändert,

1. prüfst Du das Pixel oberhalb auf die Ursprungsfarbe und gehst ggf. dort dann waagerecht weiter (Anstieg nach oben) - wenn diese Prüfung fehlschlägt
2. prüfst Du das Pixel unterhalb auf die Ursprungsfarbe und gehst ggf. dort dann waagerecht weiter (Anstieg nach unten).

Wenn eine dieser beiden Varianten anschlägt, erhöhst Du einen Zähler - dieser stellt dann die Anzahl der Steigungen dar. Die Höhe wäre dann am Ende = Zähler + 1.

Das Prozedere betreibst Du so lange, bis Du weder nach oben, noch nach unten Deine Ursprungsfarbe widerfindest, also sowohl 1. als auch 2. fehlschlagen. Denn dort ist dann die Linie zu ende.

Dieses Vorgehen gilt nur für einen Anstieg von einem Pixel!
Sollte der Anstieg > 1 Pixel sein, musst Du ggf. in beide Richtungen bis zum Rand Deines Canvas prüfen.

Alex_ITA01 19. Sep 2007 10:40

Re: Lineare Steigung eines schwarzen Balkens in einer BMP fi
 
Danke erstmal für den Tip.
Werde mir das mal durch den Kopf gehen lassen.

Ich habe bei Excel eine Funktion gefunden (RGP) die eine Matrix von Punkten benötigt und dann einen linearen Trend ausgibt.
Eventuell gibts sowas ähnliches in Delphi...

Viele Grüße
Alex

turboPASCAL 19. Sep 2007 10:46

Re: Lineare Steigung eines schwarzen Balkens in einer BMP fi
 
Aslo wenn es nur um den Ansieg geht brauchst du ja nur das Bild am Anfang und am Ende scannen,
vorrausgesetzt der Balken ist immer über die gesammte Bilsbreite.
Das liest du in ein kleines 2D Array. Dann kannst du prüfen ob a) die Pixel in der Höhe 3 entspricht
und b) den Versatz zum anfang errechnen.

Code:
Bildbegin |  Bildende
0              0
0              0
0              1
0              1
0              1
0              0
1..............0
1              0
1..............0
0              0
0              0

1 = farbe des Balkens war schwarz / 0 = nix
Hier wäre der Versatz 2 zu 6 also 3% :gruebel:


//Edit: ... huch, wo kommen die beiden neuen Beiträge her ? Kein roter Kasten... :gruebel:

Alex_ITA01 19. Sep 2007 11:12

Re: Lineare Steigung eines schwarzen Balkens in einer BMP fi
 
Leider geht der schwarze Balken nicht über die komplette Bildbreite.
Er verläuft nur ungefähr so, wie in meinen angehängten Beispielen...

Gibts denn eine ähnliche Funktion wie bei Excel?

Viele Grüße,
Alex

s-off 19. Sep 2007 13:14

Re: Lineare Steigung eines schwarzen Balkens in einer BMP fi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ob es eine derartige Funktion gibt, weiss ich nicht.

Ich habe ein Beispiel angehängt - so würde ich es machen.

Einfach 'Draw' klicken, um die Linie zu zeichnen.
Dann 'Check' klicken, und im Memo schauen, wo es einen Anstieg bzw. Abstieg gibt.

Mit den Endkoordinaten.Y (Default 98 ) kannst Du rumspielen, um die Steigung zu ändern.

Edit: Ich hoffe, Du kommst ohne Kommentare klar.

Edit: neue Version des Beispiels hochgeladen

Alex_ITA01 19. Sep 2007 14:16

Re: Lineare Steigung eines schwarzen Balkens in einer BMP fi
 
Danke schön!
Werde es mir schnellstmöglich angucken.
MFG Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz