2013-02-13 50 views
6

में ग्रेस्केल है या नहीं, मैं एक फ़ंक्शन लिख रहा हूं जो एक छवि ले सकता है और विशिष्ट चिकनाई कार्य करता है। मेरी समारोह के बहुत शुरुआत में मैं pic = rgb2gray(pic);यह निर्धारित करें कि कोई छवि Matlab

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

क्या कोई अंतर्निहित फ़ंक्शन या छवि का परीक्षण करने और उसका रंग प्रारूप निर्धारित करने का एक आसान तरीका है?

मैं isRGB और isGrayscale कार्यों के बारे में गूगल पर कुछ पढ़ा लेकिन वे मैटलैब के बाद के संस्करणों से हटा दिया गया है ...

मैं कुछ इस तरह सोच रहा हूँ अगर यह एक समारोह में बनाया गया था शांत हो जाएगा।

 if (pic == RGB) 
     do 
      . 
      . 
      . 
    elseif (pic == GrayScale) 
     do 
      . 
      . 
      . 
    else 
     do 
      . 
      . 
      . 

यदि नहीं, तो शायद मैं एक समारोह है कि एक pixel x,y लेता है और अपने मूल्य परीक्षण लिख सकता है?

if (p(x,y) == .... या कुछ? मुझे यकीन है ... विचार?

size(pic, 3) = 3 

ग्रेस्केल के लिए::

उत्तर

5

क्या @Milo सुझाव की तरह, लेकिन एक अलग समारोह के साथ। ndims का उपयोग करें:

ndims(pic) 

छवि pic में आयामों की संख्या दिखाता है। किसी सरणी में आयामों की संख्या हमेशा 2 से अधिक या बराबर होती है, और एक आरजीबी छवि में यह >2 होगा। पीछे सिंगलटन आयामों को अनदेखा किया जाता है (एक सिंगलटन आयाम कोई आयाम है जिसके लिए size(A,dim) = 1 है।)

11

रंग छवियों 3 चैनलों (आर, जी, बी), इसलिए है

size(pic, 3) = 1 
+0

यह समझ में आता है। जिज्ञासा से, 'आकार (तस्वीर, 3) = 2' के लिए क्या उपयोग किया जाएगा? क्या कोई अन्य रंग प्रारूप है जिसमें मुझे शामिल करना चाहिए? – Reanimation

+0

सिद्धांत में आप किसी भी चैनल के 2, निश्चित रूप से, या 3 से अधिक ([हाइपर स्पेक्ट्रल इमेजिंग] (http://en.wikipedia.org/wiki/Hyperspectral_imaging) की छवियां प्राप्त कर सकते हैं। अभ्यास में, रंग छवियां 3 या 4-चैनल ([रंग रिक्त स्थान] (http://en.wikipedia.org/wiki/Color_space#Partial_list_of_color_spaces) हैं। आपके कोड के आधार पर, आपको किसी भी प्रकार की छवि से निपटने में सक्षम होने के लिए सरणी (गहराई) के तीसरे आयाम पर बेहतर लूप होना चाहिए। – Milo

1

f = imfinfo ('yourimage.someextension');

f.ColorType

इस छवि है, जो आप प्रोग्राम जाँच कर सकते हैं की आप ColorType वापस आ जाएगी।