vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Laserlinie! 
Autor: blink-182
Datum: 31.01.06 17:32

Hi,
ich habe 2 Bilder, auf denen die selbe Szene zu sehen ist. EInmal mit LAserlinie und einmal ohne. nun möchte ich diese Laserlinie herausfiltern. Dazu jabe ich eine Funktion geschrieben. LEider braucht diese aber recht lange. Deshalb wollte ich euch mal fragen, wie man diese noch geschwindigkeitsoptimieren kann.

hier der Code:
    Public Sub Entfernungsberechnung(ByVal strPfadBildMit As String, ByVal _
      strPfadBildOhne As String, ByVal intAktuellerSchnitt As Integer)
        Dim y As Integer
        Dim x As Integer
        Dim byteRMax As Byte
        Dim bmpBildMit As Bitmap = New Bitmap(strPfadBildMit)
        Dim bmpBildOhne As Bitmap = New Bitmap(strPfadBildOhne)
        Dim colorRgbMit As Color
        Dim colorRgbOhne As Color
        Dim byteRed As Byte
        Dim intDurchschnitt As Integer
        Dim byteCount As Byte
        Dim intTeiler As Integer
        Dim intPunktesumme As Integer
        'Laserlinienerkennung: Bild 1: Mit laserlinie Bild 2: Ohne Laserlinie 
        ' ,Bilder sind hochkant
        For x = intRandUnten To 2048 - intRandOben 'Linien von unteren 
        ' Startwert bis oberen Endwert abscannen
            byteRMax = 0 ' Rmax für neue Zeile = 0
            For y = intRandLinks To 1536 - intRandRechts 'Pixel
                colorRgbMit = bmpBildMit.GetPixel(x, y) 'RGB Wert vom Pixel des 
                ' Bildes mit Laserlinie
                colorRgbOhne = bmpBildOhne.GetPixel(x, y) 'RGB Wert vom Pixel 
                ' des Bildes ohne Laserlinie
                byteRed = colorRgbMit.R - colorRgbOhne.R ' Differenz der 
                ' Rotwerte
                If (byteRed > byteRMax And byteRed > 30) Then ' Wenn 
                ' byteRed > 30 und größer als der MAximalwert in dieser Zeile
                    byteRMax = byteRed
                    intRotMaxPosition(y) = x
                End If
            Next
        Next
        'fehlerhafte Punkte (zweit weg von Durchschnittswert von 5 Punkten) 
        ' herausfiltern
        'Durchschnittswerte von 5-Fehlerpunkte Bilden und speichern
        For x = intRandUnten + 4 To 2048 - intRandOben Step 5
            intDurchschnitt = (intRotMaxPosition(x - 4) + intRotMaxPosition(x - _
              3) + intRotMaxPosition(x - 2) + intRotMaxPosition(x - 1) + _
              intRotMaxPosition(x)) / 5
            intTeiler = 0
            intPunktesumme = 0
            For byteCount = 0 To 4
                If (intRotMaxPosition(x - byteCount) <= intDurchschnitt + 8 And _
                  intRotMaxPosition(x - byteCount) >= intDurchschnitt - 8) Then
                    intTeiler = intTeiler + 1
                    intPunktesumme = intPunktesumme + intRotMaxPosition(x - _
                      byteCount)
                End If
            Next
            If (intTeiler = 0) Then
                intEnfernungPunkte(intAktuellerSchnitt, System.Math.Round(x / _
                  5)) = -100
            Else
                intEnfernungPunkte(intAktuellerSchnitt, System.Math.Round(x / _
                  5)) = System.Math.Round(intPunktesumme / intTeiler)
            End If
        Next
        ' Ergebnisse in einem Testbild zur Kontrolle speichern (dieser Schritt 
        ' fällt später weg)
        For x = intRandUnten + 4 To 2048 - intRandOben Step 5
            bmpBildMit.SetPixel(x, intEnfernungPunkte(intAktuellerSchnitt, _
              System.Math.Round(x / 5)), Color.Blue)
        Next
        bmpBildMit.Save("Kontrolle" & strPfadBildMit)
    End Sub
Die Bilder sind jeweils mit einer 3MP Kamera aufgenommen und zwar HOCHKANT!
die Laserlinie verläuft in geschlängelter Form von oben nach unten.
Bitte den Code optimieren (aber auch gerne andere geschwindigkeitsratschläge wie etwas nur jede 2. Zeile Scannen etc)

THX FLO
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Laserlinie!1.424blink-18231.01.06 17:32
Re: Laserlinie!1.028blink-18201.02.06 17:44
Re: Laserlinie!1.161Wolf mit Schnul...01.02.06 17:55
Re: Laserlinie!1.042blink-18201.02.06 18:07
Re: Laserlinie!1.037Melkor01.02.06 18:14
Re: Laserlinie!964blink-18201.02.06 18:22
Re: Laserlinie!998blink-18201.02.06 21:50
Re: Laserlinie!958Melkor01.02.06 22:02
Re: Laserlinie!1.342blink-18201.02.06 22:13
Re: Laserlinie!1.147blink-18202.02.06 18:12
Re: Laserlinie!934Melkor03.02.06 09:20
Re: Laserlinie!1.513Melkor03.02.06 13:43
Re: Laserlinie!992blink-18203.02.06 16:52
Re: Laserlinie!1.048blink-18203.02.06 18:23

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel