forked from opencv/opencv
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
- Loading branch information
Showing
117 changed files
with
7,654 additions
and
4,454 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...s/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
146 changes: 0 additions & 146 deletions
146
doc/tutorials/core/how_to_use_ippa_conversion/how_to_use_ippa_conversion.markdown
This file was deleted.
Oops, something went wrong.
Binary file removed
BIN
-61.4 KB
doc/tutorials/core/how_to_use_ippa_conversion/images/How_To_Use_IPPA_Result.jpg
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+50.8 KB
doc/tutorials/imgproc/motion_deblur_filter/images/motion_original.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
72 changes: 72 additions & 0 deletions
72
doc/tutorials/imgproc/motion_deblur_filter/motion_deblur_filter.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
Motion Deblur Filter {#tutorial_motion_deblur_filter} | ||
========================== | ||
|
||
Goal | ||
---- | ||
|
||
In this tutorial you will learn: | ||
|
||
- what the PSF of a motion blur image is | ||
- how to restore a motion blur image | ||
|
||
Theory | ||
------ | ||
|
||
For the degradation image model theory and the Wiener filter theory you can refer to the tutorial @ref tutorial_out_of_focus_deblur_filter "Out-of-focus Deblur Filter". | ||
On this page only a linear motion blur distortion is considered. The motion blur image on this page is a real world image. The blur was caused by a moving subject. | ||
|
||
### What is the PSF of a motion blur image? | ||
|
||
The point spread function (PSF) of a linear motion blur distortion is a line segment. Such a PSF is specified by two parameters: \f$LEN\f$ is the length of the blur and \f$THETA\f$ is the angle of motion. | ||
|
||
![Point spread function of a linear motion blur distortion](images/motion_psf.png) | ||
|
||
### How to restore a blurred image? | ||
|
||
On this page the Wiener filter is used as the restoration filter, for details you can refer to the tutorial @ref tutorial_out_of_focus_deblur_filter "Out-of-focus Deblur Filter". | ||
In order to synthesize the Wiener filter for a motion blur case, it needs to specify the signal-to-noise ratio (\f$SNR\f$), \f$LEN\f$ and \f$THETA\f$ of the PSF. | ||
|
||
Source code | ||
----------- | ||
|
||
You can find source code in the `samples/cpp/tutorial_code/ImgProc/motion_deblur_filter/motion_deblur_filter.cpp` of the OpenCV source code library. | ||
|
||
@include cpp/tutorial_code/ImgProc/motion_deblur_filter/motion_deblur_filter.cpp | ||
|
||
Explanation | ||
----------- | ||
|
||
A motion blur image recovering algorithm consists of PSF generation, Wiener filter generation and filtering a blurred image in a frequency domain: | ||
@snippet samples/cpp/tutorial_code/ImgProc/motion_deblur_filter/motion_deblur_filter.cpp main | ||
|
||
A function calcPSF() forms a PSF according to input parameters \f$LEN\f$ and \f$THETA\f$ (in degrees): | ||
@snippet samples/cpp/tutorial_code/ImgProc/motion_deblur_filter/motion_deblur_filter.cpp calcPSF | ||
|
||
A function edgetaper() tapers the input image’s edges in order to reduce the ringing effect in a restored image: | ||
@snippet samples/cpp/tutorial_code/ImgProc/motion_deblur_filter/motion_deblur_filter.cpp edgetaper | ||
|
||
The functions calcWnrFilter(), fftshift() and filter2DFreq() realize an image filtration by a specified PSF in the frequency domain. The functions are copied from the tutorial | ||
@ref tutorial_out_of_focus_deblur_filter "Out-of-focus Deblur Filter". | ||
|
||
Result | ||
------ | ||
|
||
Below you can see the real world image with motion blur distortion. The license plate is not readable on both cars. The red markers show the car’s license plate location. | ||
![Motion blur image. The license plates are not readable](images/motion_original.jpg) | ||
|
||
|
||
Below you can see the restoration result for the black car license plate. The result has been computed with \f$LEN\f$ = 125, \f$THETA\f$ = 0, \f$SNR\f$ = 700. | ||
![The restored image of the black car license plate](images/black_car.jpg) | ||
|
||
Below you can see the restoration result for the white car license plate. The result has been computed with \f$LEN\f$ = 78, \f$THETA\f$ = 15, \f$SNR\f$ = 300. | ||
![The restored image of the white car license plate](images/white_car.jpg) | ||
|
||
The values of \f$SNR\f$, \f$LEN\f$ and \f$THETA\f$ were selected manually to give the best possible visual result. The \f$THETA\f$ parameter coincides with the car’s moving direction, and the | ||
\f$LEN\f$ parameter depends on the car’s moving speed. | ||
The result is not perfect, but at least it gives us a hint of the image’s content. With some effort, the car license plate is now readable. | ||
|
||
@note The parameters \f$LEN\f$ and \f$THETA\f$ are the most important. You should adjust \f$LEN\f$ and \f$THETA\f$ first, then \f$SNR\f$. | ||
|
||
You can also find a quick video demonstration of a license plate recovering method | ||
[YouTube](https://youtu.be/xSrE0hdhb4o). | ||
@youtube{xSrE0hdhb4o} |
Oops, something went wrong.