2012-04-18 119 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;