2012-04-18 41 views
6

Tôi đã nhập một hình ảnh trong MATLAB và trước khi tôi hiển thị nó, làm cách nào để làm cho nền của hình ảnh trong suốt? Ví dụ tôi có một quả bóng màu đỏ trên nền trắng, làm thế nào tôi có thể làm cho các điểm ảnh màu trắng của hình ảnh trong suốt để chỉ có thể nhìn thấy quả bóng màu đỏ và các điểm ảnh màu trắng trong suốt?Làm cho một điểm ảnh trong suốt trong Matlab

Trả lời

15

Bạn cần đảm bảo hình ảnh được lưu ở định dạng 'png'. Sau đó, bạn có thể sử dụng 'Alpha' parameter của tệp png, là một ma trận chỉ định độ trong suốt của mỗi pixel riêng lẻ. Về cơ bản nó là một ma trận boolean là 1 nếu pixel là trong suốt, và 0 nếu không. Điều này có thể được thực hiện dễ dàng với vòng lặp for miễn là màu bạn muốn minh bạch luôn có cùng giá trị (tức là 255 cho uint8). Nếu không phải lúc nào cũng có cùng giá trị thì bạn có thể xác định ngưỡng hoặc phạm vi giá trị, trong đó pixel đó sẽ trong suốt.

Cập nhật:

Đầu tiên tạo ra các ma trận alpha bằng cách duyệt qua các hình ảnh và (giả sử bạn thiết lập màu trắng phải minh bạch) bất cứ khi nào pixel là màu trắng, thiết lập các ma trận alpha tại pixel như 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 

Sau đó sử dụng ma trận alpha mới được tạo này (A) để lưu hình ảnh như là một ".png"

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

Cảm ơn @ ademing2. Bạn có một ví dụ ngắn gọn? – omegaFlame

+0

Tôi đã chỉnh sửa câu trả lời ban đầu của mình bằng một ví dụ. –

+0

Cảm ơn. Tuy nhiên, đầu ra hình ảnh chỉ là 1x1 và 87 byte. Bất kỳ ý tưởng? – omegaFlame

10

Lưu ý cho các vòng trong MATLAB nên tránh bằng mọi giá vì chúng chậm. Viết lại mã để loại bỏ các vòng thường được gọi là "vectorizing" mã. Trong trường hợp của câu trả lời ademing2, nó có thể được thực hiện như sau:

A = zeros(size(X)); 
A(X == 255) = 1; 
Các vấn đề liên quan