mindspore.nn.SSIM
- class mindspore.nn.SSIM(max_val=1.0, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03)[source]
Returns SSIM index between two images.
Its implementation is based on Wang, Z., Bovik, A. C., Sheikh, H. R., & Simoncelli, E. P. (2004). Image quality assessment: from error visibility to structural similarity. IEEE transactions on image processing.
\[\begin{split}l(x,y)&=\frac{2\mu_x\mu_y+C_1}{\mu_x^2+\mu_y^2+C_1}, C_1=(K_1L)^2.\\ c(x,y)&=\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}, C_2=(K_2L)^2.\\ s(x,y)&=\frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3}, C_3=C_2/2.\\ SSIM(x,y)&=l*c*s\\&=\frac{(2\mu_x\mu_y+C_1)(2\sigma_{xy}+C_2}{(\mu_x^2+\mu_y^2+C_1)(\sigma_x^2+\sigma_y^2+C_2)}.\end{split}\]- Parameters
max_val (Union[int, float]) – The dynamic range of the pixel values (255 for 8-bit grayscale images). Default: 1.0.
filter_size (int) – The size of the Gaussian filter. Default: 11. The value must be greater than or equal to 1.
filter_sigma (float) – The standard deviation of Gaussian kernel. Default: 1.5. The value must be greater than 0.
k1 (float) – The constant used to generate c1 in the luminance comparison function. Default: 0.01.
k2 (float) – The constant used to generate c2 in the contrast comparison function. Default: 0.03.
- Inputs:
img1 (Tensor) - The first image batch with format ‘NCHW’. It must be the same shape and dtype as img2.
img2 (Tensor) - The second image batch with format ‘NCHW’. It must be the same shape and dtype as img1.
- Outputs:
Tensor, has the same dtype as img1. It is a 1-D tensor with shape N, where N is the batch num of img1.
- Raises
TypeError – If max_val is neither int nor float.
TypeError – If k1, k2 or filter_sigma is not a float.
TypeError – If filter_size is not an int.
ValueError – If max_val or filter_sigma is less than or equal to 0.
ValueError – If filter_size is less than 0.
- Supported Platforms:
Ascend
GPU
Examples
>>> import numpy as np >>> import mindspore.nn as nn >>> from mindspore import Tensor >>> net = nn.SSIM() >>> img1 = Tensor(np.ones([1, 3, 16, 16]).astype(np.float32)) >>> img2 = Tensor(np.ones([1, 3, 16, 16]).astype(np.float32)) >>> output = net(img1, img2) >>> print(output) [1.]