2012-04-18 118 views
6

我已經在matlab中導入圖像,並在顯示之前如何讓圖像的背景透明?例如,我在白色背景上有一個紅色的球,我將如何使圖像的白色像素變得透明,以便只有紅色的球可見並且白色像素是透明的?在Matlab中使像素透明

回答

15

您需要確保圖像以'png'格式保存。然後,您可以使用png文件的'Alpha' parameter,該文件是一個矩陣,它分別指定每個像素的透明度。它基本上是一個布爾矩陣,如果像素是透明的,則爲1,否則爲0。只要想要透明的顏色總是相同的值(即uint8爲255),就可以使用for循環輕鬆完成此操作。如果它不總是相同的值,那麼你可以定義一個閾值或值的範圍,該像素將是透明的。

更新:

首先通過經由圖像迭代和(假設設置白色是透明的),只要像素是白色的生成阿爾法矩陣,設置alpha矩陣在該像素作爲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 

然後用這個新創建的阿爾法基質(A)將圖像保存爲 「png格式」

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

Thanks @ ademing2。你有一個簡單的例子嗎? – omegaFlame 2012-04-18 16:22:58

+0

我用一個例子編輯了我的原始答案。 – 2012-04-19 13:15:39

+0

謝謝。但是,圖像輸出僅爲1x1和87個字節。有任何想法嗎? – omegaFlame 2012-04-19 16:02:03

10

MATLAB中的循環注意應該不惜一切代價避免,因爲它們很慢。重寫代碼以刪除循環通常稱爲「向量化」代碼。在ademing2的回答中,可以這樣做:

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