2015-06-25 9 views
5

सरल छवि नाश के बाद का उपयोग कर: img_decim_arr = img_arr[::2,::2], मैं बहुत मूल छवि हिस्टोग्राम के समान हिस्टोग्राम प्राप्त: enter image description here
नाश का उपयोग कर: skimage.measure.block_reduce(img_arr, block_size = (2,2), func=np.mean) (2x2 ब्लॉक औसत) जो downsampling के लिए विधि की सिफारिश की है (में stackoverflow पर पाया कुछ चर्चा) बहुत विशिष्ट हिस्टोग्राम उत्पन्न करती है: enter image description here
प्रत्येक दूसरा बिन बड़ा होता है। मुझे यकीन नहीं है कि यह कुछ अलियासिंग प्रभाव के कारण हो सकता है। क्या कोई भी कृपया समझा सकता है कि डाउनसमल्पिंग छवि (2 डी सिग्नल) हिस्टोग्राम को कैसे प्रभावित करती है, इसके बारे में कुछ सैद्धांतिक संकेत देते हैं?असामान्य हिस्टोग्राम

+1

साजिश रची डेटा अलग-अलग है? अलग डेटा के लिए बहुत छोटे डिब्बे चुनते समय आप बुरा दृश्य प्रभाव प्राप्त कर सकते हैं। मैं डिब्बे की संख्या बदलने की कोशिश करता हूं और देखता हूं कि यह इस प्रभाव को हटा देता है या नहीं। – cel

+0

हां, छवि रंग स्थान 8-बिट ग्रेस्केल, इस प्रकार डिब्बे की संख्या 256 है, प्रत्येक तीव्रता के लिए एक है। – MarcinBurz

उत्तर

1

समस्या np.mean फ़ंक्शन है, क्योंकि यह पूर्णांक के चारों ओर नहीं है और फ्लोट लौटाती है।

import numpy as np 
import skimage.measure 

a = (10 * np.random.randn(10,10) + 127).astype(np.uint8) 
a 
Out[4]: 
array([[121, 124, 139, 129, 130, 114, 127, 96, 114, 135], 
     [127, 132, 102, 142, 119, 107, 138, 130, 141, 132], 
     [113, 132, 132, 118, 121, 120, 142, 115, 124, 128], 
     [127, 121, 129, 129, 121, 119, 126, 113, 128, 116], 
     [144, 131, 123, 131, 130, 137, 140, 142, 127, 128], 
     [127, 126, 124, 115, 127, 125, 122, 126, 147, 132], 
     [118, 119, 117, 117, 133, 149, 122, 120, 116, 138], 
     [147, 147, 127, 117, 123, 123, 136, 121, 139, 129], 
     [142, 129, 113, 111, 130, 116, 137, 127, 106, 148], 
     [132, 141, 141, 142, 119, 132, 126, 115, 131, 122]], dtype=uint8) 

b = skimage.measure.block_reduce(a, block_size = (2,2), func=np.mean) 
b 
Out[6]: 
array([[ 126. , 128. , 117.5 , 122.75, 130.5 ], 
     [ 123.25, 127. , 120.25, 124. , 124. ], 
     [ 132. , 123.25, 129.75, 132.5 , 133.5 ], 
     [ 132.75, 119.5 , 132. , 124.75, 130.5 ], 
     [ 136. , 126.75, 124.25, 126.25, 126.75]]) 

इससे आपको अपने तर्क में दिलचस्प दुष्प्रभाव मिल सकते हैं। यह निश्चित रूप से matplotlibs हिस्टोग्राम फ़ंक्शन के साथ शिकंजा करता है, क्योंकि फ्लोट होने से यह बिन सीमाओं को कैसे रखा जाए इसके बारे में अलग-अलग सोचता है।

इस की जाँच करें:

a = (10 * np.random.randn(200,200) + 127).astype(np.uint8) 
b = skimage.measure.block_reduce(a, block_size = (2,2), func=np.mean) 
hist(b.ravel(), bins=255) 

enter image description here

सफेद बिट्स सरणी कि hist समारोह रिटर्न में वास्तव में शून्य कर रहे हैं। यह भी खराब हो जाता है अगर आप मेरी खिलौना उदाहरण में गोलाई बल

hist(b.ravel().astype(np.uint8), bins=255) 

Ugly histogram

यह डिब्बे देते और सीमा समस्या का हल। यहां तक ​​कि अगर तुम पास ज़ूम

hist(b.ravel().astype(np.uint8), bins=255, range=(0,255)) 

Good histogram

Zoomed good histogram

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