У меня есть следующий 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. ]
, поэтому значения пикселей различаются , но когда я отображаю оба изображения, они выглядят одинаково.
Кто-нибудь знает, как я могу подойти к этому, или почему два изображения с разными значениями пикселей могут выглядеть одинаково?