Вычисление коэффициентов детализации без понижающей дискретизации

#python #numpy #image-processing #signal-processing #wavelet

#python #numpy #обработка изображений #обработка сигналов #вейвлет

Вопрос:

Вейвлет-преобразование позволяет нам вычислять коэффициенты детализации сигнала или изображения. Он также выполняет понижающую дискретизацию изображения на каждом уровне декомпозиции.

Я хочу вычислить коэффициенты детализации без понижающей дискретизации. Я хочу использовать фильтр нижних частот G для извлечения коэффициентов детализации, подобных квадратурному зеркальному фильтру, за вычетом понижающей дискретизации. Однако у меня есть этот фильтр только в 1D: [-1/sqrt(2), 1/sqrt(2)]

Насколько я понимаю, я могу сначала применить G к строкам изображения, а затем к столбцам. Как я могу выполнить это умножение в Numpy? Размер моего изображения составляет 768x768 .

Комментарии:

1. каков размер этого одномерного массива? [-1/sqrt(2), 1/sqrt(2)]

2. @kmario23 (2,)

Ответ №1:

Если я правильно понял ваш вопрос, то для этого мы можем использовать широковещательную передачу, но перед этим мы должны разбить наш начальный фильтр на плитки, чтобы он соответствовал одному из размеров нашего изображения. И, к счастью, изображение здесь квадратное. Таким образом, многое становится проще:

 In [70]: filter_ = np.array([-1/np.sqrt(2), 1/np.sqrt(2)])

In [71]: filter_
Out[71]: array([-0.70710678,  0.70710678])

# tile the initial array to match the dimensions of image
In [72]: filter_1d = np.tile(filter_, 768//2)

In [73]: filter_1d.shape
Out[73]: (768,)

In [74]: img = np.random.random_sample((768, 768))

# apply the filter on the image
In [76]: filtered = np.multiply(img, filter_1d)

In [77]: filtered.shape
Out[77]: (768, 768)
  

Комментарии:

1. В каком направлении это умножается? Строки или столбцы?

2. Поскольку мы разбиваем его на плитки, это будет транслироваться во втором измерении. Однако умножение выполняется поэлементно