-
Notifications
You must be signed in to change notification settings - Fork 55
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
Demo-Spatial Transformations #167
Merged
johnnychen94
merged 6 commits into
JuliaImages:source
from
ashwani-rathee:Demo-SpatialTransformations
Dec 5, 2020
Merged
Changes from 5 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
9394648
Demo-Spatial Transformations
ashwani-rathee f248913
spelling mistake
ashwani-rathee cb3ff3c
suggestions incorporated,except one
ashwani-rathee 1d0838b
Used @view and PaddedView
ashwani-rathee 93cb002
Removing error
ashwani-rathee 51bd6e7
Suggested changes
ashwani-rathee File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
94 changes: 94 additions & 0 deletions
94
docs/examples/spatial_transformation/SpatialTransformations.jl
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,94 @@ | ||
# --- | ||
# title: Cropping, Resizing and Rescaling | ||
# cover: assets/lighthouse.png | ||
# author: Ashwani Rathee | ||
# date: 2020-11-24 | ||
# --- | ||
|
||
# This demonstration shows how to use cropping,resizing and rescaling operations on an | ||
# image in Julia using ImageTransformations.jl | ||
|
||
using ImageCore, ImageShow, ImageTransformations, TestImages, OffsetArrays, ImageShow | ||
## load an example image | ||
img_source = testimage("lighthouse") | ||
|
||
# ## Cropping Operation | ||
|
||
# Cropping is one of the most basic photo manipulation processes, and it is carried out to | ||
# remove an unwanted object or irrelevant noise from the periphery of a photograph, to | ||
# change its aspect ratio, or to improve the overall composition. | ||
|
||
# Let's first check the size of the image | ||
|
||
img_size = size(img_source) | ||
|
||
# Output is `(512,768)` which stands means `img_source` is `512` in height and `768` in width. | ||
# In Julia, images as multidimensional arrays are stored in column-major order, which means that this first index corresponds to the | ||
# vertical axis (column) and the second to the horizontal axis (row). | ||
# | ||
# !!! tip | ||
# An related issue about the memory order is the indexing performance, see [Performance Tips](https://docs.julialang.org/en/v1/manual/performance-tips/#man-performance-column-major) for more details. | ||
|
||
# Let's crop the image from sides by 1/8 of img_source each side and leave it as it is from | ||
# top to bottom. | ||
|
||
# Easiest way to do this is indexing: `img_source[y1:y2, x1:x2]` | ||
|
||
# Region of Interest: [y1, y2] sets the range for y-axis and [x1, x2] sets the range for | ||
# x-axis of source image. | ||
|
||
img_cropped = @view img_source[ :,floor(Int, 1/8*img_size[2]) : floor(Int, 7/8*img_size[2])] | ||
|
||
# Let's see the size of the cropped image: | ||
|
||
size(img_cropped) | ||
|
||
# We can also do size-preserved cropping of the image by replacing the contents of image to white pixels or transparent pixels using PaddedView: | ||
|
||
img_padded = PaddedView(ARGB(0, 0, 0, 0), OffsetArray(img_cropped, OffsetArrays.Origin(1, floor(Int, 1/8*img_size[2]))), axes(img_source)) | ||
|
||
# ## Resizing Operation | ||
|
||
# Resizing is a method to resize an image to a given specific output image shape. It is | ||
# different from rescaling as in rescaling we use a scaling factor to manipulate the image. | ||
|
||
img_square = imresize(img_source, (400, 400)); | ||
img_small = imresize(img_source, ratio=1/4); | ||
img_medium = imresize(img_small, size(img_small).*2); | ||
mosaicview(img_source, img_square, img_small, img_medium; nrow=1) | ||
|
||
# ## Rescaling | ||
|
||
# Rescale operation resizes an image by a given scaling factor. The scaling factor can | ||
# either be a single floating point value, or multiple values - one along each axis. | ||
# Image scaling is the process of changing the size of an image while preserving the | ||
# original aspect ratio. | ||
|
||
# ### Rescaling by percentage | ||
|
||
percentage_scale = 0.6 | ||
new_size = trunc.(Int, size(img_source) .* percentage_scale) | ||
img_rescaled = imresize(img_source, new_size); | ||
mosaicview(img_source, img_rescaled; nrow=1) | ||
|
||
# We calculated new size by estimating the size of frame by multiplying size by scale and | ||
# then truncated it to Int format. | ||
|
||
# ### Rescaling to a specific dimension | ||
|
||
new_width = 200 | ||
percentage_scale = new_width / size(img_source,2); | ||
new_size = trunc.(Int, size(img_source) .* percentage_scale); | ||
img_rescaled = imresize(img_source, new_size); | ||
mosaicview(img_source, img_rescaled; nrow=1) | ||
|
||
# We have updated our scale by percentage solution to calculate scale-percentage | ||
# dynamically based on a change in one of the dimensions. | ||
# Remember: `size(sourceimage) == (height, width) | ||
|
||
# ### Rescaling by two-fold using restrict function | ||
|
||
rescaled_both = restrict(img_source); # both side | ||
rescaled_height = restrict(img_source, 1); # height | ||
rescaled_width = restrict(img_source, 2); # width | ||
mosaicview(img_source, rescaled_both, rescaled_height, rescaled_width; nrow=1) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The duplicated
ImageShow
here.Might be more concise to just import
Images
if we have a lot of packages to import