रॉबर्ट्स एज डिटेक्टर का उपयोग कैसे करें?


10

मैं एक छवि को संसाधित करने के लिए रॉबर्ट्स एज डिटेक्शन का उपयोग करने की कोशिश कर रहा हूं। क्या मैं छवि के लिए दोनों मास्क लगाता हूं और सामान्य रूप से कनविक्शन करता हूं? किसी ने मुझे इस बढ़त का पता लगाने की विधि का उपयोग करने का टूटना दे सकता है, जैसा कि मैं इसे एक ग्रेस्केल छवि को संसाधित करने के लिए प्रोग्राम करने की कोशिश कर रहा हूं। मैंने दोनों गुठली का उपयोग करके छवि को अलग कर दिया, लेकिन छवि दंत सही दिखती है।

धन्यवाद।

जवाबों:


10

रॉबर्ट क्रॉस थोड़ा मुश्किल है क्योंकि यह एक विषम आकार (3x3 या 5x5 के बजाय 2x2) नहीं है। मैंने इसे एक पैडेड 3x3 कनवल्शन मास्क का उपयोग करके numpy + scipy का उपयोग करके किया है।

import sys
import numpy as np
from scipy import ndimage
import Image

roberts_cross_v = np.array( [[ 0, 0, 0 ],
                             [ 0, 1, 0 ],
                             [ 0, 0,-1 ]] )

roberts_cross_h = np.array( [[ 0, 0, 0 ],
                             [ 0, 0, 1 ],
                             [ 0,-1, 0 ]] )
def load_image( infilename ) :
    img = Image.open( infilename )
    img.load() 
    # note signed integer
    return np.asarray( img, dtype="int32" )

def save_image( data, outfilename ) :
    img = Image.fromarray( np.asarray( np.clip(data,0,255), dtype="uint8"), "L" )
    img.save( outfilename )

def roberts_cross( infilename, outfilename ) :
    image = load_image( infilename )

    vertical = ndimage.convolve( image, roberts_cross_v )
    horizontal = ndimage.convolve( image, roberts_cross_h )

    output_image = np.sqrt( np.square(horizontal) + np.square(vertical))

    save_image( output_image, outfilename )

infilename = sys.argv[1]
outfilename = sys.argv[2]
roberts_cross( infilename, outfilename )

रॉबर्ट क्रॉस पर विकिपीडिया प्रविष्टि से। http://en.wikipedia.org/wiki/Roberts_Cross

विकिपीडिया पर रॉबर्ट की क्रॉस एंट्री से छवि

मेरी स्क्रिप्ट का आउटपुट।

मेरी स्क्रिप्ट आउटपुट


क्या आप छवि में हर पिक्सेल मूल्य को वर्ग करते हैं?
adamjmarkham

हाँ। "Np.sqrt (np.square (क्षैतिज) + np.square (ऊर्ध्वाधर))" क्षैतिज, ऊर्ध्वाधर दिशाओं के बीच वेक्टर परिमाण देता है।
डेविड पोले

@DavidPoole रॉबर्ट का एज डिटेक्टर विकी शानदार है - सरल, टू द पॉइंट और इलस्ट्रेटिव। कैसे / क्यों यह वीएस अन्य ग्रेडिएंट उपायों को शोर करने के लिए संवेदनशील है? वहाँ केवल एक 'सच' ढाल उपाय नहीं है?
स्पेसी

मैं अजगर (स्पाइडर संस्करण) में इस फ़ंक्शन को लागू करने की कोशिश कर रहा हूं, लेकिन मुझे उन तर्कों को समझने में परेशानी हो रही है जो इसे लेते हैं और उन्हें कैसे खिलाएं? infilename और outfilename क्या है? धन्यवाद सैम

infilename एक ग्रेस्केल (1 समतल) छवि है। आउटफिलनेम सिर्फ एक आउटपुट फाइल है जिसे स्क्रिप्ट लिखेगा। इनपुट / आउटपुट इमेज jpeg, png, tif आदि हो सकते हैं, इमेज लाइब्रेरी (अब पिलो) फाइल एक्सटेंशन के आधार पर इमेज फॉर्मेट की व्याख्या करेगी। उदाहरण: python3 rcross.py साइकिल.jpg out.tif
David Poole
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.