GithubHelp home page GithubHelp logo

blur-detection's Introduction

Blur Detection with opencv-python

This blur detection python script is the implementation result of this tutorial by Adrian Rosebrock. Using the calculation of Laplacian's variance method, you can detect the amount of blurring.

Prerequisites

How to use

Make sure python and pip is installed. Then, install imutils and cv2.

# install opencv-python
pip install cv2
# install imutils
pip install imutils

Place all your images sample in images folder (you can change the folder path later). After that, run this on your project folder.

python blur-detection.py --images images

python3 blur-detection.py --images images --blurry blurry

The output will be like these

images/good_5.jpg - Not Blurry: 2710.411224406914
images/blur_6.jpg - Not Blurry: 234.53143074452882
images/blur_7.jpg - Not Blurry: 387.4177703388444
images/good_4.jpg - Not Blurry: 514.4024536712872
images/good_6.jpg - Not Blurry: 1130.655860980799
images/blur_5.jpg - Not Blurry: 495.3206078451865
images/blur_4.jpg - Not Blurry: 324.83960554053556
images/good_7.jpg - Not Blurry: 327.8921565864165
images/good_3.jpg - Not Blurry: 1698.3861949567324
images/blur_1.jpg - Not Blurry: 314.23002861170755
images/good_2.jpg - Not Blurry: 442.25663961896294
images/blur_3.jpg - Not Blurry: 1709.9848988757813
images/blur_2.jpg - Not Blurry: 211.84270219774743
images/good_1.jpg - Not Blurry: 867.844288393801
images/good_10.jpg - Not Blurry: 795.8420091234544
images/blur_10.jpg - Not Blurry: 197.06995360732373
images/blur_9.jpg - Not Blurry: 127.99090228522351
images/blur_8.jpg - Not Blurry: 1242.7135491667214
images/good_9.jpg - Not Blurry: 2784.3464001240054
images/good_8.jpg - Blurry: 86.070335876096

The default threshold is 100, which you can define by self by adding more parameter just like this

python blur-detection.py --images images --threshold 1000

How it works?

There's a lot of approaches to analyze how blurry image is, but best and easiest one is using the variance of Laplacian method to give us a single floating point value to represent the “blurryness” of an image. This method simply convolves our input image with the Laplacian operator and compute the variance. If the variance falls below a predefined threshold, we mark the image as blurry.

The reason this method works is due to the definition of the Laplacian operator itself, which is used to measure the 2nd derivative of an image. The Laplacian highlights regions of an image containing rapid intensity changes, much like the Sobel and Scharr operators. And, just like these operators, the Laplacian is often used for edge detection. The assumption here is that if an image contains high variance then there is a wide spread of responses, both edge-like and non-edge like, representative of a normal, in-focus image. But if there is very low variance, then there is a tiny spread of responses, indicating there are very little edges in the image. As we know, the more an image is blurred, the less edges there are.

Obviously the trick here is setting the correct threshold which can be quite domain dependent. Too low of a threshold and you’ll incorrectly mark images as blurry when they are not. Too high of a threshold then images that are actually blurry will not be marked as blurry. This method tends to work best in environments where you can compute an acceptable focus measure range and then detect outliers.

blur-detection's People

Contributors

indyka avatar iominh avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.