2011-06-29 16 views
6

Mam obraz (png), który chcę umieścić pod mapą cieplną (że tak powiem) wykonaną z matrycy 2D i wartości 0-1. Więc intensywność miejsca zależy od tego, jak duża jest wartość w macierzy.Nakładka obrazu z matrycą

Mogę użyć imshow (matrycy), ale to całkowicie rysuje obraz pod spodem. Czy możliwe jest, aby nie narysować żadnego piksela z wartościami macierzowymi < .05 lub w jakiś inny sposób, aby to działało?

Odpowiedz

7

Oto przykład nakładania binarny termiczna na górze obrazu kolorowego:

%# 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

jeśli używasz matrycy 2-D z ' 'AlphaData'', wówczas można zastosować colormap na selektywnych miejscach, bez wpływając na inne regiony w obrazie. –

+1

@ ParagS.Chandakkar: tak, w powyższym przykładzie możemy użyć samej macierzy 'Z' jako mapy alfa:' h = imshow (I); set (h, 'AlphaData', Z) '(w takim przypadku obraz staje się przezroczysty i pokazuje szare tło za nim) – Amro

1

załadowany png będzie trójwymiarową matrycą. Możesz przekonwertować dwójkową macierz binarną na trójwymiarową z repmat. Następnie zmień rozmiar macierzy binarnej tak, aby miała taki sam rozmiar jak png z imresize. Na koniec możesz pokazać dwie macierze połączone z czymś podobnym do imshow (alfa (myPng) + (1-alfa) * (myBinaryMat)), gdzie alfa jest parametrem mieszania od 0 do 1.