2011-06-29 46 views
6

Tôi có hình ảnh (png) mà tôi muốn đặt bên dưới bản đồ nhiệt (để nói) được tạo từ một ma trận 2D có giá trị 0-1. Vì vậy, cường độ của vị trí sẽ được quyết định bởi giá trị của ma trận là bao nhiêu.Lớp phủ hình ảnh với ma trận

Tôi có thể sử dụng imshow (ma trận) nhưng hoàn toàn vẽ lên hình ảnh bên dưới. Có thể có lẽ, không vẽ bất kỳ điểm ảnh nào có giá trị ma trận < .05 hoặc một số cách khác để thực hiện công việc này?

Trả lời

7

Đây là ví dụ về lớp phủ một Heatmap nhị phân trên đỉnh của một hình ảnh màu sắc:

%# some image 
I = im2double(imread('peppers.png')); 

%# I create here a random mask (gaussian centered in middle of image) 
[r,c,~] = size(I); 
[X Y] = meshgrid(1:r,1:c); 
Z = mvnpdf([X(:) Y(:)], [r c]./2, diag(15.*[r c])); 
Z = (Z-min(Z(:)))./range(Z(:)); 
Z = reshape(Z',[c r])'; 

%# show image and mask separately 
subplot(121), imshow(I) 
subplot(122), imshow(Z) 

%# show overlayed images 
figure, imshow(I), hold on 
hImg = imshow(Z); set(hImg, 'AlphaData', 0.6); 

%# also we can specify a colormap 
colormap hsv 

enter image description here enter image description here enter image description here

+0

nếu bạn sử dụng một ma trận 2-D với ' 'AlphaData'', sau đó bạn có thể áp dụng bản đồ màu ở những nơi có chọn lọc, không ảnh hưởng đến các vùng khác trong hình ảnh. –

+1

@ ParagS.Chandakkar: vâng, trong ví dụ trên chúng ta có thể sử dụng ma trận mặt nạ 'Z' như bản đồ alpha:' h = imshow (I); set (h, 'AlphaData', Z) '(trong trường hợp hình ảnh trở nên trong suốt cho thấy hình nền màu xám phía sau nó) – Amro

1

png được tải sẽ là ma trận ba chiều. Bạn có thể chuyển đổi ma trận nhị phân 2d thành một 3d với repmat. Sau đó thay đổi kích thước ma trận nhị phân sao cho nó có cùng kích thước với png với imresize. Cuối cùng, bạn có thể hiển thị hai ma trận được trộn với một cái gì đó như imshow (alpha (myPng) + (1-alpha) * (myBinaryMat)) trong đó alpha là tham số hòa trộn giữa 0 và 1.

Các vấn đề liên quan