Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在频域中改变亮度_Python_Numpy_Image Processing_Fft_Frequency - Fatal编程技术网

Python 在频域中改变亮度

Python 在频域中改变亮度,python,numpy,image-processing,fft,frequency,Python,Numpy,Image Processing,Fft,Frequency,我可能不明白频域是如何工作的。对于一个项目,我必须使用Python更改图像的亮度,而不在空间域中工作 目前,我可以通过卷积应用一些模糊过滤器,如下例所示: def arithmeticMeanFilter(self, img): img = img.convert('RGB') open_cv_image = np.array(img) red = open_cv_image[:, :, 0] green = open_cv_image[:, :, 1]

我可能不明白频域是如何工作的。对于一个项目,我必须使用Python更改图像的亮度,而不在空间域中工作

目前,我可以通过卷积应用一些模糊过滤器,如下例所示:

 def arithmeticMeanFilter(self, img):

    img = img.convert('RGB')
    open_cv_image = np.array(img)
    red = open_cv_image[:, :, 0]
    green = open_cv_image[:, :, 1]
    blue = open_cv_image[:, :, 2]

    mean_arithmetic = np.ones((9, 9))*(1/81)

    width, height, _ = open_cv_image.shape

    kernel1 = np.zeros((width, height))
    kernel1[:mean_arithmetic.shape[0], :mean_arithmetic.shape[1]] = mean_arithmetic
    kernel1 = np.fft.fft2(kernel1)


    im = np.array(red)
    fim = np.fft.fft2(im)
    Rx = np.real(np.fft.ifft2(kernel1 * fim)).astype(float)

    im = np.array(green)
    fim = np.fft.fft2(im)
    Gx = np.real(np.fft.ifft2(kernel1 * fim)).astype(float)

    im = np.array(blue)
    fim = np.fft.fft2(im)
    Bx = np.real(np.fft.ifft2(kernel1 * fim)).astype(float)

    open_cv_image[:, :, 0] = abs(Rx)
    open_cv_image[:, :, 1] = abs(Gx)
    open_cv_image[:, :, 2] = abs(Bx)

    img = Image.fromarray(open_cv_image)

    return img

但是如何使用这种技术来改变亮度呢?

改变图像的亮度是通过将每个像素乘以一个常数来实现的

因为,在空间域乘以常数等于在频域乘以相同的常数

函数F的线性度定义为:

aF(x)+bF(y)=F(ax+by)

从这个方程很容易看出aF(x)=F(ax),或者,正如我前面所说,在一个域中相乘等于在另一个域中相乘

频域中的乘法是空域中的卷积。这是真的。但是因为我们处理的是一个常数,事情就简单了一点。在任何情况下,我们都可以看到频域中的常数函数是空域中的常数函数。与脉冲函数进行卷积与乘以常数相同

去频域改变亮度是浪费时间的,但是如果你已经做到了,你可以这样做

难道不是“傅里叶域中的乘法等于空间域中的卷积”吗?