Python中的imnoise?

2024-05-15 00:18:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在应用低通滤波器后,我试图在图像中添加白噪声。我知道如何在matlab中实现它,但不知道如何调用它才能在python中工作。

import matplotlib.pyplot as plt
import numpy as np
import scipy.misc
from scipy import ndimage
import Image 

J = imnoise(im,'salt & pepper',0.02);
figure.imshow(J)

我还需要进口什么?还是有其他方法增加噪音?


Tags: from图像importnumpymatplotlibasnpplt
3条回答
  1. 代码示例。

    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    from skimage.util import random_noise
    
    I = cv2.imread('image.jpg', 1); # 1/ -1: color mode; 0: gray mode
    gauss = random_noise(I, mode='gaussian', seed=None, clip=True)
    sp = random_noise(I, mode='s&p', seed=None, clip=True)
    
    plt.subplot(231), plt.imshow(I), plt.title('Origin')
    plt.subplot(232), plt.imshow(gauss), plt.title('Gaussian')
    plt.subplot(233), plt.imshow(sp), plt.title('Salt & Pepper')
    plt.show();
    
  2. 更多信息:http://scikit-image.org/docs/0.13.x/api/skimage.util.html#skimage.util.random_noise

在讨论去噪时,本教程使用noisy = l + 0.4 * l.std() * np.random.random(l.shape)将白噪声添加到图像中 其中l是图像。

http://scipy-lectures.github.io/advanced/image_processing/#denoising

一般来说,只需添加一个包含要用于原始图片的噪波的矩阵,就可以添加噪波。

scikit-image提供了一个函数^{},类似于MATLAB中的imnoise

skimage.util.random_noise(image, mode='gaussian', seed=None, clip=True, **kwargs)

它支持以下模式:

‘gaussian’ Gaussian-distributed additive noise.

‘localvar’ Gaussian-distributed additive noise, with specified local variance at each point of image

‘poisson’ Poisson-distributed noise generated from the data.

‘salt’ Replaces random pixels with 1.

‘pepper’ Replaces random pixels with 0.

‘s&p’ Replaces random pixels with 0 or 1.

‘speckle’ Multiplicative noise using out = image + n*image, where n is uniform noise with specified mean & variance.

注意与MATLAB中的imnoise不同之处在于,此函数的输出始终是浮点图像。

例如,如果输入图像是一个uint8灰度图像,它将首先转换为浮点,但输出图像不会转换为与输入图像相同的类。

因此,如果您关心图像的类,您应该自己转换输出,例如使用skimage.img_as_ubyte

相关问题 更多 >

    热门问题