Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Streifen in Bitmap finden (https://www.delphipraxis.net/138507-streifen-bitmap-finden.html)

ari-rakete 11. Aug 2009 17:22


Streifen in Bitmap finden
 
Hallo Leute,

ich bin in Delphi ein Neueinsteiger und muss jetzt ein Programm entwickeln wo ich nicht weiter komme :gruebel: , was folgende Aufgaben hat:


Ich suche Anregungen um meine Streifen (haben unterschiedliche Grauwerte, die ich mit einem entsprechenden Programm in einen bestimmten Wert umwandeln kann) in einen Bitmap zu ermitteln und zu charakterisieren...

- die Streifen (orderschiedliche Anzahl je nach Bild) sollen als Rechtecke in ein Bitmap gefunden werden
quasie der höchsten, die breitesten und tiefsten Punkte sollen Maßstab für das Rechteck haben
_____
|..xxx..|
|xxx...|
|..xx..|
|xxxxx|
-------
x:=Pixel
Probleme sind:
- die Streifen können sich überlagern oder unterbrochen sein, obwohl sie
zusammen sind; sie können unterschiedlich breit und lang sein (siehe Bild)

- wenn ich ein Pixel nach Spalte und später Zeile abfrage, muss das erste Pixel nicht das Höchste, Breiteste oder tiefste eines Rechteckes sein
- Pixel müssen so zusammen gehören, dass sie oberhalb oder unterhalb des Pixels ist.

- wenn das Programm alles durchläuft soll es feststellen ob der Pixel schon sich in einem Rechteck
befindet;
wenn nein soll er es als neues Rechteck speichern (quasi in ein Array mit laufender Nummer)
--> Ständig aktualisieren

- als weiteres sollen die Rechtecke markiert und gespeichert werden (mit ihren Koordinaten), damit
ich es später mit einen Kreuzkorrelationsprogramm mit dem anderen Bild (das zeitgleich in der
gleichen Ebene aufgenommen wurde) vergleichen werden kann um später die 3
Richtungskoordinaten im Raum zu errechnen und es in 3D darstellen kann

ich habe es schon mit Schleifen probiert, aber meine Variante ist nicht die beste mit 4 Schleifen...

Kann mir jemand Tipps geben, wie ich es umsetzen kann?! :coder2:

Danke.

Ariane

Code:

type
coordinate = record
x:Integer;
y: Integer;
end;
type
rechteck = record
linksOben = coordinate;
rechtsoben = coordinate;
linksUnten = coordinate;
rechtsUnten = coordinate;
end;
TForm1 = class(TForm)
    BildLaden: TButton;
    Image1: TImage;
    RechteckSuchen: TButton;
    Image2: TImage;
    OpenPictureDialog1: TOpenPictureDialog;
    Memo1: TMemo;
    NeuesBildSpeichern: TButton;
    procedure BildLadenClick(Sender: TObject);
    procedure SpeichernNeuesBildClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    x,y,r,g,b:Integer;
    Bildname: String;
    Verzeichnis: String;
    Bildauswahl: String;
    Bitmap: TBitmap;
    Procedure BildpunkteFinden;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{--}
function TForm1.BildpunkteFinden(bitmap: TBitmap): TBItmap;


type
    PCardinalArray= ^TCardinalArray;
    TCardinalArray= array[0..MaxInt shr 3-1] of Cardinal;


Var
   x,y:Integer;
   a,b:Integer; //überschreiben//
   v:Array of coordinate;
   ScanLine:PCardinalArray;
    rechteck:rechteck

begin
SetLength(v,100);
     for y:=0 to Bitmap.Height-1 do
      begin
           ScanLine:= Bitmap.ScanLine[y];
           for x:=0 to Bitmap.Width-1 do
           if ScanLine[x]>=250 then //Grauwert später über einen Scroll bestimmen bzw. einstellen//
            begin
                rechteck.linksoben.x:=x;
      rechteck.linksoben.y:=y;
      for a:=x to Bitmap.Width-1 do
      begin
      Inc(a); //wird um eins hochgezählt
      if ScanLine[a]>=250 then
      begin
         rechteck.rechtsoben.x:=a;
         rechteck.rechtsoben.y:=y;
      else
         begin
            break;
         end;
      
             
      end;
            end;
      end;
end;

{--}

jfheins 11. Aug 2009 17:35

Re: Streifen in Bitmap finden
 
Such dir da was aus: http://de.wikipedia.org/wiki/Kantenerkennung :stupid:

Klaus01 11. Aug 2009 18:09

Re: Streifen in Bitmap finden
 
.. und hier findest Du eine Implemetierung des Sobel-Operators.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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