के साथ छवि के एन्ट्रॉपी को प्राप्त करें या गणना करें, रूबी में छविमैजिक, अधिमानतः मिनी_मैजिक, "एंट्रॉपी" को कैसे ढूंढें? मुझे इसे एक बड़ी परियोजना के हिस्से के रूप में चाहिए, किसी छवि में "रोचकता" ढूंढने के लिए इसे फसल करने के लिए।रूबी और इमेजमैजिक
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 में किया जाता है, जो स्मार्ट स्लाइसिंग और छवियों के लिए फसल की अनुमति देता है। पेपर क्लिप।
धन्यवाद वास्तव में उपयोगी। मेरा मैटलैब कौशल थोड़ा जंगली है, लेकिन मैं ठीक प्रबंधन कर रहा हूं, इसे रूबी में अनुवाद कर रहा हूं (और फ्रीमैट में फिर से खेल रहा हूं)। – berkes