簡體   English   中英

在頻域中更改亮度

[英]Change brightness in frequency domain

我可能不明白頻域是如何工作的。 對於一個項目,我必須使用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) ,或者,如上所述,在一個域中的乘法相當於在另一個域中相乘。

kmario23評論說 ,頻域中的乘法是空間域中的卷積。 這是真的。 但是既然我們處理的是常數,事情就會變得簡單一點。 在任何情況下,可以看出頻域中的常數函數是空間域中的脈沖(或狄拉克三角洲)函數 與脈沖函數相關與乘以常數相同。

進入頻域以改變亮度是浪費,但如果你已經在那里,你可以這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM