Sto cercando di imparare gli shader per implementare qualcosa nella mia app per iPhone. Finora ho compreso semplici esempi come la realizzazione di un'immagine a colori in scala di grigi, soglie, ecc. La maggior parte degli esempi comportano semplici operazioni in cui l'elaborazione dell'immagine di input pixel I(x,y)
produce una semplice modifica dei colori dello stesso pixelFiltro gaussiano con ombreggiatori OpenGL
Ma che ne dici di Convolution ?. Ad esempio, l'esempio più semplice sarebbe il filtro gaussiano,
in cui il pixel dell'immagine di uscita O(x,y)
dipende non solo da I(x,y)
ma anche da 8 pixel circostanti.
O(x,y) = (I(x,y)+ surrounding 8 pixels values)/9;
Normalmente, questo non può essere fatto con un singolo buffer di immagine o i pixel di ingresso cambieranno mentre il filtro viene eseguito. Come posso farlo con gli shader? Inoltre, dovrei gestire i bordi da solo? o c'è una funzione built-it o qualcosa che controlla l'accesso ai pixel non valido come I(-1,-1)
?
Grazie in anticipo
PS: sarò generoso (leggi: dare un sacco di punti);)
L'utilizzo dell'interpolazione lineare non è una novità. Dov'è il vantaggio del solito modo più semplice? Cerca le coordinate [-4, -2, 0, 2, 4] per ottenere un intervallo di 10 pixel e quindi applicare la ponderazione di ogni due texel? – djmj
@djmj - Non sono sicuro di seguirti. Che modo più semplice intendi? Quali sono i due texel a cui ti stai riferendo? Hai un riferimento che puoi indicare che descrive questo approccio? –
Vedere: http://drilian.com/journal/images/TextureGrid.png. Se si campiona a (2, 0.5) si otterrà il valore interpolato bilineare di pixel (1, 0) e (2, 0). Campionando a (2, 1) otterrai il valore medio dei 4 pixel vicini!Quindi usa solo un offset di 2 pixel e poi applica la ponderazione gaussiana. – djmj