2013-01-21 28 views
5

Matlab için yeni bir tercihim var, ancak bu soruyla ilgili birisinin yardımcı olabileceğini umuyordum. Bu yüzden gri tonlamaya dönüştürmek ve gri düzeylerini azaltmak istiyorum bir renkli görüntü var. Bu yüzden görüntüyü okudum ve görüntüyü gri tonlamaya dönüştürmek için rgb2gray() kullanıyorum. Ancak, görüntüyü 255 gri düzey yerine yalnızca 32 gri seviyeye nasıl dönüştüreceğimi bilmiyorum.matlabdaki gri tonlu görüntüdeki gri tonlarının sayısını değiştir

Renk eşlemeyi (gri (32)) kullanmayı denedim, ancak bu, resmin kendisinde veya resmin altındaki renk çubuğunda hiçbir etkiye sahip görünmüyordu. Yani başka nerede görüneceğinden emin değildim. Orada herhangi bir ipucu var mı? Teşekkürler.

+0

Sadece 8 renk aralığındaki seviyeleri seçerek daha fazla nicelleştirmek istemezsiniz. Geliştirilmiş gri tonlu kuantizasyon yöntemini kullanmayı düşünün. – mmgp

cevap

0

Görüntü verilerinizin türünün, şüphelendiğim uint8 olup olmadığını kontrol edin. Bu durumda, tamsayı bölümünün zeminini kötüye kullanmak için 8 ile görüntüyü bölüştürün, tekrar 8 ile çarpın ve şu şekilde ayarlayın: I2=(I/8)*8. I2 sadece 32 gri seviyesine sahip olacak.

2

Basit yuvarlama bir görüntünün farklı değerlerin sayısını azaltabilir:

I = rgb2gray(imread('image.gif')); 
J = 8*round(I/8) 

etki için imhist(I) ve imhist(J) bakınız.

Ancak, görüntü boyutunu küçültmek istiyorsanız, Photoshop, Gimp veya IrfanView gibi bir görüntü işleme programını kullanarak daha iyi durumda olabilir ve 32 renk gif olarak kaydedebilirsiniz. Bu sayede dosyanın paletini azaltabilirsiniz ve Matlab'ın yapamayacağı bir şey olduğunu düşünüyorum.

+2

"round" ile dikkatli olun. Eğer tamsayı tipinde değilsem 33 gri seviye ile sonuçlanacaksın. Eğer ben tamsayı tipiyse, herhangi bir "round" a ihtiyacınız olmaz. ;-) –

+0

@ s.bandara: Yuvarlama hakkında iyi bir nokta. Ayrıca, OP'nin aslında uygun bir harita kullanarak 'imwrite' araması olabileceği ortaya çıkıyor, fakat şimdi bunu anlamaya vaktim yok. – Junuxx

+0

@Junuxx, ortaya çıkan görüntünün bu prosedürle potansiyel olarak nasıl görüneceğinin farkında mısınız? (Ben bu sorunun cevabını yorumladım çünkü bu soruyu ziyaret ettiğimde en tepede göründü, fakat buradaki diğer cevaplar için de aynı derecede geçerli.) – mmgp

2

, gri tonlamalı bir görüntüyü [0, 255] aralığında bu aralığın bir alt kümesine dönüştürür, ancak şimdi yalnızca 32 değer kullanarak, istenmeyen yapay nesneler oluşturabilir. Görsel olarak daha iyi görüntü üretebilen bir yönteme Geliştirilmiş Gri Ölçekli Niceleme (IGS olarak kısaltılır) denir. bunu gerçekleştirmek için sözde kodu olarak verilebilir: Bir örnek olarak

mult = 256/(2^bits) 
mask = 2^(8 - bits) - 1 
prev_sum = 0 
for x = 1 to width 
    for y = 1 to height 
     value = img[x, y] 
     if value >> bits != mask: 
      prev_sum = value + (prev_sum & mask) 
     else: 
      prev_sum = value 
     res[x, y] = (prev_sum >> (8 - bits)) * mult 

, yukarıdaki yöntemi kullanarak aşağıdaki şekil ve bits = 5 ile ilgili quantizations, bits = 4 ve bits = 3 göz önünde bulundurun:

enter image description hereenter image description hereenter image description hereenter image description here

(img/(256/(2^bits)))*(256/(2^bits)) yaparak Şimdi aynı görüntüler ancak nicelenmiş:

enter image description hereenter image description hereenter image description hereenter image description here

Bu patolojik bir örneği değil.

İlgili konular