2011-02-08 9 views
5

के साथ छवि के एन्ट्रॉपी को प्राप्त करें या गणना करें, रूबी में छविमैजिक, अधिमानतः मिनी_मैजिक, "एंट्रॉपी" को कैसे ढूंढें? मुझे इसे एक बड़ी परियोजना के हिस्से के रूप में चाहिए, किसी छवि में "रोचकता" ढूंढने के लिए इसे फसल करने के लिए।रूबी और इमेजमैजिक

image = Image.open('example.png') 
histogram = image.histogram() # Fetch a list of pixel counts, one for each pixel value in the source image 

#Normalize, or average the result. 
for each histogram as pixel 
    histogram_recalc << pixel/histogram.size 
endfor 

#Place the pixels on a logarithmic scale, to enhance the result. 
for each histogram_recalc as pixel 
    if pixel != 0 
    entropy_list << log2(pixel) 
    endif 
endfor 

#Calculate the total of the enhanced pixel-values and invert(?) that. 
entropy = entroy_list.sum * -1 

यह सूत्र entropy = -sum(p.*log2(p)) लिए अनुवाद होगा:

मैं एक अच्छा example in Python/Django है, जो निम्नलिखित छद्म कोड देता है पाया।

मेरे सवालों का: मैं Django/पायथन कोड interprete था सही है? अगर मैं रूबी के मिनी_मैजिक में हिस्टोग्राम कैसे ला सकता हूं तो बिल्कुल?

सबसे महत्वपूर्ण प्रश्न: इस एल्गोरिथ्म पहली जगह में किसी भी अच्छा है? क्या आप छवियों (भागों के हिस्सों) में "एन्ट्रॉपी" या "बदलते पिक्सल की मात्रा" या "ढाल गहराई" ढूंढने के लिए बेहतर सुझाव देंगे?

संपादित: ए.ओ. का उपयोग करना

# Compute the entropy of an image slice. 
def entropy_slice(image_data, x, y, width, height) 
    slice = image_data.crop(x, y, width, height) 
    entropy = entropy(slice) 
end 

# Compute the entropy of an image, defined as -sum(p.*log2(p)). 
# Note: instead of log2, only available in ruby > 1.9, we use 
# log(p)/log(2). which has the same effect. 
def entropy(image_slice) 
    hist = image_slice.color_histogram 
    hist_size = hist.values.inject{|sum,x| sum ? sum + x : x }.to_f 

    entropy = 0 
    hist.values.each do |h| 
    p = h.to_f/hist_size 
    entropy += (p * (Math.log(p)/Math.log(2))) if p != 0 
    end 
    return entropy * -1 
end 

image_data जहां एक RMagick::Image है: नीचे इस सवाल का जवाब द्वारा प्रदान की संसाधनों, मैं काम कर कोड के साथ आया था।

इसका उपयोग smartcropper gem में किया जाता है, जो स्मार्ट स्लाइसिंग और छवियों के लिए फसल की अनुमति देता है। पेपर क्लिप।

उत्तर

1

Entropy यहाँ से समझाया गया है (MATLAB स्रोत के साथ है, लेकिन उम्मीद है कि गुणात्मक व्याख्या में मदद करता है):

Introduction to Entropy (Data Mining in MATLAB)

अधिक औपचारिक स्पष्टीकरण के लिए, देखें:

"Elements of Information Theory" (Chapter 2), कवर और थॉमस

द्वारा
+1

धन्यवाद वास्तव में उपयोगी। मेरा मैटलैब कौशल थोड़ा जंगली है, लेकिन मैं ठीक प्रबंधन कर रहा हूं, इसे रूबी में अनुवाद कर रहा हूं (और फ्रीमैट में फिर से खेल रहा हूं)। – berkes

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