2012-04-18 24 views
6

matlabで画像をインポートした後、表示する前に画像の背景を透明にするにはどうすればいいですか?たとえば、私は白い背景に赤いボールがあります。赤いボールだけが見え、白いピクセルは透明になるように、イメージの白いピクセルを透明にするにはどうしたらいいですか?Matlabでピクセルを透明にする

答えて

15

画像が「png」形式で保存されていることを確認する必要があります。次に、各ピクセルの透明度を個別に指定する行列であるpngファイルの'Alpha' parameterを使用することができます。本質的には、ピクセルが透明である場合は1、そうでない場合は0のブール値行列です。これは、透明にしたい色が常に同じ値(つまり、uint8では255)であれば、forループで簡単に行うことができます。常に同じ値でない場合は、そのピクセルが透明になるしきい値または値の範囲を定義できます。

更新:

まず、画素が白であるときはいつでも画像を反復し、(あなたが透明に白設定と仮定)によってアルファ行列を生成1.

ように、その画素におけるアルファ行列を設定します
# 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 

そして ".PNG"

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

Thanks @ ademing2簡単な例がありますか? – omegaFlame

+0

私は元の答えを例で編集しました。 –

+0

ありがとうございます。しかし、画像出力は1x1と87byteだけです。何か案は? – omegaFlame

10

として画像を保存するには、この新たに作成されたアルファ行列(A)を使用しMATLABのループは遅いため、すべてのコストをかけて回避する必要があります。ループを削除するコードを書き換えることは、一般に「ベクトル化」コードと呼ばれます。 ademing2の回答の場合は、次のようにして行うことができます。

A = zeros(size(X)); 
A(X == 255) = 1; 
関連する問題