# Plot transparent png images at arbitrary locations

Posted 2016.11.21 01:30

Given these transparent png images, our goal is to plot these images at arbitrary locations (x, y, and rotation) in a MATLAB figure. For example, as follows:

This can be done in MATLAB by combining surf function with FaceColor option.

Main code

rszwh  = [100 200];

carwh  = [4.5 1.8];

% POSITIONS

rcarpos = [10*rand(1, 2) 360*rand];

gcarpos = [10*rand(1, 2) 360*rand];

bcarpos = [10*rand(1, 2) 360*rand];

pcarpos = [10*rand(1, 2) 360*rand];

[rcarrsz, rtrrsz] = get_rszcarimg('imgs/redcar.png', rszwh);

[gcarrsz, gtrrsz] = get_rszcarimg('imgs/greencar.png', rszwh);

[bcarrsz, btrrsz] = get_rszcarimg('imgs/bluecar.png', rszwh);

[pcarrsz, ptrrsz] = get_rszcarimg('imgs/purplecar.png', rszwh);

% THIS HAS TO RUN EVERY TIME.

% PLOT

figure(); hold on; set(gcf,'Color', [0.6, 0.9, 0.8]/4 );

plot_carimage(rcarpos, carwh, rszwh, rcarrsz, rtrrsz);

plot_carimage(gcarpos, carwh, rszwh, gcarrsz, gtrrsz);

plot_carimage(bcarpos, carwh, rszwh, bcarrsz, btrrsz);

plot_carimage(pcarpos, carwh, rszwh, pcarrsz, ptrrsz);

axis equal off; grid on;

xlabel('X'); ylabel('Y');

title('Plot Cars', 'FontSize', 15, 'Color', 'w');

Function codes

function [carrsz, trrsz] = get_rszcarimg(imgpath, rszwh)

% GET RESIZED CAR IMAGE

carrsz = imresize(carimg, rszwh);

trrsz  = imresize(cartr, rszwh);

function [xmesh_grid, ymesh_grid] = get_carmeshgred(carpos, carwh, rszwh)

[xtemp, ytemp] = meshgrid(linspace(-carwh(1)/2, carwh(1)/2, rszwh(2)) ...

, linspace(-carwh(2)/2, carwh(2)/2, rszwh(1)));

xvec = xtemp(:);

yvec = ytemp(:);

xyvec = [xvec yvec];

c = cos(carpos(3)*pi/180);

s = sin(carpos(3)*pi/180);

rotmat = [c s ; -s c];

xyvec = xyvec * rotmat + repmat(carpos(1:2), rszwh(1)*rszwh(2), 1);

xvec = xyvec(:, 1);

yvec = xyvec(:, 2);

xmesh_grid = reshape(xvec, rszwh(1), rszwh(2));

ymesh_grid = reshape(yvec, rszwh(1), rszwh(2));

function plot_carimage(carpos, carwh, rszwh, carrsz, trrsz)

[xmesh_grid, ymesh_grid] = get_carmeshgred(carpos, carwh, rszwh);

h = surf('xdata', xmesh_grid, 'ydata', ymesh_grid ...

, 'zdata', zeros(rszwh(1), rszwh(2)) ...

, 'cdata', carrsz, 'AlphaData', trrsz ...

, 'FaceAlpha', 'texture' ...

, 'FaceColor', 'texturemap' ...

, 'EdgeColor','None', 'LineStyle', 'None');

Setting FaceAlpha option to texture and FaceColor option to texture map are important!

#### 'Enginius > Matlab' 카테고리의 다른 글

 Closest Distance from Point to Line  (0) 2017.07.14 2017.03.01 2016.11.21 2016.02.23 2016.01.15 2015.12.23
« PREV : 1 : ··· : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : ··· : 608 : NEXT »