In Avisynth
Avisource("D:\wherever\myfile.avi") DctFilter(1,1,1,1,1,1,.5,0)
Ci sono 8 parametri floating point positionali, che devono tutti essere compresi nel range (0.0 <= x <= 1.0). Questi corrispondono ai fattori di scala per le 8 righe e colonne dei blocchi 8x8 DCT . Il parametro più a sinistra corresponde alla riga superiore, colonna di sinistra. Questo sarebbe il componente DC della trasformazione e dovrebbe sempre essere lasciato = 1.0.
Nell'esempio precedente i componenti ad alta frequenza di ogni riga e colonna saranno azzerati mentre i secondi in ordine di altezza saranno dimezzati.
I parameri di riga e colonna sono moltiplicati fra loro per ottenerelo scale factor per ognuno dei 64 valori presenti nel blocco. In questo modo se il valore in alto a sinistra fosse stato V[0,0], nell'esempio precedente avremmo scalato la riga 6, colonna 6 (V[6,6]) di .5*.5 = .25.
Notre che sebbene i parametri sembrino floating point parms , in realtà finora hanno una precisione di solo 3 bit sicchè i valori attuali usati sono solo 0, 1/8, 1/4, 3/8 ... 1.0. Potete specificare qualunque valore, ma questo sarà arrotondato al valore più vicino.
Al suo posto si può usare DctFilterD(DiagCt). Questo funziona in modo simile al precedente, ma azzera il numero DiagCt della diagonale destra più bassa della DCT, lasciando inalterati gli altri valori . In una matrice 8x8 DCT ci son 15 possibile diagonali. (immaginatevi una scacchiera). Il parametro DiagCt deve essere un intero compreso tra 1 e 14 ad indicare quante di queste diagonali devono essere azzerate partendo partendo dall'angolo più basso a destra.
Questa nuova funzione DctFilterD(DiagCt) lavora sulle diagonali. E' più semplice e può sia azzerare che lasciare intatte le diagonali.
In una matrice 8x8 DCT ci son 15 possibile diagonali. (immaginatevi una scacchiera). Sicchè se si specifica:
DctFilterD(4)
le 4 diagonali nell'angolo destro in basso della DCT saranno impostati a 0. Il parametro DiagCt può essere qualunque intero da 1 a 14.
Non l'ho testato molto, ma , analogamente a quanto rilevato in tests sulle matrici di quantizzazione, sembra che se si imposta DiagCt a valori molto alti si cominciano ad avere rumore nei contorni simile al ringing.
$Date: 2004/10/19 21:09:51 $