实现并将图像降级功能应用于Python

时间:2014-12-30 07:05:58

标签: python image-processing filtering fft

我一直在尝试按照“数字图像处理”(Gonzales和Woods)一书中的示例程序进行操作。该过程是通过对图像进行傅立叶变换并将其与H(u,v)相乘并最终进行逆傅里叶变换来降低和模糊图像。

formula

这是我到目前为止所得到的:

from __future__ import division
import cv2
import numpy as np
import scipy as sp
import math
from scipy.signal import convolve2d

img = cv2.imread('book_cover.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

xSize, ySize = gray_img.shape


def applyFilter(img, func):
    image = np.copy(img)

    # Construct image from blurring function
    for u in xrange(0,ySize):
        for v in xrange(0,xSize):
            image[u,v] = func(u,v)

    # Performe the actual blurring of the image. Not working as expected
    return image*img

def blurr(y,x):
    a = 0.05
    b = 0.05
    T = 1
    C = math.pi*(a*y+b*x)

    if(C == 0):
        return 1

    return (T/C)*math.sin(C)*math.e**(-1j*C)

def toReal(img):
    realImg = np.zeros(img.shape)

    for i in xrange(0,img.shape[0]):
        for j in xrange(0,img.shape[1]):
            realImg[i,j] = np.absolute(img[i,j])

    return realImg
def normalize(image):
    img = image.copy()
    img = toReal(img)
    img -= img.min()
    img *= 255.0/img.max()
    return img.astype(np.uint8)

f = np.fft.fft2(gray_img.astype(np.int32))
fft_img = np.fft.fftshift(f)

# Apply the blurring filter
filtered_fft = applyFilter(fft_img, blurr)

f_fft_img = np.fft.ifftshift(filtered_fft)
filtered_img = np.fft.ifft2(f_fft_img)

filtered_img = normalize(filtered_img)


cv2.imwrite('book_cover_blurred.jpg', filtered_img.astype(np.uint8))

左边的两本书封面取自书本,最左边的是原始图像,中间的是被过滤的。最右边的那个是我用上面代码得到的结果。 Link to images

我肯定误会了什么,但我完全失去了。

1 个答案:

答案 0 :(得分:1)

我发现了我最后犯的错误。我通过实施H(u,v)而不是正确的H(u-M / 2,v-N / 2)犯了一个愚蠢的错误。