2009-03-29 27 views
8

यदि मेरे पास पिक्सल की एक श्रृंखला है, जो कहने के लिए -500 से +1000 तक है, तो मैं उसी पिक्सल पर सभी पिक्सल को सामान्य कैसे करूँगा ताकि वे 0 और 255 कह सकें?मैं एक छवि को सामान्य कैसे बना सकता हूं?

उत्तर

25

इस तरह कुछ स्यूडोकोड एक और

oldmin=-500 
oldmax=1000 
oldrange=oldmax-oldmin; 

newmin=0 
newmax=255; 
newrange=newmax-newmin; 

foreach(oldvalue) 
{ 
    //where in the old scale is this value (0...1) 
    scale=(oldvalue-oldmin)/oldrange; 

    //place this scale in the new range 
    newvalue=(newrange*scale)+newmin 
} 
1

कुछ छद्म कोड मदद मिल सकती है:

foreach(pixel_value in pixel_values): # between -500 and 1000 

    position = (pixel_value + 500)/1500 # gives you a 0 to 1 decimal 
    new_value = int(postion * 255) # or instead of casting, you could round it off 

इस तरह से अजगर कोड है।

+5

वह पायथन कोड –

+0

सही नहीं है, "pixel_value में pixel_values ​​में होना चाहिए:"। उस दिन बहुत अधिक .NET ... – jsapara

3

करने के लिए एक सीमा से रैखिक मूल्यों पैमाने पर होगा पहले यह सभी सकारात्मक हैं। यदि न्यूनतम -500 है तो सभी मानों में 500 जोड़ें। तो कम से कम 0 होगा, और अधिकतम 1500

होगा तो यह सिर्फ तीन का एक नियम है और तुम्हारे पास है:

[value in 0,255] = 255*(Pixel/1500) 
6

आपका प्रश्न बहुत स्पष्ट नहीं है इसलिए मैं जा रहा हूँ यह मानने के लिए कि आप किसी प्रकार की छवि प्रसंस्करण कर रहे हैं और आपके द्वारा प्राप्त किए गए परिणाम -500 से 1000 के मान हैं और अब आपको रंग को उस फ़ाइल में सहेजने की आवश्यकता है जहां प्रत्येक मान को 0 और 255 के बीच होना चाहिए।

आप यह कैसे करते हैं वास्तव में आवेदन में बहुत निर्भर है, वास्तव में परिणाम का क्या अर्थ है और आप वास्तव में क्या करना चाहते हैं। दो मुख्य विकल्प हैं:

  • क्लैंप मूल्यों - 0 के तहत कुछ भी आप 0 और 255 के ऊपर कुछ भी आप 255 से बदलने के द्वारा की जगह आप उदाहरण के लिए यह करने के लिए, चाहेंगे कि आपके छवि प्रसंस्करण किसी तरह का है अगर इंटरपोलेशन जो वास्तव में इन मानों तक नहीं पहुंचना चाहिए
  • रैखिक सामान्यीकरण - रैखिक रूप से आपका न्यूनतम मान 0 और आपके अधिकतम मूल्य 255 हो सकता है। बेशक आपको सबसे पहले न्यूनतम और अधिकतम खोजना होगा। आप कार्य करें:

    v = (origv - min)/(max - min) * 255.0 
    

यह क्या करता है पहले [0,1] को मान मैप है और फिर उन्हें [0,255] वापस करने के लिए खिंचाव।

एक तीसरा विकल्प इन दो विकल्पों के बीच मिश्रण और मिलान करना है। आपका आवेदन मांग सकता है कि आप ऋणात्मक मानों को अनियंत्रित मानों के रूप में मानें और उन्हें [0,255] पर रैखिक रूप से मानचित्र के लिए 0 और सकारात्मक मानों पर क्लैंप करें।

0

दो चर, MinInputValue और MaxInputValue बनाएं। MinInputValue को एक बहुत बड़े सकारात्मक संख्या (सबसे बड़ा पिक्सेल मान से अधिक जो आप कभी देखने की उम्मीद करते हैं) से अधिक शुरू करें और MaxInputValue एक बहुत बड़े ऋणात्मक संख्या (सबसे कम पिक्सेल मान से कम जो आप कभी देखने की उम्मीद करते हैं) से शुरू करें।

छवि में प्रत्येक पिक्सेल पर लूप। प्रत्येक पिक्सेल के लिए, यदि पिक्सेल मान PixelValueMinInputValue से कम है, तो MinInputValue से PixelValue पर सेट करें। यदि पिक्सेल मान MaxInputValue से अधिक है, तो MaxInputValue से PixelValue पर सेट करें।

एक नया चर, InputValueRange बनाएं, और इसे MaxInputValue - MinInputValue पर सेट करें।

एक बार यह हो जाने के बाद, छवि में प्रत्येक पिक्सेल पर फिर से लूप करें।प्रत्येक पिक्सेल PixelValue के लिए, आउटपुट पिक्सेल मान को 255.0 * (PixelValue - MinInputValue)/InputValueRange के रूप में गणना करें। आप इस नए मान को मूल PixelValue पर वापस असाइन कर सकते हैं, या आप उसी आकार की आउटपुट छवि में संबंधित पिक्सेल सेट कर सकते हैं।

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