Roberts Edge Detector come utilizzare?


10

Sto cercando di utilizzare il rilevamento dei bordi di Roberts per elaborare un'immagine. Devo solo applicare entrambe le maschere all'immagine ed eseguire la convoluzione normalmente? Qualcuno potrebbe darmi la scomposizione di come utilizzare questo metodo di rilevamento dei bordi, mentre sto cercando di programmarlo per elaborare un'immagine in scala di grigi. Ho contorto l'immagine usando entrambi i kernel separatamente ma l'immagine ammaccava 'bene.

Grazie.

Risposte:


10

Robert's Cross è un po 'complicato perché non è una dimensione dispari (2x2 anziché 3x3 o 5x5). L'ho fatto usando numpy + scipy usando una maschera di convoluzione imbottita 3x3.

import sys
import numpy as np
from scipy import ndimage
import Image

roberts_cross_v = np.array( [[ 0, 0, 0 ],
                             [ 0, 1, 0 ],
                             [ 0, 0,-1 ]] )

roberts_cross_h = np.array( [[ 0, 0, 0 ],
                             [ 0, 0, 1 ],
                             [ 0,-1, 0 ]] )
def load_image( infilename ) :
    img = Image.open( infilename )
    img.load() 
    # note signed integer
    return np.asarray( img, dtype="int32" )

def save_image( data, outfilename ) :
    img = Image.fromarray( np.asarray( np.clip(data,0,255), dtype="uint8"), "L" )
    img.save( outfilename )

def roberts_cross( infilename, outfilename ) :
    image = load_image( infilename )

    vertical = ndimage.convolve( image, roberts_cross_v )
    horizontal = ndimage.convolve( image, roberts_cross_h )

    output_image = np.sqrt( np.square(horizontal) + np.square(vertical))

    save_image( output_image, outfilename )

infilename = sys.argv[1]
outfilename = sys.argv[2]
roberts_cross( infilename, outfilename )

Dalla voce di Wikipedia su Robert's Cross. http://en.wikipedia.org/wiki/Roberts_Cross

Immagine da Robert's Cross Entry su Wikipedia

L'output della mia sceneggiatura.

Il mio script di output


Riquadri ogni valore di pixel nell'immagine?
adamjmarkham,

Sì. "Np.sqrt (np.square (orizzontale) + np.square (verticale))" fornisce l'intensità del vettore tra le direzioni orizzontali e verticali.
David Poole,

@DavidPoole Il wiki del rilevatore di bordi di Robert è fantastico - semplice, al punto e illustrativo. Come / perché è sensibile al rumore VS altre misure del gradiente? Non esiste una sola "vera" sfumatura?
Spacey,

Sto cercando di implementare questa funzione in Python (versione di Spyder) ma non riesco a capire gli argomenti che prende e come dar loro da mangiare? che cos'è il nome file e il nome file esterno? Grazie Sam

il nome file è un'immagine in scala di grigi (1 piano). outfilename è solo un file di output su cui lo script scriverà. Le immagini di input / output possono essere jpeg, png, tif, ecc. La libreria di immagini (ora Pillow) interpreterà il formato dell'immagine in base all'estensione del file. Esempio: python3 rcross.py bicycle.jpg out.tif
David Poole
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.