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

Check this out article in other language

The Structural Similarity Index (SSIM) is a perceptual metric that quantifies the image quality degradation that is brought on by processing such as for instance information compression or by losses in information transmission. This metric is actually the full reference that will require 2 pictures through the exact exact same shot, what this means is 2 graphically identical pictures towards the eye. The 2nd image generally speaking is compressed or has a new quality, that is the purpose of this index. SSIM is generally utilized in the video clip industry, but has aswell an application that is strong photography. SIM actually steps the perceptual distinction between two comparable pictures. It cannot judge which associated with two is way better: that must definitely be inferred from once you understand which will be the one that is original that has been subjected to extra processing such as for example compression or filters.

In this specific article, we will explain to you how exactly to calculate accurately this index between 2 pictures making use of Python.


To check out this guide you shall need:

  • Python 3
  • PIP 3

That being said, why don’t we get going !

1. Install Python dependencies

Before applying the logic, you will have to install some tools that are essential should be utilized by the logic. This tools may be set up through PIP utilizing the command that is following

These tools are:

  • scikitimage: scikit-image is an accumulation algorithms for image processing.
  • opencv: OpenCV is a extremely optimized collection with give attention to real-time applications.
  • imutils: a few 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 a lot more easier with OpenCV and both Python 2.7 and Python 3.

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

2. Write script

The logic to compare the pictures would be the after one. Making use of the compare_ssim way of the measure module of Skimage. This process computes the mean structural similarity index between two pictures. It receives as arguments:

X, Y: ndarray

Pictures of Any dimensionality.

win_size: int or None

The side-length regarding the sliding screen found in comparison. Should be an odd value. If gaussian_weights does work, this might be ignored plus the screen size shall be determined by sigma.

gradientbool, optional

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

data_rangefloat, optional

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

multichannelbool, optional

If real, treat the last measurement associated with the array as stations. Similarity calculations are done individually for every single channel then averaged.

gaussian_weightsbool, optional

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

fullbool, optional

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


The mean similarity that is structural the image.


The gradient regarding the similarity that is structural between X and Y [2]. This will be just came back if gradient is defined to True.


The complete SSIM image. This might be only came back if full is defined to real.

As first, we shall browse the images with CV through the supplied arguments therefore we’ll use a black colored and filter that is whitegrayscale) so we’ll apply the mentioned logic to those pictures. Produce the script that is following 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 logic that is same in the repository, nonetheless it eliminates a mistake of printing the Thresh of the pictures. The production of operating the script utilizing the pictures using the command that is following

Will create the output that is followingthe demand when you look at the photo makes use of the brief argument description -f as –first and -s as –second ):

The algorithm will namely print a string “SSIM: $value”, you could change it out while you want. In the event that you compare 2 precise pictures, the worthiness of SSIM should always be clearly 1.0.