parent
82f3da5ef1
commit
35de0aa7ca
3 changed files with 77 additions and 0 deletions
@ -0,0 +1,77 @@ |
||||
Image Inpainting {#tutorial_xphoto_inpainting} |
||||
================ |
||||
|
||||
Introduction |
||||
------------ |
||||
In this tutorial we will show how to use the algorithm Rapid Frequency Selective Reconstructiom (FSR) for image inpainting. |
||||
|
||||
Basics |
||||
------ |
||||
Image Inpainting is the process of reconstructing damaged or missing parts of an image. |
||||
This is achieved by replacing distorted pixels by pixels similar to the neighboring ones. There are several algorithms for inpainting, using different approaches for such replacement. |
||||
|
||||
One of those algorithms is called **Rapid Frequency Selectice Reconstruction (FSR)**. |
||||
FSR reconstructs image signals by exploiting the property that small areas of images can be represented sparsely in the Fourier domain. See @cite GenserPCS2018 and @cite SeilerTIP2015 for details. |
||||
|
||||
FSR can be utilized for the following areas of application: |
||||
|
||||
-# **Error Concealment (Inpainting)**: |
||||
The sampling mask indicates the missing pixels of the distorted input image to be reconstructed. |
||||
|
||||
-# **Non-Regular Sampling**: |
||||
For more information on how to choose a good sampling mask, please review @cite GroscheICIP2018 and @cite GroscheIST2018. |
||||
|
||||
Example |
||||
------- |
||||
The following sample code shows how to use FSR for inpainting. |
||||
The non-zero pixels of the error mask indicate valid image area, while zero pixels indicate area to be reconstructed. |
||||
You can create an arbitrary mask manually using tools like Paint or GIMP. Start with a plain white image and draw some distortions in black. |
||||
|
||||
@code{.cpp} |
||||
|
||||
#include <opencv2/opencv.hpp> |
||||
#include <opencv2/xphoto/inpainting.hpp> |
||||
#include <iostream> |
||||
|
||||
using namespace cv; |
||||
|
||||
int main(int argc, char** argv) |
||||
{ |
||||
// read image and error pattern |
||||
Mat original_, mask_; |
||||
original_ = imread("images/kodim22.png"); |
||||
mask_ = imread("images/pattern_random.png", IMREAD_GRAYSCALE); |
||||
|
||||
// make sure that mask and source image have the same size |
||||
Mat mask; |
||||
resize(mask_, mask, original_.size(), 0.0, 0.0, cv::INTER_NEAREST); |
||||
|
||||
// distort image |
||||
Mat im_distorted(original_.size(), original_.type(), Scalar::all(0)); |
||||
original_.copyTo(im_distorted, mask); // copy valid pixels only (i.e. non-zero pixels in mask) |
||||
|
||||
// reconstruct the distorted image |
||||
// choose quality profile fast (xphoto::INPAINT_FSR_FAST) or best (xphoto::INPAINT_FSR_BEST) |
||||
Mat reconstructed; |
||||
xphoto::inpaint(im_distorted, mask, reconstructed, xphoto::INPAINT_FSR_FAST); |
||||
|
||||
imshow("orignal image", original_); |
||||
imshow("distorted image", im_distorted); |
||||
imshow("reconstructed image", reconstructed); |
||||
waitKey(); |
||||
|
||||
return 0; |
||||
} |
||||
@endcode |
||||
|
||||
Original and distorted image: |
||||
 |
||||
|
||||
Reconstruction: |
||||
 |
||||
|
||||
Left image: fast quality profile (run time 8 seconds). Right image: best quality profile (1 minute 51 seconds). |
||||
|
||||
Additional Resources |
||||
-------------------- |
||||
[Comparison of FSR to existing inpainting methods in OpenCV](https://github.com/opencv/opencv_contrib/files/3730212/inpainting_comparison.pdf) |
After Width: | Height: | Size: 396 KiB |
After Width: | Height: | Size: 301 KiB |
Loading…
Reference in new issue