Il tuo compito è scrivere un programma che acquisisca un'immagine di input ed esegua il rilevamento dei bordi per diventare un'immagine di output.
Il rilevamento dei bordi funziona come segue (se non chiaro, vedere rilevamento dei bordi sobel ):
- Il valore per un pixel è la luminosità totale di un pixel, quindi se è a colori, dovrai prima convertirlo in scala di grigi (per mantenere le cose semplici e in grado di giocare a golf, puoi prendere il valore medio per R, G e B).
- Le formule per G xe G y per pixel p (i, j) sono:
- G x = -1 * p (i-1, j-1) - 2 * p (i-1, j) - 1 * p (i-1, j + 1) + 1 * p (i + 1, j -1) + 2 * p (i + 1, j) + 1 * p (i + 1, j + 1)
- G y = -1 * p (i-1, j-1) - 2 * p (i, j-1) - 1 * p (i + 1, j-1) + 1 * p (i-1, j +1) + 2 * p (i, j + 1) + 1 * p (i + 1, j + 1)
- Il valore per la dimensione del bordo in quel pixel è quindi: √ (G x 2 + G y 2 )
L'immagine di output è per ogni pixel la dimensione del bordo √ (G x 2 + G y 2 ) come scala di grigi.
bonus:
- Eseguire una sfocatura gaussiana per appianare l'immagine prima che inizi il rilevamento dei bordi, per omettere eventuali bordi più piccoli. Questo dà un bonus del -30% sul risultato finale.
- Prendi in considerazione l'angolo del bordo. Dai un po 'di colore al pixel di output, prendendo lo stesso valore di scala di grigi e aggiungendo il colore da una ruota dei colori usando l'angolo ottenuto dalla formula arctan (G y / G x ). Questo dà un altro bonus del -30% sul risultato finale.
Regole:
- È possibile omettere il valore per i pixel di bordo e impostarli su nero oppure utilizzare 0 per qualsiasi pixel esterno all'immagine.
- L'immagine di uscita deve essere in un formato immagine che può essere aperto sulla maggior parte dei computer.
- L'output deve essere scritto su disco o può essere trasferito in un file.
- L'input viene fornito come argomento della riga di comando, sotto forma di un percorso relativo all'immagine, oppure reindirizzato dalla riga di comando.
- Questo è il codice golf, quindi vince il codice più breve in byte!