2015-06-25 14 views
5

: img_decim_arr = img_arr[::2,::2], orijinal görüntü histogram çok benzer histogram elde edildi: enter image description here
kırım kullanılarak: alt örnekleme yöntemi önerilmektedir skimage.measure.block_reduce(img_arr, block_size = (2,2), func=np.mean) (2x2 blok ortalama) (içerisinde stackoverflow bulunan Bazı tartışmalar) çok karakteristik histogram üretir: enter image description here
Her ikinci bölme daha büyüktür. Eminim bu, bazı takma efektlerden kaynaklanıyordur. Altörneklemenin görüntü (2D sinyal) histogramını nasıl etkilediği konusunda herhangi bir teorik ipucu açıklayabilir ve verebilir misiniz?Olağandışı histogram kullanılarak basit bir görüntü seyreltme sonra

+1

çizilen veri ayrık mı? Ayrık veriler için çok küçük kutuları seçerken kötü görsel efektler alabilirsiniz. Kutu sayısını değiştirmeyi ve bunun bu etkiyi kaldırıp kaldırmayacağını görmeyi deneyeceğim. – cel

+0

Evet, görüntü renk alanı 8-bit gri tonlamalıdır, bu nedenle, her bir yoğunluk için bir tanesi 256'dır. – MarcinBurz

cevap

1

np.mean işlevi, tamsayılara yuvarlanmadığı ve döngüleri döndürmediği için buradaki bir sorundur.

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]]) 

Bu, kendi mantığınızda ilginç yan efektler verebilir. Kesinlikle floplotlibs histogram fonksiyonu ile vidalanır, çünkü floatlar, bin sınırlarının nasıl yerleştirileceği konusunda farklı düşünür.

Kontrol şuna:

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

beyaz bit hist işlev döndürdüğü dizideki aslında sıfır bulunmaktadır. o bidonları verilmesi

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

Ugly histogram

ve aralık sorunu çözer: oyuncağım örnekte yuvarlama zorla verirsen, daha da kötüleşiyor. Eğer yakın Büyütmek bile

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

Good histogram

Zoomed good histogram