File: compare_rotation_results.py

package info (click to toggle)
sunpy 7.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,632 kB
  • sloc: python: 41,887; ansic: 1,720; makefile: 28
file content (74 lines) | stat: -rw-r--r-- 3,004 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
================================
Comparing Map Rotation Functions
================================

This example will compare between the current library implementations for `sunpy.map.GenericMap.rotate`.
"""
import matplotlib.pyplot as plt

import astropy.units as u

import sunpy.data.sample
import sunpy.map

###############################################################################
# Rotating a map in sunpy has a choice between three libraries: ``scipy`` (the default),
# ``scikit-image`` and ``opencv``. Furthermore, one can also create a custom rotation
# function and register it for use with :meth:`~sunpy.map.GenericMap.rotate`,
# see :ref:`Adding a new rotation method <sunpy-topic-guide-add-a-new-rotation-method-to-map>`.
#
# Defining an appropriate metric to compare different algorithms is
# challenging. This example will just compare the raw value differences.

###############################################################################
# Using an HMI sample data, we will do a rotation to align the image to the north.
# By default, the order of rotation is 3.

hmi_map = sunpy.map.Map(sunpy.data.sample.HMI_LOS_IMAGE)

scipy_map = hmi_map.rotate(method='scipy')
skimage_map = hmi_map.rotate(method='scikit-image')
cv2_map = hmi_map.rotate(method='opencv')

###############################################################################
# Now for a visual comparison, the raw differences, that should highlight the differences.
# Note that only two comparisons are shown. Note the scale here is ± 10.

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))

img1 = ax1.imshow(scipy_map.data - skimage_map.data, cmap='RdBu_r', vmin=-10, vmax=10)
ax1.set_title("HMI Difference: scipy vs scikit-image")
fig.colorbar(img1, ax=ax1)

img2 = ax2.imshow(scipy_map.data - cv2_map.data, cmap='RdBu_r', vmin=-10, vmax=10)
ax2.set_title("HMI Difference: scipy vs opencv")
fig.colorbar(img2, ax=ax2)

plt.show()

###############################################################################
# We can repeat this but for AIA data, using a 171 sample image.
# We will rotate it by the large amount of 30 degrees.

aia_map = sunpy.map.Map(sunpy.data.sample.AIA_171_IMAGE)

scipy_map = aia_map.rotate(30*u.deg, method='scipy')
skimage_map = aia_map.rotate(30*u.deg, method='scikit-image')
cv2_map = aia_map.rotate(30*u.deg, method='opencv')

###############################################################################
# Now for a visual comparison, the raw differences, that should highlight the differences.
# Note that only two comparisons are shown. Note the scale here is ± 75.

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))

img1 = ax1.imshow(scipy_map.data - skimage_map.data, cmap='RdBu_r', vmin=-75, vmax=75)
ax1.set_title("AIA Difference: scipy vs scikit-image")
fig.colorbar(img1, ax=ax1)

img2 = ax2.imshow(scipy_map.data - cv2_map.data, cmap='RdBu_r', vmin=-75, vmax=75)
ax2.set_title("AIA Difference: scipy vs opencv2")
fig.colorbar(img2, ax=ax2)

plt.show()