Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Capturing and Editing Video > Avisynth Development

Reply
 
Thread Tools Search this Thread Display Modes
Old 22nd May 2009, 14:15   #1  |  Link
mikenadia
Registered User
 
Join Date: Nov 2007
Posts: 246
Local gradient based interpolation

It is a Catmull-Rom interpolator with adaptive tension based on local gradient.
in point 1, LG1= 2*Max(P0,P1,P2) - 2* Min(P0,P1,P2) -ABS(P1-P0) -ABS(P2-P1) -ABS(P2-P0)
tangent in 1 is a1*(P2-P0) with a1 being a function of LG1.
I assume that we prefer a decreasing tension with increasing LG (otherwise adapt the formulas to your own making).
Tension will be allowed to fluctuate between Rmin (for big LG) to 0.5 (for LG=0). It could be a staircase function
or something like a1=Rmin + (0.5 - Rmin)exp(-k*LG1)
Similar formulas for point 2 (using P1,P2,P3).
The blending coefficients will have to be recomputed all the time but the radius is only 2.
mikenadia is offline   Reply With Quote
Old 22nd May 2009, 15:55   #2  |  Link
rfmmars
Registered User
 
Join Date: Feb 2004
Posts: 743
Quote:
Originally Posted by mikenadia View Post
It is a Catmull-Rom interpolator with adaptive tension based on local gradient.
in point 1, LG1= 2*Max(P0,P1,P2) - 2* Min(P0,P1,P2) -ABS(P1-P0) -ABS(P2-P1) -ABS(P2-P0)
tangent in 1 is a1*(P2-P0) with a1 being a function of LG1.
I assume that we prefer a decreasing tension with increasing LG (otherwise adapt the formulas to your own making).
Tension will be allowed to fluctuate between Rmin (for big LG) to 0.5 (for LG=0). It could be a staircase function
or something like a1=Rmin + (0.5 - Rmin)exp(-k*LG1)
Similar formulas for point 2 (using P1,P2,P3).
The blending coefficients will have to be recomputed all the time but the radius is only 2.
Please explain in detail, too advanced for me.

Richard
photorecall.net
rfmmars is offline   Reply With Quote
Old 22nd May 2009, 22:38   #3  |  Link
mikenadia
Registered User
 
Join Date: Nov 2007
Posts: 246
I am going to try to be clearer.
Catmull-Rom is explained in http://www.cs.cmu.edu/~462/projects/...catmullRom.pdf
In this paper, the tension is fixed. I just made it variable.
The idea behind it is that sometimes the Mitchell-Retravali filter is prefered to Catmull-Rom (tension=0.5). The Mitchell-Retravali is simply a weighted average of the Catmull-Rom and the cubic filter. It is explained in http://www.cs.cornell.edu/Courses/cs...g-notes-v2.pdf (p7).
I just try to make things different using the area of the triangle PoP1P2 (LG/2) as a measurement of curvature and I assume that it may be an interesting variable for the "preferred" tension.
You just have to define your "tension" function with the variables you want to use ( and it is by far the most difficult thing ). The tension function I use has no merit. It is just an example.
This function (like Catmull-Rom but not Mitchell-Retravali) has local control (everything outside the interval P0P3 has no influence on the interpolation).

The spline36 model is based on the values of P(-2),P(-1),P(0),P(1), P(2), P(3).
This model will be based on P''(0),P(-1),P(0),P(1), P(2), P"(1).
Not a convolution kernel anymore ( still a weighted sum of P(-1),P(0),P(1), P(2) but the weights are not constant and depends upon P''(0) and P"(1)). If we take LG as a measure of abs(P''(x)), then the weights will depends only on P(-1),P(0),P(1), P(2).

Edit: As a first step, the system could be trained. By downscaling and upscaling back to the original size, we could try to find if there is a relationship between the "preferred" tension and some indicator that depends only on P0 P1 P2 P3 (LG, ....) and there must be one otherwise the default parameters in BiCubicResize will not be b = 1/3 and
c = 1/3. ( http://avisynth.org/mediawiki/Resize )

Edit2: Not gradient based. Only tension based but allow different formulas for n<0 and n>0 to keep symetry.
for n<=0. 2*P'(i)= ((1-t)*(P(i)-P(i-1)) + ((1+t)*(P(i+1)-P(i))
for n>0 . 2*P'(i)= ((1+t)*(P(i)-P(i-1)) + ((1-t)*(P(i+1)-P(i))
t could be positive or negative (no clue where the bias should be).

Last edited by mikenadia; 25th May 2009 at 18:06.
mikenadia is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 02:41.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.