跳转到主要内容

将抖动图像合并成单个图像的包

项目描述

Powered by Astropy Badge Drizzle's Coverage Status CI Status Documentation Status PyPI Status

drizzle库是一个Python包,用于将抖动图像合并成单个图像。此库源自DrizzlePac中使用的代码。与DrizzlePac一样,大部分代码是用C语言实现的。与DrizzlePac最大的不同之处在于,此代码将一个映射输入到输出图像的数组传递到C代码中,而DrizzlePac代码通过使用Python回调来计算映射。使用数组代替切换使得代码大大简化。

DrizzlePac代码目前用于哈勃太空望远镜的处理管道。此库具有前瞻性,可以使用新的GWCS代码。

要求

  • Python 3.10或更高版本

  • Numpy

  • Astropy

Drizzle算法

本节内容摘自DrizzlePac手册的第2章[Driz2012]

有一系列线性重建技术,在两个相反的极端上分别由交错和移位加法技术表示,而Drizzle算法代表了这两个极端之间的连续体。

如果抖动放置得特别恰当,可以将图像的像素简单地交织到一个更细的网格上。在交织方法中,独立输入图像的像素根据原始图像中像素中心的排列,放置在输出图像的交替像素上。然而,由于望远镜偶尔存在小的定位误差,以及由于光学畸变导致探测器像素空间中的非均匀位移,图像的真实交织通常不可行。

另一种用于组合移动图像的标准简单线性技术,被描述性地命名为“平移和累加”,已经多年用于将抖动的红外数据组合到更细的网格上。每个输入像素都被块式复制到一个更细的子采样网格上,然后平移到位,并添加到输出图像中。平移和累加的优势在于能够轻松处理任意抖动位置。然而,它再次将图像与原始像素卷积,从而增加了图像的模糊和图像噪声的相关性。此外,在存在缺失数据(例如,来自宇宙射线)和几何畸变的情况下,使用平移和累加很困难。

针对上述两种技术的局限性,开发了改进的方法,正式称为可变像素线性重建,更常见地被称为Drizzle,由Andy Fruchter和Richard Hook开发,最初是为了将Hubble Deep Field North(HDF-N)的抖动图像结合。这个算法可以被认为是一系列连续的线性函数,它在最佳线性组合技术(交织)和平移和累加之间平滑变化。这通常可以提高分辨率并减少与图像中噪声的相关性,与仅使用平移和累加产生的图像相比。

算法偏离交织并向平移和累加移动的程度取决于输入图像中的位移如何有效地对PSF进行子采样。在实际操作中,Drizzle算法的行为是通过使用一个称为pixfrac的参数来控制的,该参数可以设置从0到1的值,表示输入像素在映射到输出图像平面之前缩小的程度。

理解pixfrac使用的关键在于,可以将CCD图像视为首先由光学元件卷积,然后由像素响应函数(理想情况下是像素大小的正方形)卷积,最后在每个像素中心由delta函数采样的真实图像。因此,CCD图像是一组连续二维函数的点样本。因此,pixfrac的自然值为0,对应于纯交织。将pixfrac设置为大于0的值会导致输出PSF通过与非零大小的像素卷积而额外展宽。因此,将pixfrac设置为最大值1相当于平移和累加,这是线性组合的另一端,其中输出图像PSF已被与原始输入像素全尺寸的卷积所模糊。

Drizzle算法在概念上很简单。原始输入图像中的像素被映射到子采样输出图像中的像素,考虑到图像之间的位移和旋转以及相机的光学畸变。然而,为了避免与相机大型像素“足迹”卷积图像,Drizzle允许用户通过pixfrac参数在平均到输出图像之前缩小像素。

每个输入像素的通量值根据“滴落”与每个输出像素之间的重叠面积成比例地分配到输出像素中。如果滴落大小太小,则不是所有输出像素都从每个输入图像中添加数据。因此,应选择足够小的滴落大小以避免与过大的输入像素足迹卷积图像,同时足够大以确保不会在输入像素对每个输出像素的贡献数量上有太多变化。

当使用Drizzle合并图像时,可以为每个输入图像指定一个权重图。权重图像包含有关图像中坏像素的信息(在这些坏像素导致权重值较低)。当生成最终输出科学图像时,还会保存一个输出权重图,该图结合了所有输入权重图像的信息。

Drizzle与标准线性重建方法相比具有许多优势。由于像素面积可以通过几何畸变的雅可比矩阵进行缩放,因此它可以保留用于表面和绝对光度测量。因此,校正了几何畸变的drizzled图像中的光通量可以使用不依赖于其在图像上位置的开孔大小进行测量。由于Drizzle代码预测给定的输出像素可能不会接收到来自输入像素的任何信息,只要观察者已经采取了足够的抖动样本来填补缺失的信息,缺失数据就不会造成重大问题。

Blot方法执行drizzle的反向操作。也就是说,blot执行反向映射,将抖动中值图像转换回原始输入图像的坐标系。Blot主要用于识别原始图像中的宇宙射线。与原始drizzle任务类似,blot需要用户提供作为输入的世界坐标系(WCS)变换。

[Driz2012]

Gonzaga, S.,Hack, W.,Fruchter, A.,Mack, J.,编。2012,《DrizzlePac手册》。 (巴尔的摩,STScI)

Drizzle库

Drizzle库是面向对象的,您通过首先创建一个Drizzle类对象来使用它。要创建新的Drizzle输出图像,提供表示输出图像坐标系的Astropy WCS对象。其他参数是上一节中描述的线性像素尺寸、使用的drizzle核、每个输入图像的缩放方式(由曝光时间或时间平方),以及输出图像中输入图像不重叠时的像素值。

创建Drizzle对象后,您可以通过调用add_fits_file方法添加一个或多个图像。参数是包含输入图像的FITS文件的名称,以及可选地包含像素权重的FITS文件的名称。这两个文件名都可以后面跟一个扩展名或数字,放在方括号内。您可以选择传递包含曝光时间和单位的头关键字名称。理解两种单位:计数和cps(每秒计数)。

以下函数演示了如何创建新的输出图像

def drizzle_demo_one(reference, outfile, infiles):
    """
    First demonstration of drizzle

    Parameters
    ==========
    reference
        A file containing the wcs of the output image

    outfile
        The name of the output image

    infiles
        The names of the input images to be combined
    """
    # Get the WCS for the output image
    hdulist = fits.open(reference)
    reference_wcs = wcs.WCS(hdulist[1].header)

    # Initialize the output with the WCS
    driz = drizzle.drizzle.Drizzle(outwcs=reference_wcs)

    # Combine the input images into on drizzle image
    for infile in infiles:
        driz.add_fits_file(infile)

    # Write the drizzled image out
    driz.write(outfile)

您可以选择使用add_image方法以Numpy数组的形式提供输入和权重图像。如果您使用此方法,必须提供其他信息,这些信息通常从FITS图像中读取:输入图像的WCS、曝光时间和图像单位。

以下是如何调用add_image的示例

def drizzle_demo_two(reference, outfile, infiles):
    """
    Demonstration of drizzle with add image.

    Parameters
    ==========
    reference
        A file containing the wcs of the output image.

    outfile
        The name of the output image.

    infiles
        The names of the input images to be combined.
    """
    # Get the WCS for the output image
    reflist = fits.open(reference)
    reference_wcs = wcs.WCS(reflist[1].header)

    # Initialize the output with the WCS
    driz = drizzle.drizzle.Drizzle(outwcs=reference_wcs)

    # Combine the input images into on drizzle image
    for infile in infiles:
        # Open the file and read the image and wcs
        # This is a contrived example, we would not do this
        # unless the data came from another source
        # than a FITS file
        imlist = fits.open(reference)
        image = imlist[1].data
        image_wcs = wcs.WCS(imlist[1].header)
        driz.add_image(image, image_wcs)

    # Write the drizzled image out
    driz.write(outfile)

将所有输入图像组合后,您可以使用write方法将输出图像写入FITS文件。您必须传递输出图像的名称,以及可选的单位。您还可以提供要添加到输出FITS文件主头文件中的一组头卡。

您还可以通过创建一个新的Drizzle对象并将现有输出文件名作为新对象创建时传递的名称来向现有的Drizzle输出文件添加更多图像。在这种情况下,输出WCS和所有其他参数都从文件中读取。

以下是如何向drizzled图像添加额外输入图像的示例

def drizzle_demo_three(outfile, infiles):
    """
    Demonstration of drizzle and adding to an existing output.

    Parameters
    ==========
    outfile
        Name of output image that new files will be appended to.

    infiles
        The names of the input images to be added.
    """
    # Re-open the output file
    driz = drizzle.drizzle.Drizzle(infile=outfile)

    # Add the input images to the existing output image
    for infile in infiles:
        driz.add_fits_file(infile)

    # Write the modified drizzled image out
    driz.write(outfile)

您可以使用 blot_fits_fileblot_image 方法将散斑输出图像转换为另一个WCS(世界坐标系统)。通常情况下,这是输入图像之一的坐标,用于识别宇宙射线或其他缺陷。这两个方法 blot_fits_fileblot_image 允许您从FITS文件头中检索WCS或直接输入。可选参数 interp 允许您选择用于重新采样新网格上像素的方法,而 sincscl 用于缩放sinc函数,如果使用sinc插值方法之一。此函数演示了如何调用这两种方法。

def drizzle_demo_four(outfile, blotfile):
    """
    Demonstration of blot methods.

    Parameters
    ==========
    outfile
        Name of output image that will be converted.

    blotfile
        Name of image containing wcs to be transformed to.
    """
    # Open drizzle using the output file
    # Transform it to another coordinate system
    driz = drizzle.drizzle.Drizzle(infile=outfile)
    driz.blot_fits_file(blotfile)
    driz.write(outfile)

    # Read the WCS and transform using it instead
    # This is a contrived example
    blotlist = fits.open(blotfile)
    blot_wcs = wcs.WCS(blotlist[1].header)
    driz = drizzle.drizzle.Drizzle(infile=outfile)
    driz.blot_image(blot_wcs)
    driz.write(outfile)

为了与现有的STScI DrizzlePac代码保持向后兼容,存在较低级别的函数 dodrizzle,除非您也关注这种兼容性,否则不应使用。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

drizzle-1.15.3.tar.gz (105.7 kB 查看哈希)

上传时间

构建分布

drizzle-1.15.3-cp312-cp312-win_amd64.whl (78.3 kB 查看哈希)

上传时间 CPython 3.12 Windows x86-64

drizzle-1.15.3-cp312-cp312-win32.whl (69.8 kB 查看哈希)

上传时间 CPython 3.12 Windows x86

drizzle-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.9 kB 查看哈希)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

drizzle-1.15.3-cp312-cp312-macosx_11_0_arm64.whl (77.5 kB 查看哈希)

上传时间 CPython 3.12 macOS 11.0+ ARM64

drizzle-1.15.3-cp312-cp312-macosx_10_9_x86_64.whl (84.0 kB 查看哈希)

上传时间 CPython 3.12 macOS 10.9+ x86-64

drizzle-1.15.3-cp311-cp311-win_amd64.whl (78.3 kB 查看哈希)

上传时间: CPython 3.11 Windows x86-64

drizzle-1.15.3-cp311-cp311-win32.whl (69.7 kB 查看哈希)

上传时间: CPython 3.11 Windows x86

drizzle-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.6 kB 查看哈希)

上传时间: CPython 3.11 manylinux: glibc 2.17+ x86-64

drizzle-1.15.3-cp311-cp311-macosx_11_0_arm64.whl (77.6 kB 查看哈希)

上传时间: CPython 3.11 macOS 11.0+ ARM64

drizzle-1.15.3-cp311-cp311-macosx_10_9_x86_64.whl (83.9 kB 查看哈希)

上传时间: CPython 3.11 macOS 10.9+ x86-64

drizzle-1.15.3-cp310-cp310-win_amd64.whl (78.3 kB 查看哈希)

上传时间: CPython 3.10 Windows x86-64

drizzle-1.15.3-cp310-cp310-win32.whl (69.7 kB 查看哈希)

上传时间: CPython 3.10 Windows x86

drizzle-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.7 kB 查看哈希)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64

drizzle-1.15.3-cp310-cp310-macosx_11_0_arm64.whl (77.6 kB 查看哈希)

上传时间: CPython 3.10 macOS 11.0+ ARM64

drizzle-1.15.3-cp310-cp310-macosx_10_9_x86_64.whl (83.9 kB 查看哈希)

上传时间: CPython 3.10 macOS 10.9+ x86-64

支持