Xác định loại và băng thông của bộ lọc


7

Đưa ra một bộ lọc, nếu nó được đưa ra như một phương trình, chẳng hạn như:

f(x,y)=(2x2+2y2)exp(x2+y2σ2)

Hoặc trong một hạt nhân, chẳng hạn như: Tôi có thể kiếm được bao nhiêu tìm hiểu về bộ lọc. Cụ thể tôi có thể tìm hiểu xem nó có phải là bộ lọc highpass / lowpass / bandpass không (nếu vậy thì thế nào?), Và tôi có thể tìm ra băng thông của bộ lọc không?

[010141010]

Nếu nó giúp, bối cảnh là xử lý hình ảnh.

Cảm ơn


2
Để lọc hình ảnh bằng kernel, bạn sử dụng tích chập, vì vậy kernel là một loại hàm đáp ứng xung. Để xem đáp ứng tần số của bộ lọc, bạn thực hiện FFT của đáp ứng xung. Trong trường hợp này, hạt nhân của bạn chỉ là 3x3, vì vậy tôi nghĩ rằng bạn sẽ đệm nó bằng số không trước để thấy phổ phản ứng có độ phân giải cao hơn. Sau đó, bạn có thể nhìn vào / đo quang phổ để xem loại và băng thông, vv
endolith

Câu trả lời:


6

Như những người khác đã đề cập, thực hiện FFT 2D trên kernel sẽ cung cấp cho bạn đáp ứng tần số của bộ lọc. Tuy nhiên, điều đáng nói là các bộ lọc 2D có thể được phân tích bằng cách sử dụng biến đổi Z , có thể cung cấp hoặc không cung cấp cái nhìn sâu sắc hơn, tùy thuộc vào bộ lọc (và những gì bạn muốn biết).

Ví dụ, với hạt nhân bạn đã chỉ định, phương trình sai khác tương ứng sẽ là

y(n1,n2)=x(n1+1,n2)+x(n1,n2+1)+x(n11,n2)+x(n1,n21)4x(n1,n2).

Biến đổi Z của nó là

Y(z1,z2)=z1X(z1,z2)+z2X(z1,z2)+z11X(z1,z2)+z21X(z1,z2)4X(z1,z2),

mà sau khi sắp xếp lại, sẽ mang lại hàm truyền sau cho bộ lọc:

H(z1,z2)=Y(z1,z2)X(z1,z2)=z1+z2+z11+z214.

Để xác định đáp ứng cường độ, chỉ cần cắm một cặp số mũ phức tạp và đơn giản hóa, như sau:

H(eiw1,eiw2)=eiw1+eiw2+eiw1+eiw24=(eiw1+eiw1)+(eiw2+eiw2)4=2cosw1+2cosw24|H(eiw1,eiw2)|=2(cosw1+cosw22)2.

Đánh giá đáp ứng cường độ ở tần số cực cao sẽ cho bạn cảm giác về đường cao so với đường thấp cho bộ lọc. Ví dụ,

|H(ei0,ei0)|=2(cos0+cos02)2=2(1+12)2=0,
|H(eiπ,eiπ)|=2(cosπ+cosπ2)2=2(112)2=8.

Tất nhiên, hàm truyền có thể được đánh giá trực tiếp để vẽ đáp ứng cường độ của bộ lọc. Đây là một ví dụ sử dụng numpy :

import numpy as np
import pylab as py
from mpl_toolkits.mplot3d import axes3d

def H(z1,z2):
    return z1 + z2 + 1./z1 + 1./z2 - 4.0

n = 100
w1 = w2 = np.linspace(-np.pi,np.pi, n)    
mag = np.zeros((n,n))

for i1 in xrange(0,n):
    for i2 in xrange(0,n):
        z1 = np.exp(1j*w1[i1])
        z2 = np.exp(1j*w2[i2])
        mag[i1,i2] = np.abs(H(z1,z2))

fig = py.figure()
ax = fig.add_subplot(111, projection='3d')    
X, Y = np.meshgrid(w1,w2)
ax.plot_surface(X, Y, mag, cmap='bone', alpha=.5)
py.show()

Phản ứng cường độ bộ lọc

Hãy nhớ rằng nếu bạn sử dụng kỹ thuật FFT 2D hạt nhân, cường độ kết quả sẽ không nhất thiết phải tập trung ở mức 0 như âm mưu trên.


3

Tiêu cực của đạo hàm thứ hai của hạt nhân gaussian như bạn đã mô tả, hóa ra nó được gọi là 'Mũ Mexico' . nhân. Bạn có thể thấy một số sử dụng của nó trong wiki.

Khi nó đứng, một bộ lọc như vậy có thể được sử dụng để phát hiện các cạnh. Hạt nhân bạn đã cung cấp cũng có thể được sử dụng trong cùng dung lượng.

Cách tốt nhất để có thể biết liệu bộ lọc có ở mức thấp / băng tần / thông cao hay không là quan sát nó trong miền tần số, vì điều đó sẽ cho bạn biết các dải nào đang bị triệt tiêu hoặc bị bỏ lại một mình. Thực hiện DFT 2 chiều và lấy độ lớn của kết quả sẽ cung cấp cho bạn thông tin này.


2

Nếu bạn có Hộp công cụ xử lý ảnh MATLAB, bạn có thể sử dụng freqz2: http://www.mathworks.com/help/images/ref/freqz2.html

Mã Scipy cho DFT / FFT 2-d như được ghi chú bởi @endolith và @Mohammad

h = array([[0,1,0],[1,-4,1],[0,1,0]])
N=32; 
figure(); 
imshow(abs(fft2(h,s=(N,N))),interpolation='nearest');
colorbar()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.