skimage2.metrics.structural_similarity#
- skimage2.metrics.structural_similarity(im1, im2, *, data_range, win_size=None, gradient=False, channel_axis=None, gaussian_weights=False, full=False, use_sample_covariance=True, K1=0.01, K2=0.03, sigma=1.5)[source]#
Compute the mean structural similarity index between two images.
- Parameters:
- im1, im2ndarray
Images. Any dimensionality with same shape.
- data_rangefloat
The data range of the input image (difference between maximum and minimum possible values).
- win_sizeint or None, optional
The side-length of the sliding window used in comparisons (default: 7). Must be an odd value. If
gaussian_weightsis True,win_sizecannot be specified since the window size is then determined bysigma.- gradientbool, optional
If True, also return the gradient with respect to im2.
- channel_axisint or None, optional
If None, the image is assumed to be a grayscale (single channel) image. Otherwise, this parameter indicates which axis of the array corresponds to channels.
- gaussian_weightsbool, optional
If True, the local mean and variance are computed using a normalized Gaussian kernel of width
sigmarather than a uniform window.- fullbool, optional
If True, also return the full structural similarity image.
- use_sample_covariancebool, optional
If True, normalize covariances by N-1 rather than, N where N is the number of pixels within the sliding window.
- K1float, optional
Algorithm parameter, K1 (small constant, see [1]).
- K2float, optional
Algorithm parameter, K2 (small constant, see [1]).
- sigmafloat, optional
Standard deviation for the Gaussian when
gaussian_weightsis True. Default is 1.5.
- Returns:
- mssimfloat
The mean structural similarity index over the image.
- gradndarray
The gradient of the structural similarity between im1 and im2 [2]. This is only returned if
gradientis set to True.- Sndarray
The full SSIM image. This is only returned if
fullis set to True.
Notes
To match the implementation of Wang et al. [1], set
gaussian_weightsto True,sigmato 1.5,use_sample_covarianceto False, and specify thedata_rangeargument.References
[1] (1,2,3)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, 13, 600-612. https://ece.uwaterloo.ca/~z70wang/publications/ssim.pdf, DOI:10.1109/TIP.2003.819861
[2]Avanaki, A. N. (2009). Exact global histogram specification optimized for structural similarity. Optical Review, 16, 613-621. arXiv:0901.0065 DOI:10.1007/s10043-009-0119-z
Examples
>>> import skimage as ski >>> import _skimage2 as ski2
Structural similarity between identical images is 1.0 >>> im1 = ski2.data.camera() >>> structural_similarity(im1, im1.copy(), data_range=im1.max()) 1.0
Override part of the image with 0: >>> im2 = im1.copy() >>> im2[:30, :] = 0 >>> structural_similarity(im1, im2, data_range=im1.max()) # doctest: +ELLIPSIS 0.9408…