8

का उपयोग कर छवियों से विशेषताओं को निकालने के लिए मैं कुछ सफलता के साथ सड़क सुविधाओं को वर्गीकृत करने के लिए scikit-image का उपयोग कर रहा हूं। नीचे देखें: image processed by scikit-image। मुझे अगले चरण को करने में परेशानी हो रही है जो सुविधाओं को वर्गीकृत करना है। उदाहरण के लिए, मान लें कि ये सुविधाएं बॉक्स (600, 800) और (1400, 600) में स्थित हैं।साइकिट-छवि

कोड मैं जानकारी निकालने के लिए उपयोग कर रहा हूँ है:

Image, feature_type, starting_pixel, ending_pixel 
001 a    (600, 600),  (1300, 700) 
002 b    (600, 600),  (1100, 700) 
002 undefined  (700, 700),  (900, 800) 

feature_type रंग पर आधारित होगा आदर्श:

from skimage import io, segmentation as seg 
color_image = io.imread(img) 
plt.rcParams['image.cmap'] = 'spectral' 
labels = seg.slic(color_image, n_segments=6, compactness=4) 

उद्देश्य निम्नलिखित रूप में एक मेज है कंधे एक रंग, पेड़ और ब्रश एक और होगा, आदि

मैं आवश्यक डेटा को कैसे निकाला जा सकता हूं? (यानी: क्या विज्ञान ने छवि को अलग-अलग घटकों में तोड़ दिया है जहां मैं प्रत्येक घटक का स्थान जानता हूं। फिर मैं प्रत्येक घटक को क्लासिफायरफायर में भेज सकता हूं जो प्रत्येक घटक की पहचान करेगा) धन्यवाद!

+1

आपका प्रश्न अस्पष्ट लगता है। क्या आप प्रत्येक फीचर एरिया के लिए बाउंडिंग बॉक्स ढूंढना चाहते हैं? यदि हां, तो क्या आप चाहते हैं कि वे ओवरलैपिंग या गैर-ओवरलैपिंग हों? क्या आप फीचर मैप्स को डाउनसमल्ड नियमित ग्रिड पर मैप करना चाहते हैं? क्या आप स्पष्ट कर सकते हो? – fireant

+0

@ फ़ायरेंट अंतिम लक्ष्य चाहे मैं पूरी छवि पर या छोटे बाउंडिंग बॉक्स पर करता हूं, "रंग" के आधार पर सुविधाओं की पहचान करना है। तो सड़क (1), कंधे (2), खाई 3), पेड़ (4), आदि .. – dassouki

+1

लेकिन आप छवि या वर्गीकरण को क्यों टुकड़ा नहीं करते? Scikit छवि ndarray के साथ काम करता है, आप "color_image [600: 800,1400: 1600 ,:]" कर सकते हैं। क्या मैं इसे बुरी तरह समझ रहा हूँ? – armatita

उत्तर

1

यह है पहली बार मैं उस पैकेज .. मैं एक सरल छवि के साथ करने की कोशिश की कोशिश करते हैं और मैं और अधिक या कम सही परिणाम प्राप्त:

smallimg.jpg

from skimage import io, segmentation as seg 
import matplotlib as plt 
import numpy as np 
color_image = io.imread('smallimg.jpg') 
labels = seg.slic(color_image, n_segments=4, compactness=4) 
for section in np.unique(labels): 
    rows, cols = np.where(labels == section) 
    print("Image="+str(section)) 
    print("Top-Left pixel = {},{}".format(min(rows), min(cols))) 
    print("Bottom-Right pixel = {},{}".format(max(rows), max(cols))) 
    print("---") 

आउटपुट:

Image=0 
Top-Left pixel = 3,1 
Bottom-Right pixel = 15,18 
--- 
Image=1 
Top-Left pixel = 26,1 
Bottom-Right pixel = 34,18 
--- 
Image=2 
Top-Left pixel = 43,1 
Bottom-Right pixel = 52,16 
--- 
Image=3 
Top-Left pixel = 0,0 
Bottom-Right pixel = 59,19 
--- 

ध्यान दें कि दाएं सबसे अधिक पिक्सेल ढाल के कारण मेरा मतलब ठीक नहीं है। अंतिम खंड सफेद पृष्ठभूमि है।

मैंने आपकी छवि के साथ प्रयास किया लेकिन मुझे लगता है कि आपको विभाजन को सही करना होगा। यदि आप 6 छवियों + पृष्ठभूमि प्राप्त करना चाहते हैं तो मैं n_segments = 7 का उपयोग करूंगा।

मैं कॉम्पैक्टनेस के बारे में प्रलेखन में भी देखता हूं: "यह पैरामीटर छवि के विपरीत और छवि में वस्तुओं के आकार पर दृढ़ता से निर्भर करता है।" तो आप जो हासिल करना चाहते हैं उसे हासिल करना मुश्किल हो सकता है।

आप छवि आप ऊपर दिखाने पर छह चित्रों योजना बना रहे हैं, तो क्यों आप उन निर्देशांक जब आप के बजाय अंतिम परिणाम के विभाजन को लागू करने की तस्वीरें साजिश नहीं मिलता है?