cutcutcodec.core.analysis.video.quality.ssim_torch

Compute a differenciable batched torch ssim.

Functions

ssim_conv_torch(im1, im2[, data_range, ...])

Pure torch implementation of cutcutcodec.core.analysis.video.quality.ssim().

ssim_fft_torch(im1, im2[, data_range, ...])

Pure torch implementation of cutcutcodec.core.analysis.video.quality.ssim().

Details

cutcutcodec.core.analysis.video.quality.ssim_torch.ssim_conv_torch(im1: Tensor, im2: Tensor, data_range: Real = 1.0, weights: Iterable[float] = None, sigma: Real = 1.5, **kwargs) float[source]

Pure torch implementation of cutcutcodec.core.analysis.video.quality.ssim().

It is based on a native torch convolution.

Examples

>>> import torch
>>> from cutcutcodec.core.analysis.video.quality.ssim_torch import ssim_conv_torch
>>> _ = torch.manual_seed(0)
>>> im1 = torch.rand(2, 4, 720, 1080, 3)
>>> im2 = 0.8 * im1 + 0.2 * torch.rand(2, 4, 720, 1080, 3)
>>> ssim_conv_torch(im1[0, 0], im1[0, 0])
tensor(1.)
>>> ssim_conv_torch(im1, im2)
tensor([[0.9511, 0.9512, 0.9511, 0.9511],
        [0.9512, 0.9512, 0.9511, 0.9512]])
>>>
cutcutcodec.core.analysis.video.quality.ssim_torch.ssim_fft_torch(im1: Tensor, im2: Tensor, data_range: Real = 1.0, weights: Iterable[float] = None, sigma: Real = 1.5, **kwargs) float[source]

Pure torch implementation of cutcutcodec.core.analysis.video.quality.ssim().

It is based on fast fft convolution.

Examples

>>> import torch
>>> from cutcutcodec.core.analysis.video.quality.ssim_torch import ssim_fft_torch
>>> _ = torch.manual_seed(0)
>>> im1 = torch.rand(2, 4, 720, 1080, 3)
>>> im2 = 0.8 * im1 + 0.2 * torch.rand(2, 4, 720, 1080, 3)
>>> ssim_fft_torch(im1[0, 0], im1[0, 0])
tensor(1.)
>>> ssim_fft_torch(im1, im2)
tensor([[0.9511, 0.9512, 0.9511, 0.9511],
        [0.9512, 0.9512, 0.9511, 0.9512]])
>>>