Подтвердить что ты не робот

Фильтр высоких частот для обработки изображений в python с использованием scipy/numpy

В настоящее время я изучаю обработку изображений. В Scipy я знаю, что в Scipy.signal есть один медианный фильтр. Может ли кто-нибудь сказать мне, есть ли один фильтр, подобный фильтру высоких частот?

Спасибо

4b9b3361

Ответ 1

"Фильтр высоких частот" - очень общий термин. Существует бесконечное количество различных "фильтров верхних частот", которые делают очень разные вещи (например, фильтр реберной фильтрации, как упоминалось ранее, технически является верхним (наиболее часто является полосовым) фильтром, но имеет совсем другой эффект от того, что вы, вероятно, имел в виду.)

Во всяком случае, исходя из большинства вопросов, которые вы задавали, вы должны, вероятно, посмотреть scipy.ndimage вместо scipy.filter, особенно если вы собираетесь работать с большими изображениями (ndimage может выполнять операции предварительной обработки на месте, сохраняя память).

В качестве базового примера, показывающего несколько разных способов выполнения вещей:

import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage
import Image

def plot(data, title):
    plot.i += 1
    plt.subplot(2,2,plot.i)
    plt.imshow(data)
    plt.gray()
    plt.title(title)
plot.i = 0

# Load the data...
im = Image.open('lena.png')
data = np.array(im, dtype=float)
plot(data, 'Original')

# A very simple and very narrow highpass filter
kernel = np.array([[-1, -1, -1],
                   [-1,  8, -1],
                   [-1, -1, -1]])
highpass_3x3 = ndimage.convolve(data, kernel)
plot(highpass_3x3, 'Simple 3x3 Highpass')

# A slightly "wider", but sill very simple highpass filter 
kernel = np.array([[-1, -1, -1, -1, -1],
                   [-1,  1,  2,  1, -1],
                   [-1,  2,  4,  2, -1],
                   [-1,  1,  2,  1, -1],
                   [-1, -1, -1, -1, -1]])
highpass_5x5 = ndimage.convolve(data, kernel)
plot(highpass_5x5, 'Simple 5x5 Highpass')

# Another way of making a highpass filter is to simply subtract a lowpass
# filtered image from the original. Here, we'll use a simple gaussian filter
# to "blur" (i.e. a lowpass filter) the original.
lowpass = ndimage.gaussian_filter(data, 3)
gauss_highpass = data - lowpass
plot(gauss_highpass, r'Gaussian Highpass, $\sigma = 3 pixels$')

plt.show()

enter image description here

Ответ 2

Один простой фильтр верхних частот:

-1 -1 -1
-1  8 -1
-1 -1 -1

Другим простым примером является оператор Sobel.

При обработке изображений эти виды фильтров часто называются "краевыми детекторами" - страница Wikipedia была в порядке в последний раз, когда я проверил.

Ответ 3

scipy.filter содержит большое количество общих фильтров. Что-то вроде класса iirfilter можно настроить таким образом, чтобы получить типичные цифровые или аналоговые фильтры высоких частот Чебышева или Бутворта.