Вейвлет-преобразование позволяет вычислить коэффициенты детализации сигнала или изображения. Он также понижает разрешение изображения на каждом уровне декомпозиции.
Я хочу вычислить коэффициенты детализации без субдискретизации. Я хочу использовать фильтр нижних частот G для извлечения коэффициентов детализации, подобных описанию квадратурного зеркального фильтра, за вычетом понижающей дискретизации. Однако у меня этот фильтр есть только в 1D: [-1/sqrt(2), 1/sqrt(2)]
Насколько я понимаю, я могу сначала применить G к строкам изображения, а затем к столбцам. Как я могу выполнить это умножение в Numpy? Мое изображение имеет размер 768x768
.
@kmario23 (2,)
Если я правильно понимаю ваш вопрос, то мы можем использовать для этого широковещательную передачу, но перед этим мы должны разместить наш первоначальный фильтр так, чтобы он соответствовал одному из размеров нашего изображения. И, к счастью, изображение здесь квадратное. Итак, многое становится проще:
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)
В каком направлении это умножается? Строки или столбцы?
Поскольку мы разбиваем его, это будет транслироваться во втором измерении. Однако умножение поэлементно
каков размер этого массива 1D?
[-1/sqrt(2), 1/sqrt(2)]