2016-12-01 4 views
7

मैं अधिकांश छवि विश्लेषण कार्य के लिए skimage लाइब्रेरी का उपयोग कर रहा हूं।छवि के जीएलसीएम से एन्ट्रॉपी की गणना

मैं एक आरजीबी छवि है और मैं entropy, energy, homogeneity और contrast छवि से की तरह texture सुविधाओं को निकालने के लिए करना चाहते हैं।

नीचे दिए गए चरणों कि मैं प्रदर्शन कर रहा हैं:

from skimage import io, color, feature 
from skimage.filters import rank 
rgbImg = io.imread(imgFlNm) 
grayImg = color.rgb2gray(rgbImg) 
print(grayImg.shape) # (667,1000), a 2 dimensional grayscale image 

glcm = feature.greycomatrix(grayImg, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4]) 
print(glcm.shape) # (256, 256, 1, 4) 

rank.entropy(glcm, disk(5)) # throws an error since entropy expects a 2-D array in its arguments 

rank.entropy(grayImg, disk(5)) # given an output. 

मेरा प्रश्न है, ग्रे पैमाने पर छवि से गणना एन्ट्रापी एक बनावट सुविधा (सीधे) (GLCM से निकाला एन्ट्रापी सुविधा के रूप में एक ही है)?

यदि नहीं, तो छवि से सभी बनावट सुविधाओं को निकालने का सही तरीका क्या है?

नोट्स:

Entropy - skimage

GLCM - Texture features

उत्तर

12

ग्रे पैमाने पर छवि से गणना उत्क्रम माप (सीधे) निकाले एन्ट्रापी सुविधा के रूप में एक ही है: मैं पहले से ही करने के लिए भेजा है जीएलसीएम (एक बनावट सुविधा) से?

नहीं, इन दोनों entropies बल्कि अलग हैं:

  1. skimage.filters.rank.entropy(grayImg, disk(5)) एक सरणी जो छवि इसी पिक्सेल पर केंद्र के साथ एक परिपत्र डिस्क पर अभिकलन में स्थानीय एन्ट्रापी शामिल grayImg के रूप में एक ही आकार पैदावार और त्रिज्या 5 पिक्सल। एंट्रॉपी की गणना कैसे की जाती है यह जानने के लिए Entropy (information theory) पर एक नज़र डालें। इस सरणी में मान विभाजन के लिए उपयोगी हैं (एन्ट्रॉपी-आधारित ऑब्जेक्ट डिटेक्शन का उदाहरण देखने के लिए this link का पालन करें)। यदि आपका लक्ष्य एक एकल (स्केलर) मान के माध्यम से छवि के एन्ट्रॉपी का वर्णन करना है तो आप skimage.measure.shannon_entropy(grayImg) का उपयोग कर सकते हैं। इस समारोह मूल रूप से पूर्ण छवि के लिए निम्न सूत्र लागू होता है:
    entropy
    जहां n ग्रे स्तर (8 बिट छवियों के लिए 256) की संख्या है, probability एक पिक्सेल ग्रे स्तर intensity होने की संभावना है, और base है लॉगरिदम समारोह का आधार। जब base 2 पर सेट किया गया है तो लौटाया गया मान बिट्स में मापा जाता है।
  2. एक ग्रे लेवल सह-अवसर मैट्रिक्स (जीएलसीएम) एक छवि पर दिए गए ऑफ़सेट पर सह-होने वाली ग्रेस्केल मानों का हिस्टोग्राम है। किसी छवि के बनावट का वर्णन करने के लिए विभिन्न ऑफसेट्स के लिए गणना की गई कई सह-घटना मैट्रिक्स से एंट्रॉपी, ऊर्जा, विपरीत, सहसंबंध आदि जैसी सुविधाओं को निकालना सामान्य है।
    entropy of GLCM
    जहां n और base फिर ग्रे स्तरों की संख्या और लघुगणक समारोह में क्रमश: के आधार है, और निर्दिष्ट द्वारा अलग दो पिक्सल की संभावना के लिए GLCM element खड़ा ऑफसेट हैं: इस मामले में एन्ट्रापी इस प्रकार परिभाषित किया गया है तीव्रता intensity और j है। दुर्भाग्यवश एंट्रॉपी एक जीएलसीएम के गुणों में से एक नहीं है जिसे आप scikit-image* के माध्यम से गणना कर सकते हैं।यदि आप इस सुविधा की गणना करना चाहते हैं तो आपको जीएलसीएम को skimage.measure.shannon_entropy पर पास करने की आवश्यकता है।

* समय इस पोस्ट पिछले संपादित किया गया था पर, scikit छवि के नवीनतम संस्करण 0.13.1 है।

यदि नहीं, तो छवि से सभी बनावट सुविधाओं को निकालने का सही तरीका क्या है?

सुविधाओं की एक विस्तृत विविधता उदाहरण स्थानीय बाइनरी पैटर्न, गेबर फिल्टर, तरंगिकाओं, कानून 'मास्क और कई अन्य लोगों के लिए, एक छवि की बनावट का वर्णन करने के हैं। हरलिक का GLCM सबसे लोकप्रिय बनावट वर्णनकर्ताओं में से एक है। जीएलसीएम सुविधाओं के माध्यम से किसी छवि के बनावट का वर्णन करने के लिए एक संभावित दृष्टिकोण अलग-अलग ऑफ़सेट के लिए जीएलसीएम की गणना करने में होता है (प्रत्येक ऑफ़सेट दूरी और कोण के माध्यम से परिभाषित किया जाता है), और प्रत्येक जीएलसीएम से विभिन्न गुणों को निकालने में होता है।

उदाहरण के लिए हम तीन दूरी (1, 2 और 3 पिक्सल), चार कोण (0, 45, 90 और 135 डिग्री) और दो गुण (ऊर्जा और एकरूपता) उदाहरण के लिए विचार करें। इसके परिणामस्वरूप 12 ऑफसेट (और इसलिए 12 जीएलसीएम) और आयाम 24 का एक फीचर वेक्टर होता है।

import numpy as np 
from skimage import io, color, img_as_ubyte 
from skimage.feature import greycomatrix, greycoprops 
from sklearn.metrics.cluster import entropy 

rgbImg = io.imread('https://i.stack.imgur.com/1xDvJ.jpg') 
grayImg = img_as_ubyte(color.rgb2gray(rgbImg)) 

distances = [1, 2, 3] 
angles = [0, np.pi/4, np.pi/2, 3*np.pi/4] 
properties = ['energy', 'homogeneity'] 

glcm = greycomatrix(grayImg, 
        distances=distances, 
        angles=angles, 
        symmetric=True, 
        normed=True) 

feats = np.hstack([greycoprops(glcm, prop).ravel() for prop in properties]) 

परिणाम इस छवि का उपयोग कर प्राप्त:

sample image - lion:

In [56]: entropy(grayImg) 
Out[56]: 5.3864158185167534 

In [57]: np.set_printoptions(precision=4) 

In [58]: print(feats) 
[ 0.026 0.0207 0.0237 0.0206 0.0201 0.0207 0.018 0.0206 0.0173 
    0.016 0.0157 0.016 0.3185 0.2433 0.2977 0.2389 0.2219 0.2433 
    0.1926 0.2389 0.1751 0.1598 0.1491 0.1565] 
+0

बहुत बहुत धन्यवाद! इससे मदद मिली .. –

-1
from skimage.feature import greycomatrix, greycoprops 

    dis = (greycoprops(glcm, 'dissimilarity')) 
    plt.hist(dis.ravel(), normed=True, bins=256, range=(0, 30),facecolor='0.5');plt.show() 
+1

आप अपने जवाब पर विस्तृत कर सके यहाँ कोड है? समझाओ कि आप क्या साजिश करने की कोशिश कर रहे हैं? –

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