Matlab

2009-11-15 22 views
15

में चिकनाई छवियों के लिए मीन फ़िल्टर मुझे मैटलैब में कुछ मूल छवि प्रसंस्करण तकनीकों का परीक्षण करने की आवश्यकता है। मुझे विशेष रूप से दो प्रकार के फ़िल्टरों का परीक्षण और तुलना करने की आवश्यकता है: माध्य फ़िल्टर और औसत फ़िल्टर।Matlab

औसत फ़िल्टरिंग का उपयोग कर छवि को सुचारु बनाने के लिए, छवि प्रसंस्करण टूलबॉक्स से medfilt2 पर एक शानदार फ़ंक्शन है। क्या औसत फिल्टर के लिए कोई समान कार्य है? या औसत फ़िल्टर बनाने के लिए filter2 फ़ंक्शन का उपयोग कैसे करें?

मेरे लिए सबसे महत्वपूर्ण चीजों में से एक फ़िल्टर के त्रिज्या को स्थापित करने की संभावना है। अर्थात। मंझला फिल्टर के लिए, अगर मैं [3 एक्स 3] त्रिज्या (मुखौटा) चाहते हैं, मैं तो बस का उपयोग

imSmoothed = medfilt2(img, [3 3]); 

मैं मतलब फिल्टर के लिए इसी तरह की कुछ हासिल करना चाहते हैं।

उत्तर

27
h = fspecial('average', n); 
filter2(h, img); 

doc fspecial देखें: h = fspecial('average', n) रिटर्न एक औसत फिल्टर। nh में पंक्तियों और स्तंभों की संख्या निर्दिष्ट करने वाला 1-बाय-2 वेक्टर है।

+0

महान किया जा सकता है, कि मुझे क्या चाहिए और वहां कुछ अन्य रोचक फ़िल्टर पाए गए, अगर मैं यह जवाब दो बार स्वीकार कर सकता हूं: डी बहुत धन्यवाद! – Gacek

5
I = imread('peppers.png'); 
H = fspecial('average', [5 5]); 
I = imfilter(I, H); 
imshow(I) 

ध्यान दें कि फिल्टर तीव्रता छवियों (2 डी मैट्रिक्स) के लिए लागू किया जा सकता filter2 का उपयोग कर, जबकि बहु-आयामी छवियों (आरजीबी छवियों या 3 डी मैट्रिक्स) पर imfilter प्रयोग किया जाता है।

इंटेल प्रोसेसर पर भी, imfilter निष्पादन में तेजी लाने के लिए इंटेल इंटीग्रेटेड प्रदर्शन प्राइमेटिव्स (आईपीपी) लाइब्रेरी का उपयोग कर सकते हैं।

+3

आप मध्य फ़िल्टरिंग के लिए कर्नेल को डिज़ाइन नहीं कर सकते क्योंकि यह एक गैर-रैखिक संकल्प है: प्रत्येक एनएक्सएन पड़ोस के लिए गणनाओं में केवल उत्पादों और रकम से अधिक शामिल है। – Amro

+0

छवि विभाजन में औसत कर्नेल का लाभ कौन सा है? मैंने कुछ पेपर पढ़े, उन्होंने कहा कि औसत कर्नेल और गाऊशियन कर्नेल समान हैं। और औसत कर्नेल गॉसियन कर्नेल से 1 डी संकल्प द्वारा तेजी से चलाएगा, है ना? – user8264

+0

दोनों का प्रभाव * धुंधला * एक प्रभाव है, अंतर यह है कि वे पास के पिक्सेल को कैसे शामिल करते हैं। एक औसत कर्नेल पड़ोस में पिक्सल का औसत मान लेता है, जिसमें सभी पिक्सल बराबर वजन देते हैं। एक गॉसियन कर्नेल भारित औसत लेगा जैसे कि यह पड़ोस के बीच में पिक्सेल को और अधिक वजन देता है और जब आप केंद्र से दूर जाते हैं तो वजन कम होता है (वजन सामान्य वितरण "घंटी के आकार के वक्र" से लिया जाता है) .. 'Fspecial ('औसत', [7 7]) के उत्पादन की तुलना 'fspecial (' gaussian ', [7 7], 1 के विरुद्ध करें।1) '(दोनों एक सामान्यीकृत कर्नेल को वापस करते हैं जो' 1' तक है) – Amro

6

मुझे लगता है कि अच्छे उत्तरों पहले ही दिए जा चुके हैं, लेकिन मैंने सोचा कि मैटलैब में कोई विशेष फ़ंक्शन या टूलबॉक्स का उपयोग करके फ़िल्टरिंग करने का तरीका देना अच्छा नहीं होगा। यह समझने के लिए भी बहुत अच्छा है कि प्रक्रिया कैसे काम करती है क्योंकि आपको दृढ़ता से संकल्प कर्नेल को सेट करने की आवश्यकता होती है। मतलब फिल्टर गिरी सौभाग्य से बहुत आसान है:

I = imread(...) 
kernel = ones(3, 3)/9; % 3x3 mean kernel 
J = conv2(I, kernel, 'same'); % Convolve keeping size of I 

ध्यान दें कि रंग छवियों के लिए आप छवि में चैनलों में से प्रत्येक को यह लागू करने के लिए होगा।

+0

धन्यवाद। लेकिन imfilter दस्तावेज में यह कहा जाता है कि यह ज्यादातर मामलों में conv2 का उपयोग करता है। तो डॉक्टर को पढ़ने से मुझे एक ही निष्कर्ष पर लाया गया। वैसे भी धन्यवाद :) – Gacek

2

और घुमाव में डोमेन को बदलने एक गुणा के माध्यम से परिभाषित किया गया है:

conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y))) 

अगर एक चैनल ... माना जाता है और अधिक चैनलों के लिए यह हर चैनल

0
f=imread(...); 

h=fspecial('average', [3 3]); 
g= imfilter(f, h); 
imshow(g); 
+2

यह उत्तर [इस] से अलग कैसे है [http://stackoverflow.com/a/1738390/1714410)? – Shai