image-processing बीएचएम छवि को एक आलेखक के लिए निर्देशों का सेट करने के लिए परिवर्तित करना है?



colors vectorization (1)

डिथरिंग

वैसे मुझे आज के लिए कुछ समय मिल गया है, इसलिए परिणाम यहाँ है। आपने अपनी प्लॉटर कलर पैलेट प्रदान नहीं किया, इसलिए मैंने इसे अपने परिणामस्वरूप छवियों से निकाला लेकिन आप किसी भी का उपयोग कर सकते हैं। निराशा के पीछे का विचार सरल है हमारी धारणा क्षेत्र पर रंग को एकीकृत नहीं करती है, जो कि व्यक्तिगत पिक्सेल नहीं होती है, इसलिए आपको रंग के अंतर के कुछ संचयकर्ता का उपयोग करना होगा जो कि प्रदान किया गया है और इसके बजाय क्या प्रदान किया जाना चाहिए और इसे अगले पिक्सेल में जोड़ना होगा ...

इस तरह से क्षेत्र में लगभग समान रंग है लेकिन केवल वास्तविक संख्या में रंगों की असतत संख्या का उपयोग किया जाता है इस जानकारी को कैसे अपडेट किया जाए, इसका नतीजा कई तरीकों से नाराज होने वाले परिणाम को विभाजित कर सकता है। सरल सरल है:

  1. रंग संचयकर्ता को शून्य पर रीसेट करें
  2. सभी पिक्सेल प्रक्रिया करें
    1. प्रत्येक पिक्सेल के लिए संचयकर्ता को उसका रंग जोड़ना
    2. अपने पैलेट में परिणाम के सबसे निकटतम मिलान ढूंढें
    3. चयनित पैलेट रंग प्रस्तुत करना
    4. संचयकर्ता से पैलेट रंग चयनित करें

यहां आपकी इनपुट छवि (मैं उन्हें एक साथ रखती हूं):

यहां अपने स्रोत के लिए छवि का परिणाम:

ऊपरी बाएं कोने में रंग के चौराहे मैं सिर्फ पैलेट का उपयोग किया है (आपकी छवि से निकाला गया)।

यहां कोड ( सी ++ ) मैं इसके साथ करता हूं:

picture pic0,pic1,pic2;
    // pic0 - source img
    // pic1 - source pal
    // pic2 - output img
int x,y,i,j,d,d0,e;
int r,g,b,r0,g0,b0;
color c;
List<color> pal;
// resize output to source image size clear with black
pic2=pic0; pic2.clear(0);
// create distinct colors pal[] list from palette image
for (y=0;y<pic1.ys;y++)
 for (x=0;x<pic1.xs;x++)
    {
    c=pic1.p[y][x];
    for (i=0;i<pal.num;i++) if (pal[i].dd==c.dd) { i=-1; break; }
    if (i>=0) pal.add(c);
    }
// dithering
r0=0; g0=0; b0=0;   // no leftovers
for (y=0;y<pic0.ys;y++)
 for (x=0;x<pic0.xs;x++)
    {
    // get source pixel color
    c=pic0.p[y][x];
    // add to leftovers
    r0+=WORD(c.db[picture::_r]);
    g0+=WORD(c.db[picture::_g]);
    b0+=WORD(c.db[picture::_b]);
    // find closest color from pal[]
    for (i=0,j=-1;i<pal.num;i++)
        {
        c=pal[i];
        r=WORD(c.db[picture::_r]);
        g=WORD(c.db[picture::_g]);
        b=WORD(c.db[picture::_b]);
        e=(r-r0); e*=e; d =e;
        e=(g-g0); e*=e; d+=e;
        e=(b-b0); e*=e; d+=e;
        if ((j<0)||(d0>d)) { d0=d; j=i; }
        }
    // get selected palette color
    c=pal[j];
    // sub from leftovers
    r0-=WORD(c.db[picture::_r]);
    g0-=WORD(c.db[picture::_g]);
    b0-=WORD(c.db[picture::_b]);
    // copy to destination image
    pic2.p[y][x]=c;
    }
// render found palette pal[] (visual check/debug)
x=0; y=0; r=16; g=pic2.xs/r; if (g>pal.num) g=pal.num;
for (y=0;y<r;y++)
 for (i=0;i<g;i++)
  for (c=pal[i],x=0;x<r;x++)
   pic2.p[y][x+(i*r)]=c;

जहां picture मेरी छवि वर्ग है, इसलिए यहां कुछ सदस्य हैं:

  • xs,ys रेज़ोल्यूशन
  • color p[ys][xs] प्रत्यक्ष पिक्सेल एक्सेस (32 बिट पिक्सेल प्रारूप इतना 8 बिट प्रति चैनल)
  • clear(DWORD c) रंग c साथ छवि को भरता है

color केवल BYTE db[4] DWORD dd और BYTE db[4] का सरल चैनल एक्सेस के लिए है।

List<> मेरा टेम्पलेट (डायनामिक एरे / सूची> है

  • List<int> a ही int a[]
  • सूची के अंत में add(b) जोड़कर उस पर बी जोड़ें
  • num सूची में मदों की num है

अब कई बिंदुओं से बचने के लिए (अपने प्लॉट के जीवनकाल के लिए) आप इसके बजाय अलग लाइन पैटर्न आदि का उपयोग कर सकते हैं, लेकिन इसमें कई परीक्षण / त्रुटि की आवश्यकता है ... उदाहरण के लिए आप यह सोच सकते हैं कि कुछ इलाकों में रंग कितनी बार उपयोग किया जाता है और उस अनुपात से भिन्न भरने वाले पैटर्न (लाइनों के आधार पर) का उपयोग करते हैं आपको छवि की गुणवत्ता और रेंडरिंग / स्थायित्व की गति के बीच चयन करना होगा ...

आपके कथानक क्षमताओं के बारे में अधिक जानकारी के बिना (गति, विधि बदलने की विधि, रंग संयोजन व्यवहार) कंट्रोल स्ट्रीम बनाने का सर्वोत्तम तरीका तय करना कठिन है मेरी शर्त है कि आप रंगों को मैन्युअल रूप से बदलते हैं ताकि आप प्रत्येक रंग एक ही बार में प्रस्तुत कर सकें। तो पहले उपकरण के रंग के साथ सभी पिक्सेल निकालें सटे पिक्सल को लाइनों / घटता से जोड़ते हैं और रेंडर करें ... फिर अगले उपकरण रंग पर जाएं ...

मेरे पास इस तरह एक आलेख है:

यह कार्य जिसे मैंने लागू करना है वह 24 बिट्स बीएमपी का रूपांतरण है जो इस आलेख के लिए निर्देशों का सेट है। आलेख में मैं 16 आम रंग बदल सकता हूँ। पहली जटिलता जिसे मैं सामना करता हूं वह रंग में कमी है I दूसरी जटिलता जिसका मुझे सामना करना है, यह है कि ड्राइंग निर्देशों के सेट में पिक्सेल को कैसे परिवर्तित किया जाए।

ऑइल पेंट के साथ ड्राइंग टूल ब्रश के रूप में इस्तेमाल किया जाएगा। इसका मतलब है कि साजिश रेखा रेखा रेखाएं इतनी छोटी नहीं होंगी और ये अपेक्षाकृत छोटी होती हैं।

कृपया एल्गोरिदम का सुझाव दें जो इस छवि डेटा रूपांतरण समस्या को हल करने के लिए इस्तेमाल किया जा सकता है?

कुछ प्रारंभिक परिणाम:





reduction