Algoritmo della linea di Bresenham: Rendering delle linee efficiente e pixel perfetto per la visione artificiale
Di Fouad Sabry
()
Info su questo ebook
Che cos'è l'algoritmo della linea di Bresenham
L'algoritmo della linea di Bresenham è un algoritmo di disegno di linee che determina i punti di un raster n-dimensionale che dovrebbero essere selezionati per formare una chiusura approssimazione ad una retta tra due punti. È comunemente usato per disegnare primitive di linea in un'immagine bitmap, poiché utilizza solo addizione, sottrazione e spostamento di bit di numeri interi, che sono tutte operazioni molto economiche nelle architetture di computer storicamente comuni. È un algoritmo di errore incrementale e uno dei primi algoritmi sviluppati nel campo della computer grafica. Per disegnare cerchi è possibile utilizzare un'estensione dell'algoritmo originale chiamato algoritmo del cerchio del punto medio.
Come trarne vantaggio
(I) Approfondimenti e convalide sui seguenti argomenti:
Capitolo 1: Algoritmo della linea di Bresenham
Capitolo 2: Algoritmo del disegno della linea
Capitolo 3: Algoritmo della linea di Xiaolin Wu
Capitolo 4: Analizzatore differenziale digitale (algoritmo grafico)
Capitolo 5: Algoritmo del cerchio del punto medio
Capitolo 6: Regola della catena
Capitolo 7: Derivata
Capitolo 8: Pendenza
Capitolo 9: Calcolo differenziale
Capitolo 10: Algoritmi di tracciamento per l'insieme di Mandelbrot
(II) Risposte al pubblico domande principali sull'algoritmo della linea di Bresenham.
(III) Esempi reali dell'utilizzo dell'algoritmo della linea di Bresenham in molti campi.
A chi è rivolto questo libro
Professionisti, studenti universitari e laureati, appassionati, hobbisti e coloro che desiderano andare oltre le conoscenze o le informazioni di base per qualsiasi tipo di algoritmo della linea Bresenham.
Correlato a Algoritmo della linea di Bresenham
Titoli di questa serie (100)
Equalizzazione dell'istogramma: Miglioramento del contrasto dell'immagine per una migliore percezione visiva Valutazione: 0 su 5 stelle0 valutazioniVisione computerizzata: Esplorare le profondità della visione artificiale Valutazione: 0 su 5 stelle0 valutazioniRiduzione del rumore: Miglioramento della chiarezza, tecniche avanzate per la riduzione del rumore nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniTrasformata del radon: Svelare modelli nascosti nei dati visivi Valutazione: 0 su 5 stelle0 valutazioniMappatura dei toni: Mappatura dei toni: prospettive illuminanti nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniDiffusione anisotropa: Miglioramento dell'analisi delle immagini attraverso la diffusione anisotropa Valutazione: 0 su 5 stelle0 valutazioniRetinex: Svelare i segreti della visione computazionale con Retinex Valutazione: 0 su 5 stelle0 valutazioniTrasformazione di Hough: Svelare la magia della trasformazione di Hough nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniSistema di gestione del colore: Ottimizzazione della percezione visiva negli ambienti digitali Valutazione: 0 su 5 stelle0 valutazioniVisione artificiale subacquea: Esplorando le profondità della visione artificiale sotto le onde Valutazione: 0 su 5 stelle0 valutazioniCorrezione gamma: Migliorare la chiarezza visiva nella visione artificiale: la tecnica di correzione gamma Valutazione: 0 su 5 stelle0 valutazioniModello di aspetto del colore: Comprendere la percezione e la rappresentazione nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniOmografia: Omografia: trasformazioni nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniVisione stereoscopica del computer: Esplorare la percezione della profondità nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniScala dello spazio: Esplorare le dimensioni nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniGruppo congiunto di esperti fotografici: Sfruttare la potenza dei dati visivi con lo standard JPEG Valutazione: 0 su 5 stelle0 valutazioniFunzione di corrispondenza dei colori: Comprendere la sensibilità spettrale nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniRidipintura: Colmare le lacune nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniIstogramma dell'immagine: Svelare intuizioni visive, esplorare le profondità degli istogrammi delle immagini nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniConsenso del campione casuale: Stima robusta nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniRilevatore di bordi astuto: Svelare l'arte della percezione visiva Valutazione: 0 su 5 stelle0 valutazioniModello a colori: Comprendere lo spettro della visione artificiale: esplorare i modelli di colore Valutazione: 0 su 5 stelle0 valutazioniSpazio colore: Esplorare lo spettro della visione artificiale Valutazione: 0 su 5 stelle0 valutazioniStima della posa del corpo articolato: Sbloccare il movimento umano nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniMappatura dei colori: Esplorare la percezione visiva e l'analisi nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniRilevamento delle macchie: Scoprire modelli nei dati visivi Valutazione: 0 su 5 stelle0 valutazioniCompressione delle immagini: Tecniche efficienti per l'ottimizzazione dei dati visivi Valutazione: 0 su 5 stelle0 valutazioniProfilo colore: Esplorare la percezione visiva e l'analisi nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniTrasformazione affine: Sbloccare le prospettive visive: esplorare la trasformazione affine nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniTrasformazione di feature invarianti di scala: Svelare il potere della trasformazione delle caratteristiche invarianti su scala nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioni
Ebook correlati
Algoritmo di disegno di linee: Padroneggiare le tecniche per il rendering di immagini di precisione Valutazione: 0 su 5 stelle0 valutazioniInterpolazione bilineare: Miglioramento della risoluzione e della chiarezza dell'immagine tramite l'interpolazione bilineare Valutazione: 0 su 5 stelle0 valutazioniModellazione e rendering basati su immagini: Esplorare il realismo visivo: tecniche di visione artificiale Valutazione: 0 su 5 stelle0 valutazioniComputer grafica bidimensionale: Esplorazione del regno visivo: computer grafica bidimensionale nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniMetodo di impostazione del livello: Avanzamento della visione artificiale, esplorazione del metodo dell'impostazione dei livelli Valutazione: 0 su 5 stelle0 valutazioniRegolazione del pacchetto: Ottimizzazione dei dati visivi per una ricostruzione precisa Valutazione: 0 su 5 stelle0 valutazioniHashing geometrico: Algoritmi efficienti per il riconoscimento e la corrispondenza delle immagini Valutazione: 0 su 5 stelle0 valutazioniTrasformazione lineare diretta: Applicazioni pratiche e tecniche nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniPartizionamento binario dello spazio: Esplorazione del partizionamento binario dello spazio: fondamenti e applicazioni nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniMosaicazione di documenti: Sbloccare intuizioni visive attraverso il mosaico di documenti Valutazione: 0 su 5 stelle0 valutazioniRimozione delle linee nascoste: Svelare l'invisibile: i segreti della visione artificiale Valutazione: 0 su 5 stelle0 valutazioniTensore trifocale: Esplorare la profondità, il movimento e la struttura nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniModello di fotocamera stenopeica: Comprendere la prospettiva attraverso l'ottica computazionale Valutazione: 0 su 5 stelle0 valutazioniComputer grafica della radiosità: Avanzamento della visualizzazione attraverso la radiosità nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniGrafica vettoriale: Padroneggiare la grafica vettoriale nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniClotoidi Valutazione: 0 su 5 stelle0 valutazioniPrimitivo geometrico: Esplorazione dei fondamenti e delle applicazioni nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniEsercizi di matematica: analisi numerica Valutazione: 5 su 5 stelle5/5Trasformazione di Hough: Svelare la magia della trasformazione di Hough nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniGrafica raster: Comprendere i fondamenti della grafica raster nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniEditor di grafica raster: Trasformare le realtà visive: padroneggiare gli editor grafici raster nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniTagli del grafico di visione artificiale: Esplorazione dei tagli grafici nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniGeometria descrittiva: Sbloccare il regno visivo: esplorare la geometria descrittiva nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniRilevatore di bordi astuto: Svelare l'arte della percezione visiva Valutazione: 0 su 5 stelle0 valutazioniHTML5 canvas in tempo reale (estratto) Valutazione: 0 su 5 stelle0 valutazioniAnalisi numerica Valutazione: 0 su 5 stelle0 valutazioniCorrelazione incrociata: Sbloccare i modelli nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniComposizione alfa: Padroneggiare l'arte della composizione delle immagini nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioniEqualizzazione dell'istogramma: Miglioramento del contrasto dell'immagine per una migliore percezione visiva Valutazione: 0 su 5 stelle0 valutazioniMappatura dei colori: Esplorare la percezione visiva e l'analisi nella visione artificiale Valutazione: 0 su 5 stelle0 valutazioni
Intelligenza artificiale e semantica per voi
Il Terzo Like Valutazione: 0 su 5 stelle0 valutazioniGuida Intelligenza Artificiale Valutazione: 0 su 5 stelle0 valutazioniANonniMus: Vecchi rivoluzionari contro giovani robot Valutazione: 0 su 5 stelle0 valutazioni
Recensioni su Algoritmo della linea di Bresenham
0 valutazioni0 recensioni
Anteprima del libro
Algoritmo della linea di Bresenham - Fouad Sabry
Capitolo 1: Algoritmo di linea di Bresenham
L'algoritmo di linea di Bresenham è una procedura di disegno al tratto che identifica i punti raster n-dimensionali che devono essere selezionati per approssimare una linea retta tra due punti. Viene spesso utilizzato per disegnare primitive di linea in un'immagine bitmap (ad esempio, sullo schermo di un computer) poiché richiede solo l'addizione di numeri interi, la sottrazione e lo spostamento di bit, che sono tutte operazioni abbastanza economiche nelle architetture di computer storicamente prevalenti. È uno dei primi algoritmi creati nel campo della computer grafica ed è un algoritmo di errore incrementale. Una modifica dell'algoritmo originale può essere utilizzata per creare cerchi.
Mentre le tecniche in grado di antialiasing come l'algoritmo di Wu sono ampiamente utilizzate anche nella moderna computer grafica, l'algoritmo di linea di Bresenham rimane significativo grazie alla sua velocità e semplicità. L'algoritmo è utilizzato nei plotter e nei chip grafici delle schede grafiche contemporanee. Presente anche in numerose librerie di grafica software. A causa della sua semplicità, l'algoritmo viene spesso implementato nell'hardware grafico o nel firmware delle schede grafiche attuali.
Oggi, il termine Bresenham
si riferisce a una famiglia di algoritmi che estendono o alterano l'approccio originale di Bresenham.
L'algoritmo di linea di Bresenham prende il nome da Jack Elton Bresenham, il dipendente IBM che lo creò nel 1962. Nel 2001, Bresenham ha pubblicato:
Lavoravo nel laboratorio di calcolo del laboratorio di sviluppo IBM di San Jose. Attraverso il terminale della macchina da scrivere 1407, un plotter Calcomp era collegato a un IBM 1401. L'algoritmo fu utilizzato in produzione nell'estate del 1962, o forse un mese prima. Calcomp (Jim Newland e Calvin Heft) aveva copie dei programmi perché le aziende li condividevano apertamente all'epoca. Quando tornai a Stanford nell'autunno del 1962, ne donai una copia alla biblioteca del centro di calcolo di Stanford. Alla convention nazionale dell'ACM del 1963 a Denver, in Colorado, fu accettata una descrizione della routine di disegno al tratto. In quell'anno, solo l'agenda dei relatori e gli argomenti furono pubblicati in un numero di Comunicazioni dell'ACM. Dopo la mia presentazione, qualcuno dell'IBM Systems Journal mi ha chiesto se potevano pubblicare il lavoro. Acconsentii volentieri e fu pubblicato nel 1965.
L'approccio di Bresenham è stato ampliato per generare cerchi, ellissi, curve di Bézier cubiche e quadratiche, nonché versioni native anti-aliasing di queste curve.
Verranno utilizzate le convenzioni successive:
La coordinata in alto a sinistra è (0,0), in modo tale che le coordinate dei pixel crescano nelle direzioni destra e in basso (ad esempio, il pixel in (7,4) è direttamente sopra il pixel in (7,5)), mentre la coordinata in basso a destra è (1,1).
I centri dei pixel hanno coordinate intere.
I punti finali della linea sono i pixel in corrispondenza (x_{0},y_{0}) e (x_{1},y_{1}) , dove la prima coordinata rappresenta la colonna e la seconda coordinata rappresenta la riga.
L'algoritmo verrà inizialmente presentato solo per l'ottante in cui il segmento scende e verso destra ( x_{0}\leq x_{1} e y_{0}\leq y_{1} ), e la sua proiezione orizzontale x_{1}-x_{0} è più lunga della proiezione verticale y_{1}-y_{0} (la linea ha una pendenza positiva inferiore a 1).
In questo ottavo, per ogni colonna x compresa tra x_{0} e x_{1} , La tecnica calcola esattamente una riga y che contiene un pixel della linea, mentre ogni riga compresa tra y_{0} e y_{1} può contenere più pixel rasterizzati.
La tecnica di Bresenham seleziona l'intero y che corrisponde al centro del pixel più vicino all'ideale (frazionario) y per lo stesso x; Nelle colonne successive, y può rimanere invariato o aumentare di 1. L'equazione generale della retta che passa per i punti finali è:
{\frac {y-y_{0}}{y_{1}-y_{0}}}={\frac {x-x_{0}}{x_{1}-x_{0}}} .
Poiché abbiamo la colonna, x, possiamo ottenere la riga del pixel, y, arrotondando questo numero all'intero più vicino:
y={\frac {y_{1}-y_{0}}{x_{1}-x_{0}}}(x-x_{0})+y_{0}.
La pendenza (y_{1}-y_{0})/(x_{1}-x_{0}) dipende solo dalle coordinate del punto finale e può essere precalcolata, e l'ideale y per i valori interi successivi di x può essere calcolato a partire dalla y_{0} pendenza e aggiungendo ripetutamente.
In pratica, l'algoritmo non mantiene le informazioni sulle coordinate y, che aumentano di m = ∆y/∆x ogni volta che la x aumenta di uno; Mantiene un limite di errore a ogni livello, che mostra la distanza tra (a) il punto in cui la linea esce dal pixel e (b) il bordo superiore del pixel.
Questo valore viene prima impostato su {\displaystyle y_{0}-0.5} (a causa dell'utilizzo delle coordinate centrali del pixel), ogni volta che la coordinata x viene incrementata di uno, m viene aggiunto.
Ogni volta che l'imprecisione è maggiore di 0,5, siamo consapevoli che la linea si è spostata di un pixel verso l'alto, dobbiamo incrementare la coordinata y e sottrarne una dall'errore per riflettere la distanza dalla parte superiore del nuovo pixel.
L'algoritmo di Bresenham deve essere derivato in due passaggi. La prima fase consiste nel tradurre la forma dell'equazione di una retta in una forma diversa, e quindi utilizzare questa nuova equazione per tracciare una linea basata sul concetto di accumulo di errori.
La forma dell'intercetta di pendenza di una linea è scritta come
y=f(x)=mx+bdove m è la pendenza e b è l'intercetta y.
Poiché questa è una funzione di solo x , non può simboleggiare una linea verticale.
Pertanto, sarebbe utile rendere questa equazione scritta in funzione di entrambi x e y , in grado di disegnare linee con qualsiasi angolo.
L'angolo (o pendenza) di una linea può essere indicato come salita su corsa
o . \Delta y/\Delta x
Quindi, usando operazioni algebriche,
{\begin{aligned}y&=mx+b\\y&={\frac {(\Delta y)}{(\Delta x)}}x+b\\(\Delta x)y&=(\Delta y)x+(\Delta x)b\\0&=(\Delta y)x-(\Delta x)y+(\Delta x)b\end{aligned}}Lasciando che quest'ultima equazione sia una funzione di x e y , può anche essere scritto come
{\displaystyle f(x,y):=Ax+By+C=0}dove si trovano le costanti
{\displaystyle A=\Delta y=y_{1}-y_{0}}{\displaystyle B=-\Delta x=-(x_{1}-x_{0})}{\displaystyle C=(\Delta x)b=(x_{1}-x_{0})b}La linea viene quindi definita per alcune costanti A , B , e C ovunque f(x,y)=0 .
Cioè, per tutti coloro che (x,y) non sono in linea, f(x,y)\neq 0 .
Questa forma coinvolge solo i numeri interi se x e y sono interi, poiché le costanti A , B , e C sono definite come interi.
Ad esempio, la riga {\textstyle y={\frac {1}{2}}x+1} potrebbe essere scritta come f(x,y)=x-2y+2 .
Il punto (2,2) è in gioco.
f(2,2)=x-2y+2=(2)-2(2)+2=2-4+2=0Inoltre, il punto (2,3) non è in discussione.
f(2,3)=(2)-2(3)+2=2-6+2=-2nessuno dei due è il punto (2,1)
f(2,1)=(2)-2(1)+2=2-2+2=2Si noti che i punti (2,1) e (2,3) si trovano sui lati opposti della linea e f(x,y) valutano positivo o negativo.
Una linea divide un piano a metà e il mezzo piano che ha un f(x,y) negativo può essere chiamato semipiano negativo, l'altra metà è nota come semipiano positivo.
Questa osservazione è cruciale per il resto della derivazione.
Ovviamente, il punto di partenza è sulla linea.
f(x_{0},y_{0})=0Solo perché la linea è definita per iniziare e terminare in coordinate intere può essere disegnata (anche se è del tutto ragionevole voler disegnare una linea con punti finali non interi).
Tenendo presente che la pendenza è al massimo 1 , si pone ora il problema se il punto successivo debba essere a (x_{0}+1,y_{0}) o (x_{0}+1,y_{0}+1) .
Forse intuitivamente, il punto dovrebbe essere scelto in base a quale è più vicino alla linea in x_{0}+1 .
Se è più vicino al punto precedente, aggiungilo sulla linea, se il secondo allora il secondo.
Per risolvere questo problema, valutare la funzione di linea tra queste due posizioni:
{\displaystyle f(x_{0}+1,y_{0}+{\tfrac {1}{2}})}Se il valore di questo è positivo, allora la linea ideale è al di sotto del punto medio e più vicina al punto candidato (x_{0}+1,y_{0}+1) ; Di conseguenza, la coordinata y è andata avanti.
In caso contrario, la linea ottimale si trova a metà o al di sopra di essa, inoltre la coordinata y non si è spostata; in questo caso scegliere il punto (x_{0}+1,y_{0}) .
In questo punto medio, il valore della funzione linea è l'unico determinante di quale punto deve essere scelto.
La figura a destra mostra il punto selezionato (2,2) in blu, insieme a due punti potenziali (3,2) in verde (3,3). Il punto nero (3, 2,5) si trova al centro dei due punti candidati.
Invece di valutare f(x,y) nei punti medi, in alternativa, si può utilizzare la differenza tra i punti. Questo metodo alternativo consente l'aritmetica solo intera, che è