eswrite
7th April 2005, 22:49
Your "bicubicresize" method is not better quality; it is *not* an interlaced resizing method at all, and consideration of it does not belong in this thread.
It may be of lesser quality and definitely not an interlaced resizing method, but I disagree its evaluation doesn't belong here. It is a "control" experiment to test the assertion that one must not do a blind, brute-force bicubicrezise or any other type of resize that does not take interlacing into account. If that assertion is true, interlaced resize tests should yield at least equal, and hopefully--at the performance cost they incur--better results. My experiment seems to suggest that except for one interlaced resize method (SmoothDeinterlacer), any interlaced resize method won't do and in fact won't do any better than a blind resize. I hope that's on topic and right in line with this thread. If not, my reading comprehension has really taken a dive since High School.
I hear your argument about resizing 720x480 to 360x240. I hadn't thought about that, and it makes sense at some level... until I ran another test resizing high quality 1920x1080i HD material to 720x480i. Most of the resizing algorithms suggested earlier in this thread fail to impress. For a sampling, check out the 2nd screen capture at http://eswrite.50megs.com/photo2.html. The jaggies ain't lyin', and they are quite noticeable during normal playback. The SmoothDeinterlacer method is the only one that seems to carry the day, and yes, notice how BicubicResize screws up in the 2nd screen shot--an illustration of why it too is inadequate.
Here's the script I used for this latest test (using the same i_resize.avs I posted earlier):
#Script for loading HDTV source video.
#De-interlace prior to processing, resize, and re-interlace.
#Load plugins
LoadPlugin("C:\Program Files\VDM\DGMPGDEC\DGDecode.dll")
#Include Interlace resizing functions
Import("C:\Program Files\VDM\include\i_resize.avs")
##################################################################################
#Load Audio & Video sources
MPEG2Source("movie_30sec.d2v").Crop(0,8,0,-8).AddBorders(0,8,0,8)
Video=last
#Audio=NICAC3Source("movie_30sec AC3 T01 3_2ch 384Kbps DELAY 66ms.ac3")
#AudioDub(Video,Audio)
#return ConvertToRGB(interlaced=true)
## Straight bicubic resize on interlaced material, bad, bad, bad
vo_1 = Video.BicubicResize(720, 480, 0, 0.5).Subtitle("BicubicResize")
## Straight Bob with Lanczos4 resize on interlaced material, so, so
vo_2 = BInterlacedResize(Video, 720, 480, true)
## SmoothInterlace with Lanczos4 resize on interlaced material, best
vo_3 = SInterlacedResize(Video, 720, 480, true)
## Interlaced resize from SimpleResize.dll: requires YV12->YUY2->YV12 conversion
vo_4 = ConvertToYUY2(Video).InterlacedResize(720, 480).ConvertToYV12().Subtitle("InterlacedResize")
## Offset Interlaced resize
#vo_5 = OInterlacedResize(Video, 720, 480, true)
## LeakKernelBob Interlaced resize
#vo_6 = LInterlacedResize(Video, 720, 480, true)
## Telecide Interlaced resize
#vo_6 = TInterlacedResize(Video, 720, 480, true)
return StackVertical(StackHorizontal(vo_1, vo_2), StackHorizontal(vo_3, vo_4))
#return StackVertical(StackHorizontal(vo_1, vo_2), StackHorizontal(vo_3, vo_4), StackHorizontal(vo_5, vo_6))
#return vo_2
It may be of lesser quality and definitely not an interlaced resizing method, but I disagree its evaluation doesn't belong here. It is a "control" experiment to test the assertion that one must not do a blind, brute-force bicubicrezise or any other type of resize that does not take interlacing into account. If that assertion is true, interlaced resize tests should yield at least equal, and hopefully--at the performance cost they incur--better results. My experiment seems to suggest that except for one interlaced resize method (SmoothDeinterlacer), any interlaced resize method won't do and in fact won't do any better than a blind resize. I hope that's on topic and right in line with this thread. If not, my reading comprehension has really taken a dive since High School.
I hear your argument about resizing 720x480 to 360x240. I hadn't thought about that, and it makes sense at some level... until I ran another test resizing high quality 1920x1080i HD material to 720x480i. Most of the resizing algorithms suggested earlier in this thread fail to impress. For a sampling, check out the 2nd screen capture at http://eswrite.50megs.com/photo2.html. The jaggies ain't lyin', and they are quite noticeable during normal playback. The SmoothDeinterlacer method is the only one that seems to carry the day, and yes, notice how BicubicResize screws up in the 2nd screen shot--an illustration of why it too is inadequate.
Here's the script I used for this latest test (using the same i_resize.avs I posted earlier):
#Script for loading HDTV source video.
#De-interlace prior to processing, resize, and re-interlace.
#Load plugins
LoadPlugin("C:\Program Files\VDM\DGMPGDEC\DGDecode.dll")
#Include Interlace resizing functions
Import("C:\Program Files\VDM\include\i_resize.avs")
##################################################################################
#Load Audio & Video sources
MPEG2Source("movie_30sec.d2v").Crop(0,8,0,-8).AddBorders(0,8,0,8)
Video=last
#Audio=NICAC3Source("movie_30sec AC3 T01 3_2ch 384Kbps DELAY 66ms.ac3")
#AudioDub(Video,Audio)
#return ConvertToRGB(interlaced=true)
## Straight bicubic resize on interlaced material, bad, bad, bad
vo_1 = Video.BicubicResize(720, 480, 0, 0.5).Subtitle("BicubicResize")
## Straight Bob with Lanczos4 resize on interlaced material, so, so
vo_2 = BInterlacedResize(Video, 720, 480, true)
## SmoothInterlace with Lanczos4 resize on interlaced material, best
vo_3 = SInterlacedResize(Video, 720, 480, true)
## Interlaced resize from SimpleResize.dll: requires YV12->YUY2->YV12 conversion
vo_4 = ConvertToYUY2(Video).InterlacedResize(720, 480).ConvertToYV12().Subtitle("InterlacedResize")
## Offset Interlaced resize
#vo_5 = OInterlacedResize(Video, 720, 480, true)
## LeakKernelBob Interlaced resize
#vo_6 = LInterlacedResize(Video, 720, 480, true)
## Telecide Interlaced resize
#vo_6 = TInterlacedResize(Video, 720, 480, true)
return StackVertical(StackHorizontal(vo_1, vo_2), StackHorizontal(vo_3, vo_4))
#return StackVertical(StackHorizontal(vo_1, vo_2), StackHorizontal(vo_3, vo_4), StackHorizontal(vo_5, vo_6))
#return vo_2