gpt4 book ai didi

python - 使用 scikit-image 进行图像过滤?

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:16 26 4
gpt4 key购买 nike

我正在从 Matlab 背景转到 python,在 Python/skimage 中有一些我还没有掌握的基本操作:

  1. 如何将用户生成的线性滤波器(以小型二维数组形式给出)应用于图像?我可以用 scipy.ndimage.convolve 来做,但是 skimage 中有方法吗?

  2. 在 Matlab 中,图像过滤始终返回与其输入相同数值类型的结果,无论是 uint8 还是 float。 skimage 的行为方式是否相同?

  3. skimage 是否在某处包含反锐化蒙版? (我在 PIL 中发现了一个不锐化的掩蔽过滤器,但这有点麻烦,因为 PIL 使用它自己的图像类,而不是 ndarrays)。

  4. 是否有一种方法,可能类似于 Matlab 的“colfilt”,用户可以通过它对图像应用非线性滤波器?这个想法是用户提供一个函数,它从 3x3 数组中生成一个数字,比如说;然后将该函数作为空间过滤器应用于整个图像。

最佳答案

How can I apply a user-generated linear filter (given as a small 2d array) to an image? I can do it with scipy.ndimage.convolve, but is there a method in skimage?

scikit-image(以及一般的 scikit)的目标是扩展 scipy 的功能。 (更小、更专注的项目往往比更大的项目发展得更快。)它尽量不复制任何功能,并且只有在可以改进该功能时才会这样做。

In Matlab, image filtering always returns a result of the same numeric type as its input, be it uint8 or float. Does skimage behave the same way?

不,没有这样的保证。有时转换为单一类型会更有效率。 (有时,只是缺乏时间/人力。)以下是有关此事的一些文档:

http://scikit-image.org/docs/0.9.x/user_guide/data_types.html#output-types

如果您需要某种类型的图像(它们检查输入是否type 是所需的类型,因此您不会在不必要的转换上浪费时间。

Does skimage include unsharp masking somewhere? (I've found an unsharp masking filter in PIL but that's a bit of a pain, as PIL uses its own Image class, rather than ndarrays).

据我所知,您可以自行推出。像下面这样的东西会起作用:

from skimage import data
from skimage import filter
from skimage import img_as_float
import matplotlib.pyplot as plt


unsharp_strength = 0.8
blur_size = 8 # Standard deviation in pixels.

# Convert to float so that negatives don't cause problems
image = img_as_float(data.camera())
blurred = filter.gaussian_filter(image, blur_size)
highpass = image - unsharp_strength * blurred
sharp = image + highpass


fig, axes = plt.subplots(ncols=2)
axes[0].imshow(image, vmin=0, vmax=1)
axes[1].imshow(sharp, vmin=0, vmax=1)
plt.show()

Homebrew unsharp-mask

但是,有很多方法可以实现模糊掩蔽。

Is there a method, maybe similar to Matlab's "colfilt" by which a user can apply a non-linear filter to an image? The idea is that the user supplies a function which produces a single number from a 3x3 array, say; then that function is applied across the image as a spatial filter.

不在 scikit-image 中,但在 scipy.ndimage 中有通用过滤功能:

https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.ndimage.generic_filter.html

关于python - 使用 scikit-image 进行图像过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com