FineSharp() by Didee (sharpening)

Portioli

Supreme Member
3 June 2007
3,892
Dystopia
Τελευταία στην κατηγορία των προβολέων γίνεται αρκετή συζήτηση για την όξυνση της εικόνας.
Ας δούμε τι θα μπορούσαμε να κάνουμε κι εμείς εντελώς ανέξοδα με την χρήση του avisynth.


To συγκριμένο σκριπτάκι που θα χρησιμοποιήσω εδώ είναι ενός χρήστη του doom9 του Didee.
Eίναι πολύ «αυστηρό» οπότε προϋποθέτει η πηγή του video να είναι πολύ καλή.
Αν έχετε πολύ SD υλικό ή πολύ συμπιεσμένα BD rips, WEB-DL κτλ καλύτερα να μην ασχοληθείτε.
Αφορά κυρίως Full BluRay 1080p23/24 ή πολύ καλά δικά σας rips των 720p.
Σε πόρους επίσης είναι πολύ απαιτητικό, πιστεύω θα ταλαιπωρήσει οποιαδήποτε CPU.


FineSharp By Didee:


Code:
# Small and relatively fast realtime-sharpening function, 
# for 1080p, or after scaling 720p -> 1080p during playback (to make 720p look more like being 1080p)
# It's a generic sharpener. Only for good quality sources! 
# (If the source is crap, FineSharp will happily sharpen the crap.) ;)
# Noise/grain will be enhanced, too. The method is GENERIC.
#
# Modus operandi: A basic nonlinear sharpening method is performed, then the *blurred* sharp-difference gets subtracted again. 
#
# - Didee




function FineSharp(clip c, int "mode", float "sstr", float "cstr", float "xstr", float "lstr", float "pstr", float "ldmp")
{
 
mode  = default(mode, 1   )   #  1 to 3, weakest to strongest. When negative -1 to -3, a broader kernel for equalisation is used.
sstr  = default(sstr, 2.0 )   #  strength of sharpening, 0.0 up to ??
 
_cstr = spline(sstr, 0,0, 0.5,0.1, 1.0,0.6, 2.0,0.9, 2.5,1.00, 3.0,1.09, 3.5,1.15, 4.0,1.19, 8.0,1.249, 255.0,1.5)
_cstr = (mode>0) ? _cstr : pow(_cstr,1./1.25)




cstr  = default(cstr, _cstr)  #  strength of equalisation, 0.0 to ? 2.0 ? (recomm. 0.5 to 1.25, default AUTO)
xstr  = default(xstr, 0.19 )  #  strength of XSharpen-style final sharpening, 0.0 to 1.0 (but, better don't go beyond 0.249 ...)




                             #  Viscera parameters
lstr  = default(lstr, 1.49 )  #  modifier for non-linear sharpening
pstr  = default(pstr, 1.272)  #  exponent for non-linear sharpening
ldmp  = default(ldmp, sstr+0.1) # "low damp", to not overenhance very small differences (noise coming out of flat areas)




str1  = sstr
str2  = cstr
SSTR  = string(sstr)
CSTR  = string(cstr)
LSTR  = string(lstr)
PSTR  = string(pstr)
LDMP  = string(ldmp)
rg=mode>0?11:20
 
b = (abs(mode)==1) ? c.removegrain(11,-1).removegrain(4,-1)
\ : (abs(mode)==2) ? c.removegrain(4,-1).removegrain(11,-1)
\ : (abs(mode)==3) ? c.removegrain(4,-1).removegrain(11,-1).removegrain(4,-1) : c
 
shrpD = mt_lutxy(c,b,"x y - abs "+LSTR+" / 1 "+PSTR+" / ^ "+SSTR+" * x y - x y - abs 0.001 + / * x y - 2 ^ x y - 2 ^ "+LDMP+" + / * 128 +")
 
shrp = (str1<0.01) ? c : c.mt_adddiff(shrpD,U=2,V=2)




shrp = (str2<0.01) ? shrp : shrp.mt_makediff(shrpD.mt_lut("x 128 - "+CSTR+" * 128 +").removegrain(rg,-1),U=2,V=2)




shrp = (xstr<0.01) ? shrp
\    : mt_lutxy(shrp,shrp.removegrain(20,-1),"x x y - 9.9 * +",U=2,V=2).repair(shrp,12,0).mergeluma(shrp,1.0-xstr)




return(shrp)
}




Πηγή: Eπίσημη Σελίδα|Avisynth και το FineSharp()@doom9




Το μόνο που χρειάζεται είναι άλλα δυο plugins:
  • RemoveGrain
  • MT-Masktools
  • Repair
Αν δεν έχετε χρησιμοποιήσει ποτέ πριν το avisynth και σας φαίνονται όλα αυτά κινέζικα.
Ας τα πάρουμε όλα τα βήματα από την αρχή:
  1. Κατεβάστε την τελευταία έκδοση Avisynth.
  2. Κατεβάστε το avisynth.dll και βάλτε το στον φάκελο
    C:\Windows\System32 για 32-bit λειτουργικό και C:\Windows\SysWOW64 για λειτουργικό x64
  3. Kατεβάζετε τα plug-ins MaskTools2 & Removegrain
  4. Φτιάξτε στο notepad ένα αρχείο κι αντιγράψτε το script.
    Σώστε αυτό το αρχείο με όνομα FineSharp.avsi
  5. Aντιγράφετε τα mt_masktools-26.dll, RepairSSE3.dll, RepairSS3.dll
    μαζί με το αρχείο FineSharp.avsi στον φάκελο με τα Plug-ins του Avisynth:
    C:\Program Files (x86)\AviSynth 2.5\plugins
  6. Aνοίγετε τον ffdshow και γράφετε στο κουτάκι του avisynth το εξής script:




    Code:
    setmemorymax(64) 
    SetMTMode(2)
    ffdshow_source()
    FineSharp()
    SetMTMode(1)
    GetMTMode(false) > 0 ? distributor() : last




    Τις ρυθμίσεις στον ffdshow τις έχω έτσι:
    Input colorspaces:[x]YV12 [ ]YUY2 [ ]RGB24 [ ]RGB32
    [x]Buffer back/ahead: [0] [6]


    Φυσικά αναλόγως το setup και τα γούστα μπορείτε να παίξετε μέ το SetMemoryMax (μέχρι
    και 512 ή και 1024) και το SetMTMode (πχ 3 ή (3,4))
    όπως και το buffer back/ahead μέχρι [0] [15].




    8nJhl.jpg
Aν θέλετε να παίξετε με κάποιον άλλο video decoder
εκτός του ffdshow , δείτε στα αντίστοιχα νήματα των
players πως μπορείτε να βάλετε το ffdshow raw filter








Παραδείγματα με Pattern σε σχέση με άλλους αλγόριθμους sharpening
Crop 1:1 (χωρίς scaling):


Χωρίς Sharpening:
00-NoSharpening.jpg
LimitedSharpenFaster:
01-LimitedSharpenFasterCrop.jpg
LSFMod:
02-LSFmodCrop.jpg
FineSharp:
03-FineSharpCrop.jpg





Ενδεικτικά παραδείγματα από κανονικό αρχείο 1080p:

Xωρίς SharpeningFineSharp()
travis-NoSharpR.pngtravis-finesharpL.png
snowboardas-xoris.jpgsnowboardas-με.jpg
elikoptero.jpgelikoptero-με.jpg



Οι εικόνες είναι στιγμιότυπα από την ταινία της RedBull - Αrt Of Flight
Για μένα ένα από τα καλύτερα μπλε δισκάκια που έχουμε δει.

Στα patterns σίγουρα φαίνεται περισσότερο η διαφορά,
αλλά και στις 2 πρώτες φωτογραφίες το αποτέλεσμα είναι πολύ καλό
ειδικά αν λάβουμε υπόψιν το ελάχιστο ringing.
Καλύτερα να κλικάρετε πάνω στις φωτογραφίες
για να τις δείτε στο κανονικό τους μέγεθος.
 
Last edited:
19 June 2006
35,671
Απάντηση: FineSharp() - Όξυνση με χρήση Αvisynth

Thanks Αλέξανδρε!!

Αλλά, η ερώτηση είναι άλλη...πως τα πάει σε κόντρα με το sharpening που κάνει στην τελευταία έκδοση ο mad?

(μην με ρωτήσεις, δεν το έχω δοκιμάσει ακόμα...:D)
 

Portioli

Supreme Member
3 June 2007
3,892
Dystopia
Απάντηση: FineSharp() - Όξυνση με χρήση Αvisynth

Thanks Αλέξανδρε!!

Αλλά, η ερώτηση είναι άλλη...πως τα πάει σε κόντρα με το sharpening που κάνει στην τελευταία έκδοση ο mad?

(μην με ρωτήσεις, δεν το έχω δοκιμάσει ακόμα...:D)


χμμ...

Είναι αρκετά διαφορετικό το κόνσεπτ.

Παρότι τα μάτια μας το ίδιο πράγμα παρατηρούν (πιο sharp εικόνα) και τα ίδια πράγματα τα ενοχλούν (ταλαντώσεις ~ ringing)
o madvr κάνει upscaling ενώ ο FineSharp sharpening.

Για να το πούμε όσο πιο απλά γίνεται ο madvr φτιάχνει με λιγότερες παρενέργειες μέτρια και καλή εικόνα
ενώ ο finesharp δίνει περισσότερη λεπτομέρεια σε υπάρχον πολύ καλό υλικό.

Αν βάλλεις madVr σε πολύ καλό video δεν θα κερδίσεις πολλά , το λέω άλλωστε συχνά ότι σε Full Bluray δεν έχει τόσο διαφορά (μόνη επίδραση στο Chroma)
με τους εμπορικούς Players, αντίθετα αν βάλεις κακό video στον finesharp τελείωσες, θα είναι πολύ κακό το τελικό αποτέλεσμα.

Eννοείται οτί μπορείς να χρησιμοποιήσεις και τα δυο ταυτόχρονα.
Απλά τώρα θέλει ξανά πολλά πειράματα για νέες ρυθμίσεις στους αλγόριθμους.
Προσωπικά δεν έχω καταλήξει κάπου σίγουρα για finesharp + madvr.
 

rider

Supreme Member
5 December 2006
8,069
Re: FineSharp() - 'Oξυνση/Sharpening με χρήση Αvisynth

Στο notepad αρχειο κανουμε copy ολο το code οπως το εδωσες ? Γιατι τα # ειναι περιγραφη . Λεω μηπως κανουμε κοπυ απο το function και κατω
Επηρεαζει το σεταρισμα που ηδη εχουμε κανει ? Η απλα αν τον μας αρεσει το αποτελεσμα διαγραφουμε το ''Aνοίγετε τον ffdshow και γράφετε στο κουτάκι του avisynth το εξής script'' και τελος ?
Ευχαριστω
 

Portioli

Supreme Member
3 June 2007
3,892
Dystopia
Απάντηση: FineSharp() - 'Oξυνση/Sharpening με χρήση Αvisynth

Tο σκριπτάκι είναι αυτό ακριβώς, κάντο απλά copy paste.

Οι ρυθμίσεις στο avisynth είναι οι πιο απλές απλά για να δουλέψει το script.
 

vas_papavas

Supreme Member
21 December 2010
8,849
Re: FineSharp() - 'Oξυνση/Sharpening με χρήση Αvisynth

Αλέξανδρε αν παίζουμε με svp τι κάνουμε??? Ήδη το svp χρησιμοποιεί χρησιμοποιεί το avisynth στο ffdshow. :ears:

προσθέτουμε τις γραμμές και του παρόντος script??
 
Last edited:

rider

Supreme Member
5 December 2006
8,069
Re: FineSharp() - 'Oξυνση/Sharpening με χρήση Αvisynth

Kατεβασα το antisynth 2.5.8 αλλα δεν εχει μεσα το RepairSS3.dll .Μονο αυτο με το -Ε-.Μηπως ονομαζεται αλλιως στην κανουργια εκδοση ?
Επισης απο αποψη οξυτητας , μηπως εχεις παιξεις με τις ρυθμισεις -επιλογες στην κατηγορια sharpen του ffdshow ? Και αν ναι , προτεινεις κατι ?
 

Portioli

Supreme Member
3 June 2007
3,892
Dystopia
Απάντηση: Re: FineSharp() - 'Oξυνση/Sharpening με χρήση Αvisynth

Αλέξανδρε αν παίζουμε με svp τι κάνουμε??? Ήδη το svp χρησιμοποιεί χρησιμοποιεί το avisynth στο ffdshow. :ears:

προσθέτουμε τις γραμμές και του παρόντος script??

Καλησπέρα Βασίλη.
Αν χρησιμοποιείς το σκριπτάκι του Γιάννη απλά προσθέτεις την γραμμή FineSharp() στην προτελευταία γραμμή.
Το αντίστοιχο ισχύει και με δικό σου σκριπτάκι αν χρησιμοποιείς τις βιβλιοθήκες του SVPflow.
Iσως να είναι πιο εύκολο να χρησιμοποιήσεις το Interframe για αυτή τη δουλειά.
Σετάρεται πιο εύκολα και χρησιμποποιεί και αυτό τις ίδιες βιβλιοθήκες.

Τώρα με ενεργοποιημένο το SVPkit είναι λίγο δύσκολο να σου πω τι ακριβώς
πρέπει να κάνεις και δεν θέλω να απαντήσω λάθος.

Frame Interpolation υψηλού επίπεδου, σε πολύ καλό υλικό και finesharp() είναι αδύνατο να το δοκιμάσω κι όλας λόγω συστήματος.
Και πρακτικά δεν ξέρω τι νόημα έχει.
Θα έβαζες ποτέ στο αρνί μαγιονέζα? :p



Kατεβασα το antisynth .5.8 αλλα δεν εχει μεσα το RepairSS3.dll .Μονο αυτο με το -Ε-.Μηπως ονομαζεται αλλιως στην κανουργια εκδοση ?
Επισης απο αποψη οξυτητας , μηπως εχεις παιξεις με τις ρυθμισεις -επιλογες στην κατηγορια sharpen του ffdshow ? Και αν ναι , προτεινεις κατι ?

Kαι τα δύο αρχεία Removegrain που χρειάζονται είναι εδώ. [Download].
Έχω δοκιμάσει αρκετά πράγματα και με τη χρήση ffdshow και με τους custom shaders του ΜPC-HC.
Από θέμα ευκολίας και απόδοσης δεν μου αρέσει κάτι συνολικά περισσότερο από τον MadVR.


Το συγκεκριμένο σκριπτάκι μου αρέσει γιατί είναι ειδικό για πολύ καλό υλικό,
όπου δεν χρειάζεται να βαρύνεις πολύ την κάρτα γραφικών σου με βαριές ρυθμίσεις στον MAdVR (πχ Jinc3 + AR).
 

Portioli

Supreme Member
3 June 2007
3,892
Dystopia
Απάντηση: FineSharp() - 'Oξυνση/Sharpening με χρήση Αvisynth

Για όποιον τον ενδιαφέρει ο FineShap του Didee μπορεί να περαστεί στους Shaders του MPC-HC.
Kατεβάζετε τους Shaders από εδώ: [Download]
Toυς περνάτε στους Shaders του MPC-HC (options->playback->shaders) με τη σειρά:
ToYUV
RemoveGrain11
RemoveGrain4
FineSharpA
FineSharpB
FineSharpC
ToRGB

Eνεργοποιείτε κατά την αναπαραγωγή:
Play->Shaders->Select Shaders...

Περισσότερα στο νήμα του Doom9.