tensorflow-bicubic-downsample
tensorflow-bicubic-downsample copied to clipboard
tf.image.resize_images has aliasing when downsampling and does not have gradients for bicubic mode. This implementation fixes those problems.
tensorflow-bicubic-downsample
tf.image.resize_images has aliasing when downsampling and does not define gradients for bicubic mode. This implementation fixes those problems.
Example
These images have been downsampled by a factor of 4 from the original. The results from this code matches the scipy.misc.imresize results exactly.
Method | Result | Comments |
---|---|---|
Original | ![]() |
This is the original full res image. |
tf.images.resize_images | ![]() |
TF's implementation has aliasing |
scipy.misc.imresize | ![]() |
Proper bicubic downsampling |
This code | ![]() |
Matches scipy exactly |
Usage
from bicubic_downsample import build_filter, apply_bicubic_downsample
# First, create the bicubic kernel. This can be reused in multiple downsample operations
k = build_filter(factor=4)
# Downsample x which is a tensor with shape [N, H, W, 3]
y = apply_bicubic_downsample(x, filter=k, factor=4)
# y now contains x downsampled to [N, H/4, W/4, 3]