Python: я пытаюсь применить размытие по Гауссу, но изображение на выходе выглядит так же, как на входе - PullRequest
0 голосов
/ 20 марта 2020

У меня есть следующий Python код для применения гауссовой фильтрации к изображению:

# Compute Gaussian value
def gauss(x, sigma):
    return (1/(np.sqrt(2*np.pi)*sigma))*np.exp(- x**2 / (2*sigma**2))

# Compute 1D Gaussian kernel
def gauss1d(sigma, l):
    arr1d = np.arange(0,l) - (l-1)/2
    for i in range(arr1d.size):
        arr1d[i] = gauss(arr1d[i], sigma)
    return arr1d/np.sum(arr1d)

# Compute 2D Gaussian kernel
def gauss2d(sigma, l):
    arr2d = gauss1d(sigma, l)
    arr2d_col = arr2d[:, np.newaxis]
    arr2d_row = arr2d[np.newaxis, :]
    return signal.convolve2d(arr2d_col, arr2d_row)

# Apply Gaussian convolution
rows = img1.shape[0]
cols = img1.shape[1]
a = np.ones((rows, cols))
for i in range(rows):
    for j in range(cols):
        a[i][j] = img1[i][j][0]
b = signal.convolve2d(a,gauss2d(1, 3),'same')

img1_blurred = np.ones((rows, cols, 4))
img1_blurred.shape
for i in range(rows):
    for j in range(cols):
        img1_blurred[i][j][0:3] = b[i,j]
        img1_blurred[i][j][3] = 1

Когда я печатаю результаты, img1 имеет несколько первых пикселей, подобных этому:

[[[0.8901961  0.8901961  0.8901961  1.        ]
  [0.9019608  0.9019608  0.9019608  1.        ]
  [0.9137255  0.9137255  0.9137255  1.        ]

и img1_blurred имеют первые несколько пикселей, например:

[[[0.4526243  0.4526243  0.4526243  1.        ]
  [0.62711196 0.62711196 0.62711196 1.        ]
  [0.63164777 0.63164777 0.63164777 1.        ]

, поэтому значения пикселей различаются , но когда я отображаю оба изображения, они выглядят одинаково.

Кто-нибудь знает, как я могу подойти к этому, или почему два изображения с разными значениями пикселей могут выглядеть одинаково?

...