Ala*_*air 3 python python-imaging-library scikit-image
我正在从Matlab背景转向python,并且我还有一些基本的操作我还没有用Python/skimage来征服:
如何将用户生成的线性过滤器(以小型2d数组给出)应用于图像?我可以用scipy.ndimage.convolve来做,但是在skimage中有一个方法吗?
在Matlab中,图像过滤总是返回与其输入相同的数字类型的结果,无论是uint8还是float.skimage的行为方式是否相同?
在某处,skimage是否包含不清晰的遮蔽物?(我在PIL中发现了一个非锐化的屏蔽过滤器,但这有点痛苦,因为PIL使用自己的Image类,而不是ndarrays).
有没有一种方法,可能类似于Matlab的"colfilt",用户可以通过它将非线性滤镜应用于图像?这个想法是用户提供一个功能,从3x3阵列产生一个数字,比如说; 然后该功能作为空间滤镜应用于整个图像.
如何将用户生成的线性过滤器(以小型2d数组给出)应用于图像?我可以用scipy.ndimage.convolve来做,但是在skimage中有一个方法吗?
的目标scikit-image(和scikits,一般)是延长SciPy的的功能.(较小的,更有针对性的项目往往比大型项目更快地发展.)它试图不复制任何功能,只有在它可以改进该功能时才这样做.
在Matlab中,图像过滤总是返回与其输入相同的数字类型的结果,无论是uint8还是float.skimage的行为方式是否相同?
不,没有这样的保证.有时转换为单一类型更有效.(有时,这只是缺乏时间/人力.)以下是关于此事的一些文件:
http://scikit-image.org/docs/0.9.x/user_guide/data_types.html#output-types
如果您需要某种类型img_as_float,有一些方便的方法(例如img_as_ubyte)用于转换图像(并且它们检查输入类型是否是所需的类型,因此您不必浪费时间进行不必要的转换).
在某处,skimage是否包含不清晰的遮蔽物?(我在PIL中发现了一个非锐化的屏蔽过滤器,但这有点痛苦,因为PIL使用自己的Image类,而不是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()
Run Code Online (Sandbox Code Playgroud)

但是,有许多方法可以实现反锐化掩模.
有没有一种方法,可能类似于Matlab的"colfilt",用户可以通过它将非线性滤镜应用于图像?这个想法是用户提供一个功能,从3x3阵列产生一个数字,比如说; 然后该功能作为空间滤镜应用于整个图像.
不在scikit-image,但有通用的过滤功能scipy.ndimage:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.generic_filter.html