Hallo Leute,
ich bin in Delphi ein Neueinsteiger und muss jetzt ein Programm entwickeln wo ich nicht weiter komme
, 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?!
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;
{--}