def spy_merge_images_by_specter(
*,
image_original: Annotated[ImageType, "Original image."],
image_to_merge: Annotated[ImageType, "Image which will be merged onto original image."],
save_path: Annotated[str | Path, "Header file (with '.hdr' extension) name with path."],
overwrite: Annotated[
bool,
"If the associated image file or header already exist and set to True, the files will be overwritten; otherwise, if either of the files exist, an exception will be raised.",
] = True,
dtype: Annotated[
type[ImageDataType],
"The numpy data type with which to store the image.",
] = np.float32,
auto_metadata_extraction: Annotated[
bool,
"Whether to automatically extract metadata images.",
] = True,
) -> SpectralImage[Any]:
image_original_np = validate_image_to_numpy(image_original)
image_to_merge_np = validate_image_to_numpy(image_to_merge)
metadata = {
"lines": image_original_np.shape[0],
"samples": image_original_np.shape[1],
"bands": image_original_np.shape[2] + image_to_merge_np.shape[2],
}
if (
auto_metadata_extraction
and isinstance(image_original, SpectralImage)
and isinstance(image_to_merge, SpectralImage)
):
original_meta = image_original.metadata
merged_meta = image_to_merge.metadata
metadata_ext = {}
metadata_ext["wavelength"] = original_meta.get("wavelength", []) + merged_meta.get("wavelength", [])
metadata_ext["data type"] = original_meta.get("data type", "")
metadata_ext["byte order"] = original_meta.get("byte order", "")
metadata_ext["data ignore value"] = original_meta.get("data ignore value", "")
metadata_ext["header offset"] = original_meta.get("header offset", 0)
metadata_ext["interleave"] = original_meta.get("interleave", "")
metadata_ext["wavelength units"] = original_meta.get("wavelength units", "")
metadata_ext["acquisition date"] = original_meta.get("acquisition date", "")
metadata_ext["default bands"] = original_meta.get("default bands", [])
metadata_ext["default bands additional"] = merged_meta.get("default bands", [])
metadata_ext["description"] = original_meta.get("description", "")
# metadata_ext["description additional"] = merged_meta.get("description", "")
metadata.update(metadata_ext)
image_to_merge_np = rescale(
image_to_merge_np,
(image_original_np.shape[0], image_original_np.shape[1]),
)
image_to_merge_np = image_to_merge_np.astype(image_original_np.dtype)
image_merged = np.concatenate((image_original_np, image_to_merge_np), axis=2)
return spy_create_image(
image=image_merged,
save_path=save_path,
metadata=metadata,
overwrite=overwrite,
dtype=dtype,
)