कई ओवरलैपिंग चूहों की मोज़ेकिंग प्रक्रिया में सुधार करने के लिए पायथन का उपयोग करते हुए हिस्टोग्राम मिलान?


11

मैं कई ओवरलैपिंग चूहों की मोज़ेकिंग प्रक्रिया को बेहतर बनाने के लिए पायथन का उपयोग करके हिस्टोग्राम मिलान करने की कोशिश कर रहा हूं। मैं अपने कोड को इस आधार पर देख रहा हूं:

http://www.idlcoyote.com/ip_tips/histomatch.html

आज तक, मैंने दो आसन्न चूहों के अतिव्यापी क्षेत्र को क्लिप करने और सरणी को समतल करने में कामयाब रहा है।

इसलिए मेरे पास समान लंबाई के दो 1 आयामी सरणियाँ हैं।

फिर मैंने निम्नलिखित कोड को उस वेबसाइट के आधार पर लिखा है। दिखाए गए कोड में मैंने gd और bd इमेज के लिए दो बहुत छोटे डेटासेट को प्रतिस्थापित किया है।

import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

bins = range(0,100, 10)

gd_hist = [1,2,3,4,5,4,3,2,1]

bd_hist = [2,4,6,8,10,8,6,4,2]

nPixels = len(gd_hist)

# here we are creating the cumulative distribution frequency for the bad image
cdf_bd = []
for k in range(0, len(bins)-1):
    b = sum(bd_hist[:k]) 
    cdf_bd.append(float(b)/nPixels)

# here we are creating the cumulative distribution frequency for the good image
cdf_gd = []
for l in range(0, len(bins)-1):
    g = sum(gd_hist[:l])
    cdf_gd.append(float(g)/nPixels) 


# we plot a histogram of the number of 
plt.plot(bins[1:], gd_hist, 'g')
plt.plot(bins[1:], bd_hist, 'r--')
plt.show()        

# we plot the cumulative distribution frequencies of both images
plt.plot(bins[1:], cdf_gd, 'g')
plt.plot(bins[1:], cdf_bd, 'r--')
plt.show()

z = []
# loop through the bins
for m in range(0, len(bins)-1):

    p = [cdf_bd.index(b) for b in cdf_bd if b < cdf_gd[m]] 
    if len(p) == 0:
        z.append(0)
    else:
        # if p is not empty, find the last value in the list p
        lastval = p[len(p)-1]

        # find the bin value at index 'lastval'
        z.append(bins[lastval])

plt.plot(bins[1:], z, 'g')
plt.show()

# look into the 'bounds_error'
fi = interp1d(bins[1:], z, bounds_error=False, kind='cubic')  
plt.plot(bins[1:], gd_hist, 'g')
plt.show
plt.plot(bins[1:], fi(bd_hist), 'r--')
plt.show()

मेरा कार्यक्रम हिस्टोग्राम और संचयी आवृत्ति वितरण को सफलतापूर्वक प्लॉट करता है ... और मुझे लगा कि मेरे पास ट्रांसफ़ॉर्मेशन फ़ंक्शन 'z' को सही करने का हिस्सा था .... लेकिन तब मैं 'bd_hist' पर वितरण फ़ंक्शन 'fi' का उपयोग करता हूं इसे gd डेटासेट से मिलाने का प्रयास करने के लिए यह सब नाशपाती के आकार का हो जाता है।

मैं एक गणितज्ञ नहीं हूँ और यह अत्यधिक संभावना है कि मैंने कुछ स्पष्ट रूप से अनदेखी की है।


मैं हिस्टोग्राम मिलान के बारे में बहुत कुछ नहीं जानता, लेकिन क्या आपके सीडीएफ को 1 (परिभाषा द्वारा) योग करने की आवश्यकता है? cdf_bd = np.cumsum(bd_hist) / float(np.sum(bd_hist))
जेफ जी

जवाबों:


2

हालांकि मैं सुझाए गए कार्यान्वयन पर टिप्पणी नहीं कर सकता, आप GRASS GIS 7 (यहां एक ऐडऑन) के लिए किए गए हिस्टोग्राम मिलान के मौजूदा कार्यान्वयन की जांच करना चाहते हैं:

https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.histo.match

मैनुअल और एक उदाहरण के लिए, देखें

http://grass.osgeo.org/grass70/manuals/addons/i.histo.match.html

कोड GPL2 + लाइसेंस के तहत प्रकाशित किया गया है।


1

एक जंगली ठग के रूप में; मुझे यकीन नहीं है कि यदि आपको श्रेणियों में डेटा मिला है तो आपको एक पीडीएफ की आवश्यकता है ...
क्या आप प्रत्येक अलग-अलग हिस्टोग्राम के लिए प्रत्येक मूल्य की गणना को XY मानों में बदल सकते हैं, और फिर उस मैच की जांच करने के लिए किसी प्रकार के प्रतिगमन संकेतक का उपयोग कर सकते हैं? यानी, दो बिल्कुल समान हिस्टोग्राम के लिए, एक सहसंबंध विश्लेषण प्रदान करेगा और आर 1.0 का वर्ग।


0

कुछ सैंपल डेटा अच्छा होगा क्योंकि यह सैट से सैट तक भिन्न हो सकता है। यहाँ एक सरल स्क्रिप्ट है जिसे मैंने हिस्टोग्राम के बराबर करने की कोशिश में बनाया है:

https://github.com/rupestre-campos/histogram_equalize

हो सकता है कि आपको कुछ जानकारी मिल जाए।

यह भी cdf की गणना करता है जैसा कि आप करते हैं, लेकिन जैसा कि मैंने कोशिश की है कि यह पागल हो जाएगा यदि आप बैंड-प्रति-बैंड की गणना करते हैं, तो आप पूरे रेखापुंज पर विचार करें।

आप ढीला रंग संदर्भ संतुलन और वर्णक्रमीय प्रोफाइल की तरह लग रहा है। इसके अलावा पीडीएफ सही गणना करने के लिए कुल छवि पिक्सेल संख्या से कोई डेटा पिक्सेल नहीं गिनना होगा, तब भी गणना करने की आवश्यकता नहीं है।

कुछ परीक्षण के बाद मुझे 3-4 रिस्ट लैंडसेट 8 के लिए पूरे रिस्तेदार दृष्टिकोण का उपयोग करके दृश्य परिणाम पसंद आया और 16bit से 8bit 0-25 मीटर रेंज में परिवर्तित किया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.