【问题标题】:PSF (point spread function) for an image (2D)图像 (2D) 的 PSF(点扩散函数)
【发布时间】:2017-12-01 02:42:58
【问题描述】:

我是图像分析方面的新手(使用 Python),我想对我的数据(CT 扫描)应用richardson_lucy 反卷积(来自 skimage)。出于这个原因,我通过特定的软件估计了“体素数”中的 PSF。它的值大约是6.73体素,但我不知道如何将它用作函数中的参数。

函数使用PSF参数作为ndarray,所以我是这样尝试的:

from skimage import io
from pylab import array
img = io.imread ("Slice1.tif")
import skimage.restoration as rst
PSF = array (6.7)
img_dbl = rst.richardson_lucy (img, PSF, iterations=10)

它显示了这个错误:IndexError: too many indices for array

在 CT 扫描中,两种不同材料之间的模糊可以与高斯 PSF 相关联。如果您有更多去模糊的技巧(可能比 RL 更好),请写出来。

谁能帮帮我。

【问题讨论】:

  • 忘记 PIL,您应该使用 skimage.io.imread 打开图像。 AFAIK PIL 使用另一种与 opencv 或 skimage 不兼容的图像表示。
  • 谢谢@PauloScardine,我改了。但是,它给了我同样的错误信息。
  • 您确定您使用的是灰度图像吗?在调用richardson_lucy之前尝试img = color.rgb2gray(img)
  • 图像已经是灰度的。无论如何我都试图转换它,但结果总是一样的。
  • 你确定 psf 可以是一维数组吗?像np.ones((5, 5)) * 6.7 这样的东西怎么样 - 猜不到了。

标签: python image-processing blur deconvolution


【解决方案1】:

有类似的问题,仍在研究中。在我的情况下,如果我不使用 np.uint8 作为类型,它就不起作用。 CT 数据应该是 16 位,但只使用前 12 位(映射到 [-1024, 3096] 之间的值。所以我必须将图像数据重新缩放到 [0-255],然后才能得到除黑色或白色之外的任何内容.

如果我理解正确,PSF 的总和应该始终为 1。我可以从您的问题中猜到,您假设点扩散函数是具有有意义(95% 的值?)扩散的高斯函数6.7 像素。在这种情况下,您必须将 PSF 建模为高斯(这就是我来这里的目的)。

您可以使用@FuzzyDuck 在this post 中描述的方法创建一个。

PSF = gkern(5,2)

这将使用@FuzzyDuck 提出的方法创建一个总和为 1 的高斯 5x5 内核,sigma 为 2。请注意,点扩散函数可以应用多次,因此您必须对这些值进行一些试验(或使用一种近似的算法)。

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2017-06-03
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多