forked from hyperspy/hyperspy
-
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.
- Loading branch information
Showing
6 changed files
with
49 additions
and
70 deletions.
There are no files selected for viewing
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
File renamed without changes
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,57 +1,64 @@ | ||
""" | ||
Extract line profile from image | ||
=============================== | ||
Extract line profile from image interactively | ||
============================================= | ||
Use a ``Line2DROI`` to interactively extract a line profile with a certain width | ||
from an image. | ||
Interactively extract a line profile (with a certain width) from an image using | ||
:py:class:`~.api.roi.Line2DROI`. Use :func:`~.api.plot.plot_spectra` to plot several | ||
line profiles on the same figure. Save a profile data as ``msa`` file. | ||
""" | ||
|
||
#%% | ||
# Initialize image data as HyperSpy signal: | ||
import hyperspy.api as hs | ||
import scipy | ||
img = hs.signals.Signal2D(scipy.datasets.ascent()) | ||
|
||
#%% | ||
# Intialize Line-ROI from pixel (90,90) to pixel (200,250) of width 5. | ||
# You can also use calibrated axes units by providing floats instead of integers. | ||
line_roi = hs.roi.Line2DROI(90, 90, 200, 250, 5) | ||
#.. figure:: ../../_static/interactive_profiles.gif | ||
# :align: center | ||
# :width: 1024 | ||
# :alt: Interactive example gif of region of interest and associated profile plots. | ||
# | ||
# Extracting line profiles and interactive plotting. | ||
|
||
#%% | ||
# Plot the image and display the ROI (creates new signal object): | ||
img.plot(cmap='viridis') | ||
roi1D = line_roi.interactive(img, color='yellow') | ||
# Initialize image data as HyperSpy signal: | ||
import hyperspy.api as hs | ||
import holospy as holo | ||
im0 = holo.data.Fe_needle_reference_hologram() | ||
im1 = holo.data.Fe_needle_hologram() | ||
|
||
#%% | ||
# You can drag and drop the ends of the ROI to adjust. | ||
# Print the (updated) parameters of the ROI: | ||
print('%.3f, %.3f, %.3f, %.3f, %.2f' % (line_roi.x1, line_roi.y1, line_roi.x2, line_roi.y2, line_roi.linewidth)) | ||
# Intialize Line-ROI from position (400,250) to position (220,600) of width 5 | ||
# in calibrated axes units (in the current example equal to the image pixels): | ||
line_roi = hs.roi.Line2DROI(400, 250, 220, 600, 5) | ||
|
||
#%% | ||
# You can also display the same ROI on a second image | ||
# (e.g. to make sure that a profile is well placed on both images). | ||
# In this example, we create a second image by differentiating the original image: | ||
img2 = img.diff(axis=-1) | ||
img2.plot() | ||
roi1D = line_roi.interactive(img2, color='green') | ||
# Extract data along the ROI as new signal by "slicing" the signal and plot the | ||
# profile: | ||
profile = line_roi(im0) | ||
profile.plot() | ||
|
||
#%% | ||
# Extract data along ROI as new signal: | ||
profile = line_roi(img) | ||
profile | ||
# Slicing of the signal is not interactive. If you want to modify the line along | ||
# which the profile is extracted, you can plot the image and display the ROI | ||
# interactively (creates a new signal object). You can even display the same ROI | ||
# on a second image to make sure that a profile is well placed on both images: | ||
im0.plot() | ||
profile1 = line_roi.interactive(im0, color='green') | ||
im1.plot() | ||
profile2 = line_roi.interactive(im1, color='green') | ||
|
||
#%% | ||
# Plot the profile: | ||
profile.plot() | ||
# You can then drag and drop the ends of the ROI to adjust the placement. | ||
# | ||
# If you want to later update the ROI initialization with the modified parameters, | ||
# you can print these: | ||
print(tuple(line_roi)) | ||
|
||
#%% | ||
# Extract data along the same ROI from the second image and plot both profiles: | ||
profile2 = line_roi(img2) | ||
hs.plot.plot_spectra([profile, profile2]) | ||
# Choose the third figure as gallery thumbnail: | ||
# You can now directly access the data of the profile objects, e.g. to plot both | ||
# profiles in a single plot: | ||
hs.plot.plot_spectra([profile1, profile2]) | ||
# Choose the fourth figure as gallery thumbnail: | ||
# sphinx_gallery_thumbnail_number = 4 | ||
|
||
#%% | ||
# Save profile as `.msa` text file: | ||
profile.save('extracted-line-profile.msa', format='XY') | ||
# Since the profile is a signal object, you can use any other functionality provided | ||
# by hyperspy, e.g. to save a profile as `.msa` text file: | ||
profile1.save('extracted-line-profile.msa', format='XY') |
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