image processing - Average blur code bug -


PImage toAverageBlur (PImage sourceImg)

{ <प्री> PImage newImg = नया PImage (sourceImg.width, sourceImg.height); फ्लोट आर 0, आर 1, आर 2, आर 3, आर 4, आर 5, आर 6, आर 7, आर 8; फ्लोट बी 0, बी 1, बी 2, बी 3, बी 4, बी 5, बी 6, बी 7, बी 8; फ्लोट जी ​​0, जी 1, जी 2, जी 3, जी 4, जी 5, जी 6, जी 7, जी 8; फ्लोट कुल; newImg.loadPixels (); (Int i = 1; i & lt; sourceImg.width-1; i ++) {के लिए (int j = 1; j & lt; sourceImg.height-1; j ++) {int pixelPosition = i * sourceImg.width + j; R1 = red (sourceImg.pixels [((i) * sourceImg.width) + (j-1)]); बी 1 = नीला (स्रोत इमेज। पिक्सेल [((i) * sourceImg.width) + (j-1)]); जी 1 = हरे (स्रोत इमग। पिक्सेल [((i) * स्रोत इमेज। वाइड) + (जे-1)]); फ्लोट sumOne = (r1 + b1 + g1) / 9; आर 2 = लाल (स्रोत इमेज। पिक्सेल [((i) * sourceImg.width) + (j + 1)]); बी 2 = नीला (स्रोत इमेज। पिक्सेल [((i) * sourceImg.width) + (j + 1)]); जी 2 = हरे (स्रोत इमग। पिक्सेल [((i) * sourceImg.width) + (जे + 1)]); Float sumTwo = (r2 + b2 + g2) / 9; आर 3 = लाल (स्रोत आईएमजी पिक्सल [((-1-I) * स्रोत इमेज। वाइड) + (जे-1)]); बी 3 = नीला (स्रोत इमेज। पिक्सेल [((i-1) * sourceImg.width) + (j-1)]); जी 3 = हरे (स्रोत आईएमजी पिक्सल [((-1-I) * स्रोत इमेज। वाइड) + (जे-1)]); Float sumThree = (r3 + b3 + g3) / 9; आर 4 = लाल (स्रोत इमेज। पिक्सेल [((i-1) * स्रोत इमेज। वाइड) + (जे)]); बी 4 = नीला (स्रोत इमेज। पिक्सेल [((i-1) * स्रोत इमेज। वाइड) + (जे)]); जी 4 = हरे (स्रोत इमग। पिक्सेल [((i-1) * स्रोत इमेज। वाइड) + (जे)]); फ्लोट राशिफल = (आर 4 + बी 4 + जी 4) / 9; R5 = red (sourceImg.pixels [((i-1) * sourceImg.width) + (j + 1)]); बी 5 = नीला (स्रोत आईएमजी पिक्सेल [((i-1) * sourceImg.width) + (जे + 1)]); जी 5 = हरे (स्रोत इमग। पिक्सेल [((i-1) * स्रोत इमेज। वाइड) + (जे + 1)]); Float sumFive = (r5 + b5 + g5) / 9; आर 6 = लाल (स्रोत आईएमजी। पिक्सेल [((आई + 1) * स्रोत इमेज। वाइड) + (जे-1)]); बी 6 = नीला (स्रोत इमेज। पिक्सेल [((i + 1) * स्रोत इमेज। वाइड) + (जे -1)]); जी 6 = हरे (स्रोतइमग। पिक्सेल [((i + 1) * स्रोत इमेज। वाइड) + (जे -1)]); Float sumSix = (r6 + b6 + g6) / 9; आर 7 = लाल (स्रोत आईएमजी पिक्सल [((आई + 1) * स्रोत इमेज। वाइड) + (जे)]); बी 7 = नीला (स्रोत इमेज। पिक्सेल [((आई + 1) * स्रोत इमेज। वाइड) + (जे)]); जी 7 = हरे (स्रोत इमग। पिक्सेल [((I + 1) * स्रोत इमेज। वाइड) + (जे)]); Float sumSeven = (r7 + b7 + g7) / 9; R8 = लाल (स्रोत इमेज। पिक्सेल [((I + 1) * sourceImg.width) + (j + 1)]); बी 8 = नीला (स्रोत आईएमजी पिक्सेल [((I + 1) * sourceImg.width) + (जे + 1)]); जी 8 = हरे (स्रोत इमग। पिक्सेल [((1 + 1) * स्रोत इमेज। वाइड) + (जे + 1)]); Float sumEight = (r8 + b8 + g8) / 9; R0 = लाल (sourceImg.pixels [pixelPosition]); बी 0 = नीला (स्रोत इमेज। पिक्सेल [पिक्सेलपोशन]); G0 = हरा (स्रोत इमग। पिक्सेल [पिक्सेल पोजिशन]); Float sumZero = (r0 + b0 + g0) / 9; कुल = sumOne + sumTwo + sumThree + sumFour + sumFive + sumSix + sumSeven + sumEight + sumZero; NewImg.pixels [pixelPosition] = रंग (कुल); }}

newImg.updatePixels (); नई आईएमजी वापसी; }

मुझे लगता है कि यह या तो int pixelPosition = j * a.width + i; या int pixelPosition = i * a.height + j;

मान लीजिए कि आपकी छवि 100x10 है, इसका अर्थ है कि 1000 तत्व हैं। यदि आप तत्व (50,5) देख रहे हैं तो I = 50 और j = 5, मूल कोड कहलाता है pixelposition = i * a.width + j; जिसका अर्थ है पिक्सेल पदोन्नति = 50 * 100 + 5 = 5005 जो सीमा से बाहर है यदि आप अपने कोड को देखते हैं तो आप हमेशा (i +/- 1) * चौड़ाई + (जे +/- 1) का उपयोग करते हैं, इसलिए सभी चीजों के लिए ठीक हो जाएगी, जहां मैं ऊंचाई से कम है, लेकिन बाकी सब कुछ से बाहर होने वाला है रेंज।

अगली समस्या का औसत लाल, हरा और नीला है। आपको या तो भूरे रंग या अन्य रंगीन स्थान चर को रंग में बदलना चाहिए।

अगली समस्या गोल घूर्णन है। प्रत्येक राशि को छोटा किया जा रहा है जब आरजीबी मूल्य छोटा है। फ्लोटिंग बिंदु प्रकार का उपयोग करें और फिर उसे अंतिम चरण में डालें।

अगली समस्या अंतिम पंक्ति में है:

  aBlur.pixels [pixelposition] = a.pixels [पिक्सेलपोशन] + रंग (कुल);   

aBlur ऐसा लगता है कि यह इनपुट छवि का एक ग्रेस्केल ब्लर होना माना जाता है, लेकिन मुझे नहीं पता कि रंग का स्थान कैसे सेट किया गया है, मान लें कि यह आरजीबी का है। आप मूल पिक्सेल की प्रतिलिपि बनाते हैं और ब्लर के रंगीन संस्करण में जोड़ते हैं?

मान लीजिए मूल पिक्सेल (150,150,150) है और औसत मूल्य आपको मिलेगा 170. यदि फ़ंक्शन का रंग (170) एक पिक्सेल बनाता है ( 170,170,170) तो मूल और औसत का योग (320,320,320) होने वाला है तो अब पिक्सेल मूल्य मूल के धुंधला संस्करण से दूर है।

मुझे संदेह है कि यह पंक्ति होनी चाहिए

  aBlur.pixels [pixelposition] = रंग (कुल );    

Comments