Попытка подтвердить среднее объединение равнозначна отбрасыванию высокочастотных коэффициентов Фурье с использованием numpy.

Мне сказали, что применение объединения средних значений к матрице M эквивалентно отбрасыванию высокочастотных компонентов представления Фурье M. Под объединением средних значений я подразумеваю объединение средних значений 2 на 2, как показано на этом изображении:

введите здесь описание изображения

Я хотел проверить это и посмотреть, как это работает с помощью numpy. Поэтому я написал наивную реализацию среднего пула и скопировал функцию для аккуратного отображения матриц из здесь:

def prettyPrintMatrix(m):
    s = [['{:.3f}'.format(e) for e in row] for row in m]
    lens = [max(map(len, col)) for col in zip(*s)]
    fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
    table = [fmt.format(*row) for row in s]
    print '\n'.join(table)

def averagePool(im):
    imNew = np.empty((im.shape[0] /2, im.shape[1]/2))
    for i in range(imNew.shape[0]):
        for j in range(imNew.shape[1]):
            imNew[i,j] = np.average(im[(2*i):(2*i+2), (2*j):(2*j+2)])
    return imNew

Теперь, чтобы проверить, что происходит с коэффициентами Фурье, я запустил следующий код:

M = np.random.random((8,8))
Mpooled = averagePool(M)

# print the original M
print('original M:')
prettyPrintMatrix(M)

# print Fourier coefficients of regular matrix
print('Fourier of M')
prettyPrintMatrix(np.fft.fft2(M))

# print Fourier coefficients of pooled matrix
print('Fourier of the pooled M')
prettyPrintMatrix(np.fft.fft2(Mpooled))

Пример вывода для этого будет:

original M:
0.849   0.454   0.231   0.605   0.375   0.842   0.533   0.954
0.489   0.097   0.990   0.199   0.572   0.262   0.299   0.634
0.477   0.052   0.429   0.670   0.323   0.458   0.459   0.954
0.984   0.884   0.620   0.657   0.352   0.765   0.897   0.642
0.179   0.894   0.835   0.710   0.916   0.544   0.968   0.557
0.253   0.197   0.813   0.450   0.936   0.165   0.169   0.712
0.677   0.544   0.507   0.107   0.733   0.334   0.056   0.171
0.356   0.639   0.580   0.517   0.763   0.401   0.771   0.219

Fourier of M
34.680+0.000j   -0.059-0.188j   0.076+1.227j    -1.356+1.515j   2.101+0.000j    -1.356-1.515j   0.076-1.227j    -0.059+0.188j
-1.968-1.684j   2.125-0.223j    2.277+1.442j    1.629-0.795j    -0.141+1.460j   0.694-2.363j    -0.627+0.971j   -0.847-2.094j
3.496+2.808j    -1.099+1.260j   0.921-0.814j    2.499+0.283j    -1.048-1.206j   -3.228+2.435j   -2.934+0.030j   0.386-0.015j 
0.451-0.301j    0.791-0.143j    -0.463-0.031j   1.841+0.032j    -1.979-1.066j   1.344-1.229j    3.487-1.297j    2.105-2.455j 
0.111+0.000j    0.166+1.317j    0.946-0.016j    0.587-0.443j    -2.710+0.000j   0.587+0.443j    0.946+0.016j    0.166-1.317j 
0.451+0.301j    2.105+2.455j    3.487+1.297j    1.344+1.229j    -1.979+1.066j   1.841-0.032j    -0.463+0.031j   0.791+0.143j 
3.496-2.808j    0.386+0.015j    -2.934-0.030j   -3.228-2.435j   -1.048+1.206j   2.499-0.283j    0.921+0.814j    -1.099-1.260j
-1.968+1.684j   -0.847+2.094j   -0.627-0.971j   0.694+2.363j    -0.141-1.460j   1.629+0.795j    2.277-1.442j    2.125+0.223j 

Fourier of the pooled M
8.670+0.000j    -0.180+0.019j   -0.288+0.000j   -0.180-0.019j
-0.228-0.562j   0.487+0.071j    0.156+0.638j    -0.049-0.328j
0.172+0.000j    -0.421-0.022j   -0.530+0.000j   -0.421+0.022j
-0.228+0.562j   -0.049+0.328j   0.156-0.638j    0.487-0.071j 

Теперь я ожидаю, что коэффициенты Фурье объединенной матрицы каким-то образом будут связаны с низкочастотными коэффициентами Фурье исходной матрицы. Однако единственное соотношение, которое я вижу, это самая низкая частота (вверху слева), которая после объединения ровно в 4 раза меньше. Теперь мой вопрос: есть ли связь между коэффициентами Фурье до и после объединения, и если да, то какая?


person dimpol    schedule 31.05.2017    source источник
comment
Такой усредняющий фильтр является очень плохим фильтром нижних частот, поэтому вы не можете ожидать идеальной частотной характеристики. Вы увидите общее снижение высокочастотных составляющих, но оно не будет равномерным.   -  person Paul R    schedule 31.05.2017
comment
Ладно, проблема в теории, а не в реализации. Никто не опубликовал ответ. Так что, если вы опубликуете это как ответ, я приму это.   -  person dimpol    schedule 02.06.2017
comment
Нет проблем - комментарий преобразован в ответ ниже.   -  person Paul R    schedule 02.06.2017


Ответы (1)


Усредняющий фильтр — это очень грубый фильтр нижних частот, поэтому нельзя ожидать идеальной частотной характеристики. Вы увидите общее снижение высокочастотных составляющих, но оно не будет равномерным. Усреднение обычно используется, когда важна эффективность (поскольку единственными коэффициентами являются неявные значения 1 и 0, поэтому требуется только сложение) или когда точность не важна. В противном случае следует использовать надлежащий фильтр нижних частот.

person Paul R    schedule 02.06.2017