From 04b782375ab6dbb1c6972f44e5873f099ce9489b Mon Sep 17 00:00:00 2001
From: JulioContrerasH Install the latest version from PyPI:Key features ✨
Installation ⚙️
pip install satalign
+
pip install satalign
+
PCC
module, you need to install additional dependencies:
+pip install satalign[pcc]
+
pip install scikit-image
+
pip install satalign[deep]
How to use 🛠️
Align an ee.ImageCollection with
@@ -541,13 +550,12 @@ satalign.pcc.PCC
🌍Load libraries
import fastcubo
import satalign
import satalign.pcc
-import satalign.ecc
import matplotlib.pyplot as plt
from IPython.display import Image, display
Auth and Init GEE
# Initialize depending on the environment
-ee.Autenticate()
+ee.Authenticate()
ee.Initialize(opt_url="https://earthengine-highvolume.googleapis.com") # project = "name"
Dataset
@@ -623,8 +631,11 @@ Graphics
Here's an addition to clarify that datacube
and reference_image
have already been defined:
satalign.eec.ECC
📚# Initialize the ECC model
+import satalign.ecc
+
+# Initialize the ECC model
ecc_model = satalign.ecc.ECC(
datacube=s2_datacube,
reference=reference_image,
@@ -634,10 +645,13 @@ Align an Image Collection
aligned_cube, warp_matrices = ecc_model.run()
Align using Local Features with satalign.lgm.LGM
🧮
-# Initialize the LGM model
+Here's the updated version with a note about using floating-point values or scaling:
+import satalign.lgm
+
+# Initialize the LGM model
lgm_model = satalign.lgm.LGM(
- datacube=datacube,
- reference=reference_image,
+ datacube=datacube / 10_000,
+ reference=reference_image / 10_000,
feature_model="superpoint",
matcher_model="lightglue",
)
diff --git a/satalign/ecc.py b/satalign/ecc.py
index c854033..d7e8819 100644
--- a/satalign/ecc.py
+++ b/satalign/ecc.py
@@ -14,6 +14,7 @@
import cv2
import numpy as np
+import xarray as xr
from satalign.main import SatAlign
@@ -21,20 +22,20 @@
class ECC(SatAlign):
def __init__(
self,
- datacube: np.ndarray,
- reference: np.ndarray,
+ datacube: Union[np.ndarray, xr.DataArray],
+ reference: Union[np.ndarray, xr.DataArray],
criteria: Tuple[int, int, float] = (cv2.TERM_CRITERIA_COUNT, 100, 0),
gauss_kernel_size: int = 3,
**kwargs,
):
"""
-
Args:
- datacube (xr.DataArray): The data cube to be aligned. The data cube
- needs to have the following dimensions: (time, bands, height, width).
- reference (Optional[xr.DataArray], optional): The reference image.
- The reference image needs to have the following dimensions:
- (bands, height, width).
+ datacube (Union[np.ndarray, xr.DataArray]): Data cube to align with
+ dimensions (time, bands, height, width). Ensure values are
+ floats; if not, divide by 10,000.
+ reference (Union[np.ndarray, xr.DataArray]): Reference image with
+ dimensions (bands, height, width). Ensure values are floats;
+ if not, divide by 10,000.
criteria (Tuple[int, int, float], optional): The strategy for the termination
of the iterative search algorithm. The cv2.TERM_CRITERIA_COUNT indicates
that the algorithm should terminate after a certain number of iterations.
diff --git a/satalign/lgm.py b/satalign/lgm.py
index d05e88f..26f70fc 100644
--- a/satalign/lgm.py
+++ b/satalign/lgm.py
@@ -1,6 +1,7 @@
import warnings
from typing import List, Optional, Tuple, Union
+import xarray as xr
import numpy as np
import torch
@@ -13,8 +14,8 @@
class LGM(SatAlign):
def __init__(
self,
- datacube: np.ndarray,
- reference: np.ndarray,
+ datacube: Union[np.ndarray, xr.DataArray],
+ reference: Union[np.ndarray, xr.DataArray],
feature_model: str = "superpoint",
matcher_model: str = "lightglue",
max_num_keypoints: int = 2048,
@@ -22,13 +23,13 @@ def __init__(
**kwargs,
):
"""
-
Args:
- datacube (xr.DataArray): The data cube to be aligned. The data cube
- needs to have the following dimensions: (time, bands, height, width).
- reference (Optional[xr.DataArray], optional): The reference image.
- The reference image needs to have the following dimensions:
- (bands, height, width).
+ datacube (Union[np.ndarray, xr.DataArray]): Data cube to align with
+ dimensions (time, bands, height, width). Ensure values are
+ floats; if not, divide by 10,000.
+ reference (Union[np.ndarray, xr.DataArray]): Reference image with
+ dimensions (bands, height, width). Ensure values are floats;
+ if not, divide by 10,000.
feature_model (str, optional): The feature extractor model. Defaults to
'superpoint'. Options are: 'superpoint'. Options are: 'superpoint',
'disk', 'sift', 'aliked', 'doghardnet'.
@@ -190,7 +191,11 @@ def get_reference_points(self) -> dict:
"""
# Create the reference layer (H x W) to torch
- reference_layer = self.create_layer(img=self.reference[self.rgb_bands])
+ if isinstance(self.reference, xr.DataArray):
+ reference_layer = self.create_layer(img=self.reference.values)
+ else:
+ reference_layer = self.create_layer(img=self.reference)
+
reference_layer_torch = (
torch.from_numpy(reference_layer).float()[None].to(self.device)
)
diff --git a/satalign/pcc.py b/satalign/pcc.py
index 7724f07..1d8332d 100644
--- a/satalign/pcc.py
+++ b/satalign/pcc.py
@@ -1,6 +1,7 @@
import warnings
from typing import List, Optional, Tuple, Union
+import xarray as xr
import numpy as np
from skimage.registration import phase_cross_correlation
@@ -10,8 +11,8 @@
class PCC(SatAlign):
def __init__(
self,
- datacube: np.ndarray,
- reference: np.ndarray,
+ datacube: Union[np.ndarray, xr.DataArray],
+ reference: Union[np.ndarray, xr.DataArray],
upsample_factor: Optional[int] = 50,
space: Optional[str] = "real",
disambiguate: Optional[bool] = False,
@@ -19,13 +20,13 @@ def __init__(
**kwargs,
):
"""
-
Args:
- datacube (xr.DataArray): The data cube to be aligned. The data cube
- needs to have the following dimensions: (time, bands, height, width).
- reference (Optional[xr.DataArray], optional): The reference image.
- The reference image needs to have the following dimensions:
- (bands, height, width).
+ datacube (Union[np.ndarray, xr.DataArray]): Data cube to align with
+ dimensions (time, bands, height, width). Ensure values are
+ floats; if not, divide by 10,000.
+ reference (Union[np.ndarray, xr.DataArray]): Reference image with
+ dimensions (bands, height, width). Ensure values are floats;
+ if not, divide by 10,000.
upsample_factor (Optional[int], optional): Upsampling factor. Images will
be registered to within ``1 / upsample_factor`` of a pixel. For example
``upsample_factor == 20`` means the images will be registered within 1/20th
diff --git a/search/search_index.json b/search/search_index.json
index ae0bebc..dda3cdf 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"A Python package for efficient multi-temporal image co-registration \ud83d\ude80 GitHub : https://github.com/IPL-UV/satalign \ud83c\udf10 PyPI : https://pypi.org/project/satalign/ \ud83d\udee0\ufe0f Overview \ud83d\udcca Satalign is a Python package designed for efficient multi-temporal image co-registration. It enables aligning temporal data cubes with reference images using advanced techniques such as Phase Cross-Correlation (PCC), Enhanced Cross-Correlation (ECC), and Local Features Matching (LGM). This package facilitates the manipulation and processing of large volumes of Earth observation data efficiently. Key features \u2728 Advanced alignment algorithms : Leverages ECC, PCC, and LGM to accurately align multi-temporal images. \ud83d\udd0d Efficient data cube management : Processes large data cubes with memory and processing optimizations. \ud83e\udde9 Support for local feature models : Utilizes models like SuperPoint, SIFT, and more for keypoint matching. \ud83d\udda5\ufe0f Parallelization : Executes alignment processes across multiple cores for faster processing. \ud83d\ude80 Installation \u2699\ufe0f Install the latest version from PyPI: pip install satalign How to use \ud83d\udee0\ufe0f Align an ee.ImageCollection with satalign.pcc.PCC \ud83c\udf0d Load libraries import ee import fastcubo import satalign import satalign.pcc import satalign.ecc import matplotlib.pyplot as plt from IPython.display import Image , display Auth and Init GEE # Initialize depending on the environment ee . Autenticate () ee . Initialize ( opt_url = \"https://earthengine-highvolume.googleapis.com\" ) # project = \"name\" Dataset # Download image collection table = fastcubo . query_getPixels_imagecollection ( point = ( - 75.71260 , - 14.18835 ), collection = \"COPERNICUS/S2_HARMONIZED\" , bands = [ \"B2\" , \"B3\" , \"B4\" , \"B8\" ], data_range = [ \"2023-12-01\" , \"2023-12-31\" ], edge_size = 256 , resolution = 10 , ) fastcubo . getPixels ( table , nworkers = 4 , output_path = \"output\" ) Align dataset # Create a data cube and select images if desired s2_datacube = satalign . utils . create_array ( \"output\" , \"datacube.pickle\" ) # Define reference image reference_image = s2_datacube . sel ( time = s2_datacube . time > \"2022-08-03\" ) . mean ( \"time\" ) # Initialize and run PCC model pcc_model = satalign . pcc . PCC ( datacube = s2_datacube , reference = reference_image , channel = \"mean\" , crop_center = 128 , num_threads = 2 , ) # Run the alignment aligned_cube , warp_matrices = pcc_model . run_multicore () # Display the warped cube warp_df = satalign . utils . warp2df ( warp_matrices , s2_datacube . time . values ) satalign . utils . plot_s2_scatter ( warp_df ) plt . show () Graphics # Display profiles satalign . utils . plot_profile ( warped_cube = aligned_cube . values , raw_cube = s2_datacube . values , x_axis = 3 , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , ) plt . show () # Create PNGs and GIF # Note: The following part requires a Linux environment # !apt-get install imagemagick gifspath = satalign . utils . plot_animation1 ( warped_cube = aligned_cube [ 0 : 50 ] . values , raw_cube = s2_datacube [ 0 : 50 ] . values , dates = s2_datacube . time [ 0 : 50 ] . values , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , png_output_folder = \"./output_png\" , gif_delay = 20 , gif_output_file = \"./animation1.gif\" , ) display ( Image ( filename = 'animation1.gif' )) Align an Image Collection with satalign.eec.ECC \ud83d\udcda # Initialize the ECC model ecc_model = satalign . ecc . ECC ( datacube = s2_datacube , reference = reference_image , gauss_kernel_size = 5 , ) # Run the alignment aligned_cube , warp_matrices = ecc_model . run () Align using Local Features with satalign.lgm.LGM \ud83e\uddee # Initialize the LGM model lgm_model = satalign . lgm . LGM ( datacube = datacube , reference = reference_image , feature_model = \"superpoint\" , matcher_model = \"lightglue\" , ) # Run the alignment aligned_cube , warp_matrices = lgm_model . run () In this document, we presented three different examples of how to use SatAlign with PCC, ECC, and LGM for multi-temporal image co-registration. Each example shows how to download an image collection from Google Earth Engine, create a data cube, and align the images using one of the three methods provided by the SatAlign package.","title":"Index"},{"location":"index.html#_1","text":"A Python package for efficient multi-temporal image co-registration \ud83d\ude80 GitHub : https://github.com/IPL-UV/satalign \ud83c\udf10 PyPI : https://pypi.org/project/satalign/ \ud83d\udee0\ufe0f","title":""},{"location":"index.html#overview","text":"Satalign is a Python package designed for efficient multi-temporal image co-registration. It enables aligning temporal data cubes with reference images using advanced techniques such as Phase Cross-Correlation (PCC), Enhanced Cross-Correlation (ECC), and Local Features Matching (LGM). This package facilitates the manipulation and processing of large volumes of Earth observation data efficiently.","title":"Overview \ud83d\udcca"},{"location":"index.html#key-features","text":"Advanced alignment algorithms : Leverages ECC, PCC, and LGM to accurately align multi-temporal images. \ud83d\udd0d Efficient data cube management : Processes large data cubes with memory and processing optimizations. \ud83e\udde9 Support for local feature models : Utilizes models like SuperPoint, SIFT, and more for keypoint matching. \ud83d\udda5\ufe0f Parallelization : Executes alignment processes across multiple cores for faster processing. \ud83d\ude80","title":"Key features \u2728"},{"location":"index.html#installation","text":"Install the latest version from PyPI: pip install satalign","title":"Installation \u2699\ufe0f"},{"location":"index.html#how-to-use","text":"","title":"How to use \ud83d\udee0\ufe0f"},{"location":"index.html#align-an-eeimagecollection-with-satalignpccpcc","text":"","title":"Align an ee.ImageCollection with satalign.pcc.PCC \ud83c\udf0d"},{"location":"index.html#load-libraries","text":"import ee import fastcubo import satalign import satalign.pcc import satalign.ecc import matplotlib.pyplot as plt from IPython.display import Image , display","title":"Load libraries"},{"location":"index.html#auth-and-init-gee","text":"# Initialize depending on the environment ee . Autenticate () ee . Initialize ( opt_url = \"https://earthengine-highvolume.googleapis.com\" ) # project = \"name\"","title":"Auth and Init GEE"},{"location":"index.html#dataset","text":"# Download image collection table = fastcubo . query_getPixels_imagecollection ( point = ( - 75.71260 , - 14.18835 ), collection = \"COPERNICUS/S2_HARMONIZED\" , bands = [ \"B2\" , \"B3\" , \"B4\" , \"B8\" ], data_range = [ \"2023-12-01\" , \"2023-12-31\" ], edge_size = 256 , resolution = 10 , ) fastcubo . getPixels ( table , nworkers = 4 , output_path = \"output\" )","title":"Dataset"},{"location":"index.html#align-dataset","text":"# Create a data cube and select images if desired s2_datacube = satalign . utils . create_array ( \"output\" , \"datacube.pickle\" ) # Define reference image reference_image = s2_datacube . sel ( time = s2_datacube . time > \"2022-08-03\" ) . mean ( \"time\" ) # Initialize and run PCC model pcc_model = satalign . pcc . PCC ( datacube = s2_datacube , reference = reference_image , channel = \"mean\" , crop_center = 128 , num_threads = 2 , ) # Run the alignment aligned_cube , warp_matrices = pcc_model . run_multicore () # Display the warped cube warp_df = satalign . utils . warp2df ( warp_matrices , s2_datacube . time . values ) satalign . utils . plot_s2_scatter ( warp_df ) plt . show ()","title":"Align dataset"},{"location":"index.html#graphics","text":"# Display profiles satalign . utils . plot_profile ( warped_cube = aligned_cube . values , raw_cube = s2_datacube . values , x_axis = 3 , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , ) plt . show () # Create PNGs and GIF # Note: The following part requires a Linux environment # !apt-get install imagemagick gifspath = satalign . utils . plot_animation1 ( warped_cube = aligned_cube [ 0 : 50 ] . values , raw_cube = s2_datacube [ 0 : 50 ] . values , dates = s2_datacube . time [ 0 : 50 ] . values , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , png_output_folder = \"./output_png\" , gif_delay = 20 , gif_output_file = \"./animation1.gif\" , ) display ( Image ( filename = 'animation1.gif' ))","title":"Graphics"},{"location":"index.html#align-an-image-collection-with-sataligneececc","text":"# Initialize the ECC model ecc_model = satalign . ecc . ECC ( datacube = s2_datacube , reference = reference_image , gauss_kernel_size = 5 , ) # Run the alignment aligned_cube , warp_matrices = ecc_model . run ()","title":"Align an Image Collection with satalign.eec.ECC \ud83d\udcda"},{"location":"index.html#align-using-local-features-with-satalignlgmlgm","text":"# Initialize the LGM model lgm_model = satalign . lgm . LGM ( datacube = datacube , reference = reference_image , feature_model = \"superpoint\" , matcher_model = \"lightglue\" , ) # Run the alignment aligned_cube , warp_matrices = lgm_model . run () In this document, we presented three different examples of how to use SatAlign with PCC, ECC, and LGM for multi-temporal image co-registration. Each example shows how to download an image collection from Google Earth Engine, create a data cube, and align the images using one of the three methods provided by the SatAlign package.","title":"Align using Local Features with satalign.lgm.LGM \ud83e\uddee"},{"location":"CHANGELOG.html","text":"Changelog All notable changes to this project will be documented in this file. The format is based on Keep a changelog , and this project adheres to Semantic versioning . [Unreleased] Added \u2728 Documentation updates and additional examples for alignment methods. \ud83d\udcda Changed \ud83d\udee0\ufe0f Enhanced performance optimizations in co-registration methods. \ud83d\ude80 Fixed \ud83d\udc1b Minor bug fixes in spatial alignment functions. \ud83d\udd27 [0.1.3] - 2024-05-25 Added \u2728 New methods for spatial alignment of satellite imagery. \ud83d\udef0\ufe0f Expanded documentation with examples and usage guides. \ud83d\udcc4 [0.1.1] - 2024-05-12 Added \u2728 Initial release of Satalign with basic functionalities for image co-registration. \ud83d\udee0\ufe0f Examples demonstrating the use of PCC, ECC, and LGM alignment methods. \ud83d\udcca [0.1.0] - 2024-05-08 Added \u2728 Basic structure for Satalign. \ud83c\udfd7\ufe0f Set up CI/CD pipeline with GitHub Actions. \u2699\ufe0f Added basic tests and coverage reports. \u2705","title":"Changelog"},{"location":"CHANGELOG.html#changelog","text":"All notable changes to this project will be documented in this file. The format is based on Keep a changelog , and this project adheres to Semantic versioning .","title":"Changelog"},{"location":"CHANGELOG.html#unreleased","text":"","title":"[Unreleased]"},{"location":"CHANGELOG.html#added","text":"Documentation updates and additional examples for alignment methods. \ud83d\udcda","title":"Added \u2728"},{"location":"CHANGELOG.html#changed","text":"Enhanced performance optimizations in co-registration methods. \ud83d\ude80","title":"Changed \ud83d\udee0\ufe0f"},{"location":"CHANGELOG.html#fixed","text":"Minor bug fixes in spatial alignment functions. \ud83d\udd27","title":"Fixed \ud83d\udc1b"},{"location":"CHANGELOG.html#013-2024-05-25","text":"","title":"[0.1.3] - 2024-05-25"},{"location":"CHANGELOG.html#added_1","text":"New methods for spatial alignment of satellite imagery. \ud83d\udef0\ufe0f Expanded documentation with examples and usage guides. \ud83d\udcc4","title":"Added \u2728"},{"location":"CHANGELOG.html#011-2024-05-12","text":"","title":"[0.1.1] - 2024-05-12"},{"location":"CHANGELOG.html#added_2","text":"Initial release of Satalign with basic functionalities for image co-registration. \ud83d\udee0\ufe0f Examples demonstrating the use of PCC, ECC, and LGM alignment methods. \ud83d\udcca","title":"Added \u2728"},{"location":"CHANGELOG.html#010-2024-05-08","text":"","title":"[0.1.0] - 2024-05-08"},{"location":"CHANGELOG.html#added_3","text":"Basic structure for Satalign. \ud83c\udfd7\ufe0f Set up CI/CD pipeline with GitHub Actions. \u2699\ufe0f Added basic tests and coverage reports. \u2705","title":"Added \u2728"},{"location":"CODE_OF_CONDUCT.html","text":"Contributor covenant code of conduct \ud83d\udcdc Our pledge \ud83e\udd1d In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. \ud83c\udf0e\ud83e\udd17 Our standards \ud83d\udccf Examples of behavior that contributes to creating a positive environment include: Using welcoming and inclusive language. \ud83d\ude0a Being respectful of differing viewpoints and experiences. \ud83e\udd14\ud83d\udc42 Gracefully accepting constructive criticism. \ud83d\udee0\ufe0f Focusing on what is best for the community. \ud83e\udd32 Showing empathy towards other community members. \ud83e\udd7a\u2764\ufe0f Examples of unacceptable behavior by participants include: The use of sexualized language or imagery and unwelcome sexual attention or advances. \ud83d\udeab\ud83d\udcac Trolling, insulting/derogatory comments, and personal or political attacks. \ud83d\udeab\ud83d\ude20 Public or private harassment. \ud83d\udeab\ud83d\udc65 Publishing others' private information, such as a physical or electronic address, without explicit permission. \ud83d\udeab\ud83c\udfe1 Other conduct which could reasonably be considered inappropriate in a professional setting. \ud83d\udeab\ud83d\udc54 Our responsibilities \ud83d\udee1\ufe0f Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. Scope \ud83c\udf10 This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. Enforcement \ud83d\udea8 All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. Attribution \ud83d\udc4f This Code of Conduct is adapted from the Contributor covenant , version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq","title":"Code of conduct"},{"location":"CODE_OF_CONDUCT.html#contributor-covenant-code-of-conduct","text":"","title":"Contributor covenant code of conduct \ud83d\udcdc"},{"location":"CODE_OF_CONDUCT.html#our-pledge","text":"In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. \ud83c\udf0e\ud83e\udd17","title":"Our pledge \ud83e\udd1d"},{"location":"CODE_OF_CONDUCT.html#our-standards","text":"Examples of behavior that contributes to creating a positive environment include: Using welcoming and inclusive language. \ud83d\ude0a Being respectful of differing viewpoints and experiences. \ud83e\udd14\ud83d\udc42 Gracefully accepting constructive criticism. \ud83d\udee0\ufe0f Focusing on what is best for the community. \ud83e\udd32 Showing empathy towards other community members. \ud83e\udd7a\u2764\ufe0f Examples of unacceptable behavior by participants include: The use of sexualized language or imagery and unwelcome sexual attention or advances. \ud83d\udeab\ud83d\udcac Trolling, insulting/derogatory comments, and personal or political attacks. \ud83d\udeab\ud83d\ude20 Public or private harassment. \ud83d\udeab\ud83d\udc65 Publishing others' private information, such as a physical or electronic address, without explicit permission. \ud83d\udeab\ud83c\udfe1 Other conduct which could reasonably be considered inappropriate in a professional setting. \ud83d\udeab\ud83d\udc54","title":"Our standards \ud83d\udccf"},{"location":"CODE_OF_CONDUCT.html#our-responsibilities","text":"Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.","title":"Our responsibilities \ud83d\udee1\ufe0f"},{"location":"CODE_OF_CONDUCT.html#scope","text":"This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.","title":"Scope \ud83c\udf10"},{"location":"CODE_OF_CONDUCT.html#enforcement","text":"All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.","title":"Enforcement \ud83d\udea8"},{"location":"CODE_OF_CONDUCT.html#attribution","text":"This Code of Conduct is adapted from the Contributor covenant , version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq","title":"Attribution \ud83d\udc4f"},{"location":"CONTRIBUTING.html","text":"Contributing \ud83e\udd1d We welcome contributions from the community! Every contribution, no matter how small, is appreciated and credited. Here\u2019s how you can get involved: How to contribute \ud83d\udee0\ufe0f Fork the repository: Start by forking the Satalign repository to your GitHub account. \ud83c\udf74 Clone your fork locally: cd git clone https://github.com/YOUR_GITHUB_USERNAME/Satalign.git cd Satalign Create a branch: Create a new branch for your feature or bug fix: git checkout -b name-of-your-bugfix-or-feature Set up the environment: \ud83c\udf31 If you're using pyenv , select a Python version: pyenv local Install dependencies and activate the environment: poetry install poetry shell Install pre-commit hooks: poetry run pre-commit install Make your changes: \ud83d\udd8b\ufe0f Develop your feature or fix, ensuring you write clear, concise commit messages and include any necessary tests. Check your changes: \u2705 Run formatting checks: make check Run unit tests: make test Optionally, run tests across different Python versions using tox: tox Submit a pull request: \ud83d\ude80 Push your branch to GitHub and submit a pull request to the develop branch of the Satalign repository. Ensure your pull request meets these guidelines: Include tests. Update the documentation if your pull request adds functionality. Provide a detailed description of your changes. Types of contributions \ud83d\udce6 Report bugs: \ud83d\udc1b Report bugs by creating an issue on the Satalign GitHub repository . Please include your operating system, setup details, and steps to reproduce the bug. Fix bugs: \ud83d\udee0\ufe0f Look for issues tagged with \"bug\" and \"help wanted\" in the repository to start fixing. Implement features: \u2728 Contribute by implementing features tagged with \"enhancement\" and \"help wanted.\" Write documentation: \ud83d\udcda Contribute to the documentation in the official docs, docstrings, or through blog posts and articles. Submit feedback: \ud83d\udcac Propose new features or give feedback by filing an issue on GitHub. Use the Satalign GitHub issues page for feedback.","title":"Contributing"},{"location":"CONTRIBUTING.html#contributing","text":"We welcome contributions from the community! Every contribution, no matter how small, is appreciated and credited. Here\u2019s how you can get involved:","title":"Contributing \ud83e\udd1d"},{"location":"CONTRIBUTING.html#how-to-contribute","text":"Fork the repository: Start by forking the Satalign repository to your GitHub account. \ud83c\udf74 Clone your fork locally: cd git clone https://github.com/YOUR_GITHUB_USERNAME/Satalign.git cd Satalign Create a branch: Create a new branch for your feature or bug fix: git checkout -b name-of-your-bugfix-or-feature Set up the environment: \ud83c\udf31 If you're using pyenv , select a Python version: pyenv local Install dependencies and activate the environment: poetry install poetry shell Install pre-commit hooks: poetry run pre-commit install Make your changes: \ud83d\udd8b\ufe0f Develop your feature or fix, ensuring you write clear, concise commit messages and include any necessary tests. Check your changes: \u2705 Run formatting checks: make check Run unit tests: make test Optionally, run tests across different Python versions using tox: tox Submit a pull request: \ud83d\ude80 Push your branch to GitHub and submit a pull request to the develop branch of the Satalign repository. Ensure your pull request meets these guidelines: Include tests. Update the documentation if your pull request adds functionality. Provide a detailed description of your changes.","title":"How to contribute \ud83d\udee0\ufe0f"},{"location":"CONTRIBUTING.html#types-of-contributions","text":"Report bugs: \ud83d\udc1b Report bugs by creating an issue on the Satalign GitHub repository . Please include your operating system, setup details, and steps to reproduce the bug. Fix bugs: \ud83d\udee0\ufe0f Look for issues tagged with \"bug\" and \"help wanted\" in the repository to start fixing. Implement features: \u2728 Contribute by implementing features tagged with \"enhancement\" and \"help wanted.\" Write documentation: \ud83d\udcda Contribute to the documentation in the official docs, docstrings, or through blog posts and articles. Submit feedback: \ud83d\udcac Propose new features or give feedback by filing an issue on GitHub. Use the Satalign GitHub issues page for feedback.","title":"Types of contributions \ud83d\udce6"}]}
\ No newline at end of file
+{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"A Python package for efficient multi-temporal image co-registration \ud83d\ude80 GitHub : https://github.com/IPL-UV/satalign \ud83c\udf10 PyPI : https://pypi.org/project/satalign/ \ud83d\udee0\ufe0f Overview \ud83d\udcca Satalign is a Python package designed for efficient multi-temporal image co-registration. It enables aligning temporal data cubes with reference images using advanced techniques such as Phase Cross-Correlation (PCC), Enhanced Cross-Correlation (ECC), and Local Features Matching (LGM). This package facilitates the manipulation and processing of large volumes of Earth observation data efficiently. Key features \u2728 Advanced alignment algorithms : Leverages ECC, PCC, and LGM to accurately align multi-temporal images. \ud83d\udd0d Efficient data cube management : Processes large data cubes with memory and processing optimizations. \ud83e\udde9 Support for local feature models : Utilizes models like SuperPoint, SIFT, and more for keypoint matching. \ud83d\udda5\ufe0f Parallelization : Executes alignment processes across multiple cores for faster processing. \ud83d\ude80 Installation \u2699\ufe0f Install the latest version from PyPI: pip install satalign To use the PCC module, you need to install additional dependencies: pip install satalign [ pcc ] Alternatively, if you already have satalign installed: pip install scikit-image To use the LGM module, you need to install additional dependencies: pip install satalign [ deep ] How to use \ud83d\udee0\ufe0f Align an ee.ImageCollection with satalign.pcc.PCC \ud83c\udf0d Load libraries import ee import fastcubo import satalign import satalign.pcc import matplotlib.pyplot as plt from IPython.display import Image , display Auth and Init GEE # Initialize depending on the environment ee . Authenticate () ee . Initialize ( opt_url = \"https://earthengine-highvolume.googleapis.com\" ) # project = \"name\" Dataset # Download image collection table = fastcubo . query_getPixels_imagecollection ( point = ( - 75.71260 , - 14.18835 ), collection = \"COPERNICUS/S2_HARMONIZED\" , bands = [ \"B2\" , \"B3\" , \"B4\" , \"B8\" ], data_range = [ \"2023-12-01\" , \"2023-12-31\" ], edge_size = 256 , resolution = 10 , ) fastcubo . getPixels ( table , nworkers = 4 , output_path = \"output\" ) Align dataset # Create a data cube and select images if desired s2_datacube = satalign . utils . create_array ( \"output\" , \"datacube.pickle\" ) # Define reference image reference_image = s2_datacube . sel ( time = s2_datacube . time > \"2022-08-03\" ) . mean ( \"time\" ) # Initialize and run PCC model pcc_model = satalign . pcc . PCC ( datacube = s2_datacube , reference = reference_image , channel = \"mean\" , crop_center = 128 , num_threads = 2 , ) # Run the alignment aligned_cube , warp_matrices = pcc_model . run_multicore () # Display the warped cube warp_df = satalign . utils . warp2df ( warp_matrices , s2_datacube . time . values ) satalign . utils . plot_s2_scatter ( warp_df ) plt . show () Graphics # Display profiles satalign . utils . plot_profile ( warped_cube = aligned_cube . values , raw_cube = s2_datacube . values , x_axis = 3 , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , ) plt . show () # Create PNGs and GIF # Note: The following part requires a Linux environment # !apt-get install imagemagick gifspath = satalign . utils . plot_animation1 ( warped_cube = aligned_cube [ 0 : 50 ] . values , raw_cube = s2_datacube [ 0 : 50 ] . values , dates = s2_datacube . time [ 0 : 50 ] . values , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , png_output_folder = \"./output_png\" , gif_delay = 20 , gif_output_file = \"./animation1.gif\" , ) display ( Image ( filename = 'animation1.gif' )) Here's an addition to clarify that datacube and reference_image have already been defined: Align an Image Collection with satalign.eec.ECC \ud83d\udcda import satalign.ecc # Initialize the ECC model ecc_model = satalign . ecc . ECC ( datacube = s2_datacube , reference = reference_image , gauss_kernel_size = 5 , ) # Run the alignment aligned_cube , warp_matrices = ecc_model . run () Align using Local Features with satalign.lgm.LGM \ud83e\uddee Here's the updated version with a note about using floating-point values or scaling: import satalign.lgm # Initialize the LGM model lgm_model = satalign . lgm . LGM ( datacube = datacube / 10_000 , reference = reference_image / 10_000 , feature_model = \"superpoint\" , matcher_model = \"lightglue\" , ) # Run the alignment aligned_cube , warp_matrices = lgm_model . run () In this document, we presented three different examples of how to use SatAlign with PCC, ECC, and LGM for multi-temporal image co-registration. Each example shows how to download an image collection from Google Earth Engine, create a data cube, and align the images using one of the three methods provided by the SatAlign package.","title":"Index"},{"location":"index.html#_1","text":"A Python package for efficient multi-temporal image co-registration \ud83d\ude80 GitHub : https://github.com/IPL-UV/satalign \ud83c\udf10 PyPI : https://pypi.org/project/satalign/ \ud83d\udee0\ufe0f","title":""},{"location":"index.html#overview","text":"Satalign is a Python package designed for efficient multi-temporal image co-registration. It enables aligning temporal data cubes with reference images using advanced techniques such as Phase Cross-Correlation (PCC), Enhanced Cross-Correlation (ECC), and Local Features Matching (LGM). This package facilitates the manipulation and processing of large volumes of Earth observation data efficiently.","title":"Overview \ud83d\udcca"},{"location":"index.html#key-features","text":"Advanced alignment algorithms : Leverages ECC, PCC, and LGM to accurately align multi-temporal images. \ud83d\udd0d Efficient data cube management : Processes large data cubes with memory and processing optimizations. \ud83e\udde9 Support for local feature models : Utilizes models like SuperPoint, SIFT, and more for keypoint matching. \ud83d\udda5\ufe0f Parallelization : Executes alignment processes across multiple cores for faster processing. \ud83d\ude80","title":"Key features \u2728"},{"location":"index.html#installation","text":"Install the latest version from PyPI: pip install satalign To use the PCC module, you need to install additional dependencies: pip install satalign [ pcc ] Alternatively, if you already have satalign installed: pip install scikit-image To use the LGM module, you need to install additional dependencies: pip install satalign [ deep ]","title":"Installation \u2699\ufe0f"},{"location":"index.html#how-to-use","text":"","title":"How to use \ud83d\udee0\ufe0f"},{"location":"index.html#align-an-eeimagecollection-with-satalignpccpcc","text":"","title":"Align an ee.ImageCollection with satalign.pcc.PCC \ud83c\udf0d"},{"location":"index.html#load-libraries","text":"import ee import fastcubo import satalign import satalign.pcc import matplotlib.pyplot as plt from IPython.display import Image , display","title":"Load libraries"},{"location":"index.html#auth-and-init-gee","text":"# Initialize depending on the environment ee . Authenticate () ee . Initialize ( opt_url = \"https://earthengine-highvolume.googleapis.com\" ) # project = \"name\"","title":"Auth and Init GEE"},{"location":"index.html#dataset","text":"# Download image collection table = fastcubo . query_getPixels_imagecollection ( point = ( - 75.71260 , - 14.18835 ), collection = \"COPERNICUS/S2_HARMONIZED\" , bands = [ \"B2\" , \"B3\" , \"B4\" , \"B8\" ], data_range = [ \"2023-12-01\" , \"2023-12-31\" ], edge_size = 256 , resolution = 10 , ) fastcubo . getPixels ( table , nworkers = 4 , output_path = \"output\" )","title":"Dataset"},{"location":"index.html#align-dataset","text":"# Create a data cube and select images if desired s2_datacube = satalign . utils . create_array ( \"output\" , \"datacube.pickle\" ) # Define reference image reference_image = s2_datacube . sel ( time = s2_datacube . time > \"2022-08-03\" ) . mean ( \"time\" ) # Initialize and run PCC model pcc_model = satalign . pcc . PCC ( datacube = s2_datacube , reference = reference_image , channel = \"mean\" , crop_center = 128 , num_threads = 2 , ) # Run the alignment aligned_cube , warp_matrices = pcc_model . run_multicore () # Display the warped cube warp_df = satalign . utils . warp2df ( warp_matrices , s2_datacube . time . values ) satalign . utils . plot_s2_scatter ( warp_df ) plt . show ()","title":"Align dataset"},{"location":"index.html#graphics","text":"# Display profiles satalign . utils . plot_profile ( warped_cube = aligned_cube . values , raw_cube = s2_datacube . values , x_axis = 3 , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , ) plt . show () # Create PNGs and GIF # Note: The following part requires a Linux environment # !apt-get install imagemagick gifspath = satalign . utils . plot_animation1 ( warped_cube = aligned_cube [ 0 : 50 ] . values , raw_cube = s2_datacube [ 0 : 50 ] . values , dates = s2_datacube . time [ 0 : 50 ] . values , rgb_band = [ 3 , 2 , 1 ], intensity_factor = 1 / 3000 , png_output_folder = \"./output_png\" , gif_delay = 20 , gif_output_file = \"./animation1.gif\" , ) display ( Image ( filename = 'animation1.gif' )) Here's an addition to clarify that datacube and reference_image have already been defined:","title":"Graphics"},{"location":"index.html#align-an-image-collection-with-sataligneececc","text":"import satalign.ecc # Initialize the ECC model ecc_model = satalign . ecc . ECC ( datacube = s2_datacube , reference = reference_image , gauss_kernel_size = 5 , ) # Run the alignment aligned_cube , warp_matrices = ecc_model . run ()","title":"Align an Image Collection with satalign.eec.ECC \ud83d\udcda"},{"location":"index.html#align-using-local-features-with-satalignlgmlgm","text":"Here's the updated version with a note about using floating-point values or scaling: import satalign.lgm # Initialize the LGM model lgm_model = satalign . lgm . LGM ( datacube = datacube / 10_000 , reference = reference_image / 10_000 , feature_model = \"superpoint\" , matcher_model = \"lightglue\" , ) # Run the alignment aligned_cube , warp_matrices = lgm_model . run () In this document, we presented three different examples of how to use SatAlign with PCC, ECC, and LGM for multi-temporal image co-registration. Each example shows how to download an image collection from Google Earth Engine, create a data cube, and align the images using one of the three methods provided by the SatAlign package.","title":"Align using Local Features with satalign.lgm.LGM \ud83e\uddee"},{"location":"CHANGELOG.html","text":"Changelog All notable changes to this project will be documented in this file. The format is based on Keep a changelog , and this project adheres to Semantic versioning . [Unreleased] Added \u2728 Documentation updates and additional examples for alignment methods. \ud83d\udcda Changed \ud83d\udee0\ufe0f Enhanced performance optimizations in co-registration methods. \ud83d\ude80 Fixed \ud83d\udc1b Minor bug fixes in spatial alignment functions. \ud83d\udd27 [0.1.3] - 2024-05-25 Added \u2728 New methods for spatial alignment of satellite imagery. \ud83d\udef0\ufe0f Expanded documentation with examples and usage guides. \ud83d\udcc4 [0.1.1] - 2024-05-12 Added \u2728 Initial release of Satalign with basic functionalities for image co-registration. \ud83d\udee0\ufe0f Examples demonstrating the use of PCC, ECC, and LGM alignment methods. \ud83d\udcca [0.1.0] - 2024-05-08 Added \u2728 Basic structure for Satalign. \ud83c\udfd7\ufe0f Set up CI/CD pipeline with GitHub Actions. \u2699\ufe0f Added basic tests and coverage reports. \u2705","title":"Changelog"},{"location":"CHANGELOG.html#changelog","text":"All notable changes to this project will be documented in this file. The format is based on Keep a changelog , and this project adheres to Semantic versioning .","title":"Changelog"},{"location":"CHANGELOG.html#unreleased","text":"","title":"[Unreleased]"},{"location":"CHANGELOG.html#added","text":"Documentation updates and additional examples for alignment methods. \ud83d\udcda","title":"Added \u2728"},{"location":"CHANGELOG.html#changed","text":"Enhanced performance optimizations in co-registration methods. \ud83d\ude80","title":"Changed \ud83d\udee0\ufe0f"},{"location":"CHANGELOG.html#fixed","text":"Minor bug fixes in spatial alignment functions. \ud83d\udd27","title":"Fixed \ud83d\udc1b"},{"location":"CHANGELOG.html#013-2024-05-25","text":"","title":"[0.1.3] - 2024-05-25"},{"location":"CHANGELOG.html#added_1","text":"New methods for spatial alignment of satellite imagery. \ud83d\udef0\ufe0f Expanded documentation with examples and usage guides. \ud83d\udcc4","title":"Added \u2728"},{"location":"CHANGELOG.html#011-2024-05-12","text":"","title":"[0.1.1] - 2024-05-12"},{"location":"CHANGELOG.html#added_2","text":"Initial release of Satalign with basic functionalities for image co-registration. \ud83d\udee0\ufe0f Examples demonstrating the use of PCC, ECC, and LGM alignment methods. \ud83d\udcca","title":"Added \u2728"},{"location":"CHANGELOG.html#010-2024-05-08","text":"","title":"[0.1.0] - 2024-05-08"},{"location":"CHANGELOG.html#added_3","text":"Basic structure for Satalign. \ud83c\udfd7\ufe0f Set up CI/CD pipeline with GitHub Actions. \u2699\ufe0f Added basic tests and coverage reports. \u2705","title":"Added \u2728"},{"location":"CODE_OF_CONDUCT.html","text":"Contributor covenant code of conduct \ud83d\udcdc Our pledge \ud83e\udd1d In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. \ud83c\udf0e\ud83e\udd17 Our standards \ud83d\udccf Examples of behavior that contributes to creating a positive environment include: Using welcoming and inclusive language. \ud83d\ude0a Being respectful of differing viewpoints and experiences. \ud83e\udd14\ud83d\udc42 Gracefully accepting constructive criticism. \ud83d\udee0\ufe0f Focusing on what is best for the community. \ud83e\udd32 Showing empathy towards other community members. \ud83e\udd7a\u2764\ufe0f Examples of unacceptable behavior by participants include: The use of sexualized language or imagery and unwelcome sexual attention or advances. \ud83d\udeab\ud83d\udcac Trolling, insulting/derogatory comments, and personal or political attacks. \ud83d\udeab\ud83d\ude20 Public or private harassment. \ud83d\udeab\ud83d\udc65 Publishing others' private information, such as a physical or electronic address, without explicit permission. \ud83d\udeab\ud83c\udfe1 Other conduct which could reasonably be considered inappropriate in a professional setting. \ud83d\udeab\ud83d\udc54 Our responsibilities \ud83d\udee1\ufe0f Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. Scope \ud83c\udf10 This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. Enforcement \ud83d\udea8 All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. Attribution \ud83d\udc4f This Code of Conduct is adapted from the Contributor covenant , version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq","title":"Code of conduct"},{"location":"CODE_OF_CONDUCT.html#contributor-covenant-code-of-conduct","text":"","title":"Contributor covenant code of conduct \ud83d\udcdc"},{"location":"CODE_OF_CONDUCT.html#our-pledge","text":"In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. \ud83c\udf0e\ud83e\udd17","title":"Our pledge \ud83e\udd1d"},{"location":"CODE_OF_CONDUCT.html#our-standards","text":"Examples of behavior that contributes to creating a positive environment include: Using welcoming and inclusive language. \ud83d\ude0a Being respectful of differing viewpoints and experiences. \ud83e\udd14\ud83d\udc42 Gracefully accepting constructive criticism. \ud83d\udee0\ufe0f Focusing on what is best for the community. \ud83e\udd32 Showing empathy towards other community members. \ud83e\udd7a\u2764\ufe0f Examples of unacceptable behavior by participants include: The use of sexualized language or imagery and unwelcome sexual attention or advances. \ud83d\udeab\ud83d\udcac Trolling, insulting/derogatory comments, and personal or political attacks. \ud83d\udeab\ud83d\ude20 Public or private harassment. \ud83d\udeab\ud83d\udc65 Publishing others' private information, such as a physical or electronic address, without explicit permission. \ud83d\udeab\ud83c\udfe1 Other conduct which could reasonably be considered inappropriate in a professional setting. \ud83d\udeab\ud83d\udc54","title":"Our standards \ud83d\udccf"},{"location":"CODE_OF_CONDUCT.html#our-responsibilities","text":"Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.","title":"Our responsibilities \ud83d\udee1\ufe0f"},{"location":"CODE_OF_CONDUCT.html#scope","text":"This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.","title":"Scope \ud83c\udf10"},{"location":"CODE_OF_CONDUCT.html#enforcement","text":"All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.","title":"Enforcement \ud83d\udea8"},{"location":"CODE_OF_CONDUCT.html#attribution","text":"This Code of Conduct is adapted from the Contributor covenant , version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq","title":"Attribution \ud83d\udc4f"},{"location":"CONTRIBUTING.html","text":"Contributing \ud83e\udd1d We welcome contributions from the community! Every contribution, no matter how small, is appreciated and credited. Here\u2019s how you can get involved: How to contribute \ud83d\udee0\ufe0f Fork the repository: Start by forking the Satalign repository to your GitHub account. \ud83c\udf74 Clone your fork locally: cd git clone https://github.com/YOUR_GITHUB_USERNAME/Satalign.git cd Satalign Create a branch: Create a new branch for your feature or bug fix: git checkout -b name-of-your-bugfix-or-feature Set up the environment: \ud83c\udf31 If you're using pyenv , select a Python version: pyenv local Install dependencies and activate the environment: poetry install poetry shell Install pre-commit hooks: poetry run pre-commit install Make your changes: \ud83d\udd8b\ufe0f Develop your feature or fix, ensuring you write clear, concise commit messages and include any necessary tests. Check your changes: \u2705 Run formatting checks: make check Run unit tests: make test Optionally, run tests across different Python versions using tox: tox Submit a pull request: \ud83d\ude80 Push your branch to GitHub and submit a pull request to the develop branch of the Satalign repository. Ensure your pull request meets these guidelines: Include tests. Update the documentation if your pull request adds functionality. Provide a detailed description of your changes. Types of contributions \ud83d\udce6 Report bugs: \ud83d\udc1b Report bugs by creating an issue on the Satalign GitHub repository . Please include your operating system, setup details, and steps to reproduce the bug. Fix bugs: \ud83d\udee0\ufe0f Look for issues tagged with \"bug\" and \"help wanted\" in the repository to start fixing. Implement features: \u2728 Contribute by implementing features tagged with \"enhancement\" and \"help wanted.\" Write documentation: \ud83d\udcda Contribute to the documentation in the official docs, docstrings, or through blog posts and articles. Submit feedback: \ud83d\udcac Propose new features or give feedback by filing an issue on GitHub. Use the Satalign GitHub issues page for feedback.","title":"Contributing"},{"location":"CONTRIBUTING.html#contributing","text":"We welcome contributions from the community! Every contribution, no matter how small, is appreciated and credited. Here\u2019s how you can get involved:","title":"Contributing \ud83e\udd1d"},{"location":"CONTRIBUTING.html#how-to-contribute","text":"Fork the repository: Start by forking the Satalign repository to your GitHub account. \ud83c\udf74 Clone your fork locally: cd git clone https://github.com/YOUR_GITHUB_USERNAME/Satalign.git cd Satalign Create a branch: Create a new branch for your feature or bug fix: git checkout -b name-of-your-bugfix-or-feature Set up the environment: \ud83c\udf31 If you're using pyenv , select a Python version: pyenv local Install dependencies and activate the environment: poetry install poetry shell Install pre-commit hooks: poetry run pre-commit install Make your changes: \ud83d\udd8b\ufe0f Develop your feature or fix, ensuring you write clear, concise commit messages and include any necessary tests. Check your changes: \u2705 Run formatting checks: make check Run unit tests: make test Optionally, run tests across different Python versions using tox: tox Submit a pull request: \ud83d\ude80 Push your branch to GitHub and submit a pull request to the develop branch of the Satalign repository. Ensure your pull request meets these guidelines: Include tests. Update the documentation if your pull request adds functionality. Provide a detailed description of your changes.","title":"How to contribute \ud83d\udee0\ufe0f"},{"location":"CONTRIBUTING.html#types-of-contributions","text":"Report bugs: \ud83d\udc1b Report bugs by creating an issue on the Satalign GitHub repository . Please include your operating system, setup details, and steps to reproduce the bug. Fix bugs: \ud83d\udee0\ufe0f Look for issues tagged with \"bug\" and \"help wanted\" in the repository to start fixing. Implement features: \u2728 Contribute by implementing features tagged with \"enhancement\" and \"help wanted.\" Write documentation: \ud83d\udcda Contribute to the documentation in the official docs, docstrings, or through blog posts and articles. Submit feedback: \ud83d\udcac Propose new features or give feedback by filing an issue on GitHub. Use the Satalign GitHub issues page for feedback.","title":"Types of contributions \ud83d\udce6"}]}
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index 278473d74f2125dd812caba86ff406a944724575..df8c81c240cb358da94d8b769d265cbcfdcb2831 100644
GIT binary patch
delta 15
WcmeBW>Sbb+@8;mpezK8`oe=;Y-2<%v
delta 15
WcmeBW>Sbb+@8;l$*4oI%&IkY;TLU8i