2009-03-25 9 views
8

मै मैटलैब में एक छवि से फीचर निष्कर्षण कर रहा हूं। मुझे इस उद्देश्य के लिए एनएक्सएन विंडोज़ पर कई फ़ंक्शन लागू करना पड़ रहा है (जैसे प्रत्येक 3X3 विंडो, आदि पर भिन्नता को खोजने के लिए
क्या मैट्रिक्स पर लूपिंग के अलावा मैटलैब में ऐसा करने का एक आसान और कारगर तरीका है और हर बार खिड़की तत्वों को इकट्ठा करना?
कुछ कार्यों के लिए, मैं समकक्ष मुखौटा ढूंढने में सक्षम हूं और उन्हें फिल्टर 2 का उपयोग करके लागू किया गया है, लेकिन कई अन्य लोगों के लिए मुझे ऐसा लक्जरी नहीं लगता है (एक अच्छा उदाहरण: मध्यस्थ एक 3X3 विंडो)।
क्या मैं चाहता हूँ कुछ arrayfun की तरह है, लेकिन कुछ NxN खिड़कियां, नहीं अलग-अलग तत्वों पर लागू होने वाला है।
धन्यवाद,
सुंदरMATLAB में 2 डी मैट्रिक्स में चलती विंडो को कैसे लागू करें?

+0

यदि आप प्रश्न अपडेट कर सकता है और विशिष्ट कार्यों आप विंडोड तत्वों को लागू करने के लिए इच्छुक रहे हैं सूचीबद्ध करने में सहायता कर सकते हैं। FILTER2 (या संभवतः CONV2) के उपयोग के लिए उन्हें सभी को मास्क/फ़िल्टर तत्वों में बदलने के तरीके हो सकते हैं। – gnovice

+0

क्या आपके पास छवि प्रसंस्करण टूलबॉक्स है? – Azim

उत्तर

4

आप छवि प्रसंस्करण टूलबॉक्स है तो आप nxm कस्टम निर्दिष्ट कार्यों का उपयोग कर अपनी छवि के ब्लॉक पर कार्रवाई करने के blkproc उपयोग कर सकते हैं। यहाँ एक उदाहरण है

function Ip = imageProcessed(II,blockSize) 
    % FUNCTION imageProcessed calculates average value of blocks of size nxm 
    % blocks 
     if nargin<2, 
     % default/example value for block size 
     blockSize = [3 4]; 
     end 

     if size(II,3)>1, 
      % blkproc requires a grayscale image 
      % convert II to gray scale if it is RGB. 
      II=rgb2gray(II) 
     end 


     % Custom average function. 
     myAveFun = @(x) ones(size(x))*sum(x(:))/length(x(:)); 

     % use blkproc to process image 
     Ip = blkproc(II,[blockSize(1), blockSize(2)],myAveFun); 
end 

नोट:

MATLAB 2009b की छवि प्रसंस्करण उपकरण बॉक्स के रूप में, blkproc depcrecated और blockproc से बदला गया (R2099b अनुभाग here देखें)। तो अंतिम दो पंक्तियों को बदला जा सकता है:

myAveFun = @(blkstrct) ones(size(blkstrct.data))*mean(blkstrct.data(:)) 
Ip = blockproc(II,blockSize,myAveFun); 
+0

धन्यवाद, मेरे पास छवि प्रसंस्करण टूलबॉक्स है और यह वही है जो मुझे चाहिए था। – sundar

+0

आपका स्वागत है। खुशी है कि यह मदद की। – Azim

+0

इस फ़ंक्शन के लिए सहायता ने मुझे 'colfilt' पर इंगित किया। एक 'स्लाइडिंग' विंडो के साथ colfilt बाहर निकलता है मेरे काम को और भी आसान बनाता है। मेरे लिए कार्यों की इस नई सरणी को खोलने के लिए धन्यवाद। – sundar

संबंधित मुद्दे