2012-04-18 32 views
6

Matlabda bir resim çektim ve görüntülemeden önce görüntünün arka planını nasıl şeffaf hale getirebilirim? Örneğin, beyaz bir arka plan üzerinde kırmızı bir top var, görüntünün beyaz piksellerini nasıl şeffaf yapabilirim ki sadece kırmızı top görünür ve beyaz pikseller şeffaf mı?Matlabda saydam bir piksel yapın

cevap

15

Görüntünün 'png' biçiminde kaydedildiğinden emin olmanız gerekir. Daha sonra, her pikselin tek tek saydamlığını belirten bir matris olan png dosyasının 'Alpha' parameter'unu kullanabilirsiniz. Aslında, piksel saydamsa 1 ve eğer değilse 0 olan bir boolean matrisidir. Bu, şeffaf olmasını istediğiniz rengin her zaman aynı değer olduğu sürece (örneğin, uint8 için 255) bir for döngüsüyle kolayca yapılabilir. Her zaman aynı değer değilse, o pikselin saydam olacağı bir eşik veya değerler aralığı tanımlayabilirsiniz.

güncelle:

ilk görüntü yineleme ve piksel beyaz olduğu zaman (saydam olması ayarlamak beyaz varsayılarak), alfa matrisi oluşturmak 1.

olarak o piksel alfa matrisi ayarlamak
# X is your image 
[M,N] = size(X); 
# Assign A as zero 
A = zeros(M,N); 
# Iterate through X, to assign A 
for i=1:M 
    for j=1:N 
     if(X(i,j) == 255) # Assuming uint8, 255 would be white 
     A(i,j) = 1;  # Assign 1 to transparent color(white) 
     end 
    end 
end 

Sonra

imwrite(X,'your_image.png','Alpha',A); 
+0

Teşekkür şu şekildedir: ademing2 cevabı durumunda, bu yapılabilir. Kısa bir örneğiniz var mı? – omegaFlame

+0

Orijinal yanıtımı bir örnekle düzenledim. –

+0

Teşekkürler. Ancak, görüntü çıkışı sadece 1x1 ve 87 bayttır. Herhangi bir fikir? – omegaFlame

10

".png" olarak görüntüyü kaydetmek için bu yeni oluşturulan alfa matrisi (A) kullanın MATLAB'daki döngülere yönelik notların, her ne pahasına olursa olsun, yavaş oldukları için kaçınılması gerekir. Döngüleri kaldırmak için kodun yeniden yazılması genellikle "vectorizing" kodu olarak adlandırılır. ademing2 @

A = zeros(size(X)); 
A(X == 255) = 1;