Isochroma
22nd December 2005, 06:02
Subject: Spatiotemporal Rotation for Better Denoising and more!
1. Certain spacial denoisers exhibit very compelling features and provide performance superior to most temporal denoisers.
2. These applications have not been designed for video use and so are not only incapable of processing video in native AVI format, but because they do not operate on the temporal axis temporal noise becomes all the more evident with removal of its spacial kin.
For these reasons and more, I propose that an interesting project be seeded into the subconscious of those so inclined: the rotation of video such that the time dimension becomes spacial and one spacial dimension becomes temporal.
If you imagine a video stream as a series of thin slices, put them together and you get a cube; its length equal to the total duration of the video sequence. By rotating that cube ninety degrees on either its y or x axis, the temporal dimension can be made spacial.
One problem with this is that the temporal length is likely much longer than either spacial one. Thus, it seems obvious that the total videocube be sliced into multiple cubes before rotation. It seems likely that a wise method of determining the cube temporal-length would be making it equal to the spacial dimension to be rotated out. Ie. if the video were 640x352, and the vertical were to be rotated out, then we would cut 352 frames before rotating.
The AVISynth function to do this would be very simple to create. No resizing and buffering only needed for a reasonable number of frames. Perhaps lots of disk thrashing but I'm sure caching can be arranged. The output would be very interesting and could be used for many purposes beyond those outlined here.
After processing, the same function supplied with different parameters could reverse the process and regenerate the original video.
function TemporalRotate (dimension=[x,y], positive=[true/false or 1/0], {chunksize=[integer]})
chunksize would be optional; if not specified it would default to the number of pixels in the specified dimension to be rotated. Or we could rely on the good user's brains and the Trim() function preceding it...
1. Certain spacial denoisers exhibit very compelling features and provide performance superior to most temporal denoisers.
2. These applications have not been designed for video use and so are not only incapable of processing video in native AVI format, but because they do not operate on the temporal axis temporal noise becomes all the more evident with removal of its spacial kin.
For these reasons and more, I propose that an interesting project be seeded into the subconscious of those so inclined: the rotation of video such that the time dimension becomes spacial and one spacial dimension becomes temporal.
If you imagine a video stream as a series of thin slices, put them together and you get a cube; its length equal to the total duration of the video sequence. By rotating that cube ninety degrees on either its y or x axis, the temporal dimension can be made spacial.
One problem with this is that the temporal length is likely much longer than either spacial one. Thus, it seems obvious that the total videocube be sliced into multiple cubes before rotation. It seems likely that a wise method of determining the cube temporal-length would be making it equal to the spacial dimension to be rotated out. Ie. if the video were 640x352, and the vertical were to be rotated out, then we would cut 352 frames before rotating.
The AVISynth function to do this would be very simple to create. No resizing and buffering only needed for a reasonable number of frames. Perhaps lots of disk thrashing but I'm sure caching can be arranged. The output would be very interesting and could be used for many purposes beyond those outlined here.
After processing, the same function supplied with different parameters could reverse the process and regenerate the original video.
function TemporalRotate (dimension=[x,y], positive=[true/false or 1/0], {chunksize=[integer]})
chunksize would be optional; if not specified it would default to the number of pixels in the specified dimension to be rotated. Or we could rely on the good user's brains and the Trim() function preceding it...