Simple tips to calculate the Structural Similarity Index (SSIM) between two images with Python

Simple tips to calculate the Structural Similarity Index (SSIM) between two images with Python

Look at this article various other language

The Structural Similarity Index (SSIM) is 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 simply the full reference that needs 2 pictures through the exact exact same shot, what this means is 2 graphically identical pictures to your eye that is human. The 2nd image generally speaking is compressed or has an alternate quality, which can be the purpose of this index. SSIM is generally utilized in the video clip industry, but has also a strong application in photography. SIM really steps the perceptual distinction between two comparable images. It cannot judge which of this two is way better: that needs to be inferred from once you understand which will be the initial one and that has been confronted with extra processing such as for example compression or filters.

In this specific article, we shall explain to you how exactly to compute this index between 2 pictures utilizing Python.


To follow along with this guide you will require:

  • Python 3
  • PIP 3

With that said, why don’t we get going !

1. Install Python dependencies

Before applying the logic, it is important to install some tools that are essential will likely be employed by the logic. This tools may be set up through PIP because of the command that is following

These tools are:

  • scikitimage: scikit-image is an accumulation algorithms for image processing.
  • opencv: OpenCV is just a extremely optimized collection with concentrate on real-time applications.
  • imutils: a number of convenience functions in order to make basic image processing functions such as for instance interpretation, rotation, resizing, skeletonization, showing Matplotlib pictures, sorting contours, detecting sides, and more easier with OpenCV and both Python 2.7 and Python 3.

This tutorial shall focus on any platform where Python works (Ubuntu/Windows/Mac).

2. Write script

The logic to compare the pictures could be the after one. Utilizing the compare_ssim way of the measure module of Skimage. This technique computes the mean structural similarity index between two pictures. It gets as arguments:

X, Y: ndarray

Pictures of every dimensionality.

win_size: int or None

The side-length associated with the sliding screen found in comparison. Must certanly be a value that is odd. If gaussian_weights holds true, this is certainly ignored as well as the window size will rely on sigma.

gradientbool, optional

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

data_rangefloat, optional

The info selection of the input image (distance between minimal and maximum feasible values). By standard, this might be projected through the image data-type.

multichannelbool, optional

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

gaussian_weightsbool, optional

If True, each spot has its mean and variance spatially weighted by way of a normalized gaussian kernel of width sigma=1.5.

fullbool, optional

If real, also get back the total similarity image that is structural.


The mean similarity that is structural the image.


The gradient associated with structural similarity index between X and Y [2]. This really is just returned if gradient is defined to real.


The SSIM that is full image. This will be only returned if complete is defined to real.

As first, we are going to browse the pictures with CV through the supplied arguments therefore we’ll use a black colored and filter that is whitegrayscale) and we also’ll apply the mentioned logic to those pictures. Produce the following script namely and paste the after logic on the file:

This script will be based upon the rule posted by @mostafaGwely with this repository at Github. The rule follows precisely the exact same logic declared regarding the repository, nonetheless it eliminates a mistake of printing the Thresh of the images. The output of operating the script using the pictures using the following command:

Will create the following production (the demand into the photo makes use of the quick argument description -f as –first and -s as –second ):

The algorithm will print a string particularly “SSIM: $value”, you could change it out while you want. The value of SSIM should be obviously 1.0 if you compare 2 exact images.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *