How exactly to calculate the Structural Similarity Index (SSIM) between two images with Python

How exactly to calculate the Structural Similarity Index (SSIM) between two images with Python

Check this out article various other language

The Structural Similarity Index (SSIM) is just a perceptual metric that quantifies the image quality degradation this is certainly brought on by processing such as for instance information compression or by losings in information transmission. This metric is actually a complete reference that needs 2 pictures through the exact same shot, this implies 2 graphically identical pictures to your eye that is human. The second image generally speaking is compressed or has an unusual quality, that will be the aim of this index. SSIM is normally utilized in the video industry, but has also a strong application in photography. SIM really steps the difference that is perceptual two comparable pictures. It cannot judge which regarding the two is way better: that must definitely be inferred from once you understand which will be the one that is original which was subjected to extra processing such as for example compression or filters.

In this essay, we will demonstrate how writing a research paper exactly to compute this index between 2 images making use of Python.


To check out this guide you shall require:

  • Python 3
  • PIP 3

With that said, allow’s get going !

1. Install Python dependencies

Before applying the logic, you will have to install some important tools that are going to be employed by the logic. This tools may be set up through PIP aided by the command that is following

These tools are:

  • scikitimage: scikit-image is an accumulation algorithms for image processing.
  • opencv: OpenCV is really a library that is highly optimized give attention to real-time applications.
  • imutils: a few convenience functions to create basic image processing functions such as for example interpretation, rotation, resizing, skeletonization, showing Matplotlib images, sorting contours, detecting sides, plus much more easier with OpenCV and both Python 2.7 and Python 3.

This guide will focus on any platform where Python works (Ubuntu/Windows/Mac).

2. Write script

The logic to compare the pictures could be the after one. Utilising the compare_ssim approach to the measure module of Skimage. This process computes the mean similarity that is structural between two pictures. It gets as arguments:

X, Y: ndarray

Images of every dimensionality.

win_size: none or int

The side-length associated with the sliding screen found in comparison. Should be an odd value. If gaussian_weights does work, it is ignored and also the screen size shall rely on sigma.

gradientbool, optional

If real, additionally get back the gradient with regards to Y.

data_rangefloat, optional

The information selection of the input image (distance between minimal and maximum feasible values). By standard, that is projected through the image data-type.

multichannelbool, optional

If real, treat the dimension that is last of array as stations. Similarity calculations are done separately for every channel then averaged.

gaussian_weightsbool, optional

If real, each spot has its mean and variance spatially weighted by way of A gaussian kernel that is normalized of sigma=1.5.

fullbool, optional

If real, additionally get back the entire similarity image that is structural.


The mean structural similarity over the image.


The gradient associated with the similarity that is structural between X and Y [2]. This really is just came back if gradient is defined to real.


The SSIM that is full image. This might be just came back if complete is placed to real.

As first, we are going to see the pictures with CV through the provided arguments therefore we’ll apply a black colored and filter that is whitegrayscale) and now we’ll apply the mentioned logic to those pictures. Create the following script specifically and paste the logic that is following the file:

This script is dependent on the rule posted by @mostafaGwely with this repository at Github. The code follows precisely the exact same logic declared regarding the repository, nonetheless it removes a mistake of printing the Thresh of the images. The production of operating the script using the pictures using the command that is following

Will create the output that is followingthe demand within the image makes use of the brief argument description -f as —first and -s as —second ):

The algorithm will namely print a string «SSIM: $value», but you can change it out while you want. The value of SSIM should be obviously 1.0 if you compare 2 exact images.