2011-05-23 17 views
12

का उपयोग कर पाइथन में छवि प्रसंस्करण के लिए उच्च पास फ़िल्टर वर्तमान में मैं छवि प्रसंस्करण का अध्ययन कर रहा हूं। Scipy में, मुझे पता है Scipy.signal में एक औसत फिल्टर है। क्या कोई मुझे बता सकता है कि उच्च फ़िल्टर फ़िल्टर के समान एक फ़िल्टर है?scipy/numpy

धन्यवाद

उत्तर

34

"उच्च पास फ़िल्टर" एक बहुत ही सामान्य शब्द है। अलग-अलग "हाईपास फिल्टर" की असीमित संख्या होती है जो बहुत अलग चीजें करते हैं (उदाहरण के लिए पहले बताए गए किनारे का डिटेक्शन फ़िल्टर तकनीकी रूप से एक हाईपास (अधिकांश वास्तव में एक बैंडपास) फ़िल्टर है, लेकिन संभवत: आप जो भी संभवतः उससे बहुत अलग प्रभाव डालते हैं

किसी भी दर पर, सवाल आप पूछ किया गया है का सबसे आधार पर मन में था।), तो आप शायद scipy.filter के बजाय scipy.ndimage ध्यान देना चाहिए, खासकर यदि आप बड़ी छवियों के साथ काम करने जा रहे हैं (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

+0

एक महान स्क्रिप्ट के लिए धन्यवाद! मैंने convolve() और matplotlib * और * पायथन भी के बारे में बहुत कुछ सीखा। (मुझे नहीं पता था कि "plot.i" कुछ काम कर सकता है।) –

+0

गॉसियन फ़िल्टर कम पास फ़िल्टर नहीं है? –

+0

@ एएच। - हाँ, लेकिन यदि आप मूल छवि से गाऊशियन लोपास को घटाते हैं, तो आपको समकक्ष हाईपास फ़िल्टर मिलता है। यही "गॉसियन हाई पास" के रूप में जाना जाता है। (उस भाग के लिए कोड के ऊपर टिप्पणियों पर नज़र डालें।) –

1

scipy.filter सामान्य फिल्टर की एक बड़ी संख्या में शामिल है। iirfilter वर्ग की तरह कुछ सामान्य चेबिशहेव या बटवर्थ डिजिटल या एनालॉग उच्च पास फ़िल्टर उत्पन्न करने के लिए कॉन्फ़िगर किया जा सकता है।

4

एक साधारण उच्च पास फ़िल्टर है:

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

Sobel operator एक और सरल उदाहरण है।

छवि प्रसंस्करण में फ़िल्टर के इस प्रकार को अक्सर "एज-डिटेक्टर" कहा जाता है - the Wikipedia page इस बार मैंने चेक किया था।