Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add demo: inpainting #138

Open
wants to merge 1 commit into
base: source
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/examples/color_channels/rgb_grayscale.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ mosaicview(rgb_image, gray_image; nrow = 1)
# [Rec. ITU-R BT.601-7](https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.601-7-201103-I!!PDF-E.pdf) rounding off to 3 decimal places
# `0.299 * R + 0.587 * G + 0.114 * B`

using FileIO #src
save("assets/rgb_grayscale.png", gray_image) #src
42 changes: 42 additions & 0 deletions docs/examples/filters_and_restorations/inpainting.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# ---
# title: Image Inpainting
# cover: assets/inpainting.png
# ---

# This demo illustrates the use of [image inpainting](https://github.com/JuliaImages/ImageInpainting.jl) algorithm in JuliaImages.

# Inpainting is the process of constructing lost or deteriorated parts of an
# image or video. It is also used for removing undesired elements from a scene.
#
# The basic idea of inpainting is: Replace those bad marks (or undesired elements) with its
# neighbouring pixels so that it looks like the neighbourhood.

# In this demo we will be removing an undesired element form an image.

using ImageInpainting, TestImages, ImageCore

img = Float64.(Gray.(testimage("lighthouse")));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it because the inpaint only accepts numerical array as inputs? In that case, we should fix and make it also works for AbstractArray{<:AbstractGray}.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay I would like to work on that

Copy link
Member

@johnnychen94 johnnychen94 Jun 30, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like the algorithm isn't optimized well, the memory allocation is conspicuous to me.

julia> @time out = inpaint(img, mask, Criminisi(30,30));
 14.502141 seconds (2.16 M allocations: 13.540 GiB, 18.97% gc time)

I'm not sure what's currently on your TODO list, but I guess this is also worth checking.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update on this:

@time out = inpaint(img, mask, Criminisi(30,30));
 17.644576 seconds (4.94 M allocations: 13.659 GiB, 3.46% gc time)

😄 It's pretty slow,let's check

Gray.(img)

# Create a mask of same size as of image
mask = falses(size(img));

# pixels where mask is set to true will be inpainted
mask[50:350,300:400] .= true;
Gray.(mask)

# inpaint take the parametes image, mask and algorithm.
# We will be using Criminisi [1] algorithm
out = inpaint(img, mask, Criminisi(30,30));

mosaicview(Gray.(img), Gray.(mask), Gray.(out); nrow = 1)

# Note: Currently, ImageInpainting.jl only supports 2D images
# ### References
# [1] Criminisi, A., Pérez, P., Toyama, K., 2004. Region Filling
# and Object Removal by Examplar-based Image Inpainting.

# --- save covers --- #src
using FileIO #src
save("assets/inpainting.png", mosaicview(Gray.(img), Gray.(out); nrow = 1)) #src

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# cover: assets/histogram_equalization.png
# ---

# This demo issustrates the use of [Histogram equalization](https://juliaimages.org/ImageContrastAdjustment.jl/stable/reference/#Equalization-1), [gamma correction matching](https://juliaimages.org/ImageContrastAdjustment.jl/stable/reference/#Matching-1)
# This demo illustrates the use of [Histogram equalization](https://juliaimages.org/ImageContrastAdjustment.jl/stable/reference/#Equalization-1), [gamma correction matching](https://juliaimages.org/ImageContrastAdjustment.jl/stable/reference/#Matching-1)
# and [Contrast Limited Adaptive Histogram Equalization](https://juliaimages.org/ImageContrastAdjustment.jl/stable/reference/#AdaptiveEqualization-1)

# Histogram equalisation is used to imporve the contrast in an
Expand Down