Elaborazione di un immagine con vb

di il
1 risposte

Elaborazione di un immagine con vb

Salve a tutti!vorrei chiedervi un aiuto per un lavoro che sto portando avanti con la mia scuola
quello che deve fare il mio programma principalmente è quello di prendere un immagine (si tratta dell'immagine di un foglio di teflon pieno di fori dovuti al radon) e per prima cosa deve "filtrare" l'immagine per togliere le impurità o i segni che poi possono disturbare il conteggio dei buchi sempre con visual basic.
qualcuno saprebbe darmi qualche consiglio su come muovermi per il codice del programma??
Premetto di aver già provato a crearne uno. ho usato le funzioni GetPixel (per sapere di che colore è il pixel che prendo in esame) e SetPixel (per impostare il pixel in esame di un colore). sono partito dal presupposto che un pixel deve essere cancellato se nelle sue vicinanze non sono presenti delle aree di nero in percentuale maggiore rispetto al bianco. il problema sta nel fatto che quando avvio il programma invece di cancellare una linea e lasciando invariato il colore del cerchio, cancella tutto!!
vi scrivo di seguito il codice del programma se può esservi utile!

k = 0
    filtroA = 0
    filtroB = 0
    filtroC = 0
    filtroD = 0
    For x = 0 To 2700 Step 1
        'a = y
        For y = 0 To 2000 Step 1
            'b = x
            colorepixel = GetPixel(pct_immagine.hdc, x, y)
            If colorepixel = 0 Then
                'scansione quadrato A (superiore sinistro)
                For i = (y - 3) To y Step 1
                    For j = (x - 3) To x Step 1
                        pixel(k) = GetPixel(pct_immagine, j, i)
                        k = k + 1
                    Next j
                Next i
                For w = 0 To 16 Step 1
                    If pixel(w) = 0 Then
                        filtroA = filtroA + 1
                    End If
                Next w
                k = 0
                'scansione quadrato B (superiore destro)
                For i = (y - 3) To y Step 1
                    For j = x To (x + 3) Step 1
                        pixel(k) = GetPixel(pct_immagine, j, i)
                        k = k + 1
                    Next j
                Next i
                For w = 0 To 16 Step 1
                    If pixel(w) = 0 Then
                        filtroB = filtroB + 1
                    End If
                Next w
                k = 0
                'scansione quadrato C (inferiore sinistro)
                For i = y To (y + 3) Step 1
                    For j = (x - 3) To x Step 1
                        pixel(k) = GetPixel(pct_immagine, j, i)
                        k = k + 1
                    Next j
                Next i
                For w = 0 To 16 Step 1
                    If pixel(w) = 0 Then
                        filtroC = filtroC + 1
                    End If
                Next w
                k = 0
                'scansione quadrato D (inferiore destro)
                For i = y To (y + 3) Step 1
                    For j = x To (x + 3) Step 1
                        pixel(k) = GetPixel(pct_immagine, j, i)
                        k = k + 1
                    Next j
                Next i
                For w = 0 To 16 Step 1
                    If pixel(w) = 0 Then
                        filtroD = filtroD + 1
                    End If
                Next w
                k = 0
                
                If (filtroA < 14) Or (filtroB < 14) Or (filtroC < 14) Or (filtroD < 14) Then
                    SetPixel pct_immagine.hdc, x, y, vbRed
                End If
                filtroA = 0
                filtroB = 0
                filtroC = 0
                filtroD = 0
            End If
        Next y
    Next x
questo avviene premendo un pulsante!
grazie per la vostra attenzione e collaborazione!se avete qualche idea sono lieto di ascoltarla!
grazie ancora! Andrea

1 Risposte

  • Re: Elaborazione di un immagine con vb

    Scusaaatemiiii tutti quanti!!ho risolto il problemaa!!non andava a causa di un mio errore di compilazione!
    ah cavoli che pirla!!
    scusatemi ancora! vi inserisco il codice corretto con una modifica per renderlo più affidabile nel caso a qualcuno possa servire in futuro!
    
    Private Sub cmd_filtra_Click()
    For x = 0 To 3200 Step 1
        For y = 0 To 2000 Step 1
            colorepixel = GetPixel(pct_immagine.hdc, x, y)
            If colorepixel = 0 Then
                'scansione quadrato A (superiore sinistro)
                For i = (x - 4) To (x - 1) Step 1
                    For j = (y - 4) To (y - 1) Step 1
                        pixel(k) = GetPixel(pct_immagine.hdc, i, j)
                        k = k + 1
                    Next j
                Next i
                For i = 0 To 15 Step 1
                    If pixel(i) = 0 Then
                        filtroA = filtroA + 1
                    End If
                Next i
                k = 0
                'scansione quadrato B (superiore destro)
                For i = (x + 1) To (x + 4) Step 1
                    For j = (y - 4) To (y - 1) Step 1
                        pixel(k) = GetPixel(pct_immagine.hdc, i, j)
                        k = k + 1
                    Next j
                Next i
                For i = 0 To 15 Step 1
                    If pixel(i) = 0 Then
                        filtroB = filtroB + 1
                    End If
                Next i
                k = 0
                'scansione quadrato C (inferiore sinistro)
                For i = (x - 4) To (x - 1) Step 1
                    For j = (y + 1) To (y + 4) Step 1
                        pixel(k) = GetPixel(pct_immagine.hdc, i, j)
                        k = k + 1
                    Next j
                Next i
                For i = 0 To 15 Step 1
                    If pixel(i) = 0 Then
                        filtroC = filtroC + 1
                    End If
                Next i
                k = 0
                'scansione quadrato D (inferiore destro)
                For i = (x + 1) To (x + 4) Step 1
                    For j = (y + 1) To (y + 4) Step 1
                        pixel(k) = GetPixel(pct_immagine.hdc, i, j)
                        k = k + 1
                    Next j
                Next i
                For i = 0 To 15 Step 1
                    If pixel(i) = 0 Then
                        filtroD = filtroD + 1
                    End If
                Next i
                k = 0
                    
                If (filtroA < 16) And (filtroB < 16) And (filtroC < 16) And (filtroD < 16) Then
                    SetPixel pct_immagine.hdc, x, y, vbRed
                End If
                filtroA = 0
                filtroB = 0
                filtroC = 0
                filtroD = 0
            End If
        Next y
    Next x
    End Sub
    
    aggiungo che per poter utilizzare le funzioni GetPixel e SetPixel bisogna aggiungere sul generale le seguenti due librerie:
    
    Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
    Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal Xc As Long, ByVal Yc As Long) As Long
    
    in questo modo si possono usare!
Devi accedere o registrarti per scrivere nel forum
1 risposte