PIV plot problems - function not well invoked?

Hi! So, I'm trying to use a particle image velocimetry (PIV) script and I am kind of stuck with a quiver function.
This is the main code for the PIV, where several functions are invoked (m. files for these functions can be found at http://folk.uio.no/jks/matpiv/Download/files.html ):
close all;clear all;clc;
addpath(fullfile(cd,'piv & other functions'));
global max_sp_dsply
USER INPUT pixel size in Microns, Time in sec
win_piv=64;
pxl_sz=.178;
tm_int=2;
max_sp_dsply=.5;
% ROI 1 Input the corordinates to define rectangle
r1_xmin = 176
r1_xmax = 280
r1_ymin = 30
r1_ymax = 185
% ROI 2
r2_xmin = 78
r2_xmax = 133
r2_ymin = 30
r2_ymax = 181
[filename, pathname] = uigetfile({'*.*'}, 'Input your stack (.tif)');
avi_filename2=filename;
img_info=imfinfo(fullfile(pathname,filename));
Num_file=length(img_info)
res_folder=fullfile(pathname,[filename '_Results']);
mkdir(res_folder);
mkdir(res_folder,'PIV velocity text');
mkdir(res_folder,'PIV r1 velocity text');
mkdir(res_folder,'PIV r2 velocity text');
mkdir(res_folder,'PIV quiver image');
for ifile=1:Num_file-1
f1=imread(fullfile(pathname,filename),ifile);
f2=imread(fullfile(pathname,filename),ifile+1);
[x,y,u1,v1]= matpiv(f1,f2,win_piv,tm_int,0.5,'single'); % matpiv(image1,image2,size of window,time_interval, overlap, looping for window)
u=pxl_sz*u1; % x, y, u1, v1 => matrix
v=pxl_sz*v1;
% ~~~~~~~~~~~~~~~~~~~~~~ Filter and interpolate ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
v(isnan(v))=0; u(isnan(u))=0; % Make NaN values = 0
[lu,lv]=localfilt(x,y,u,v,2,'median');
[fu,fv]=naninterp(lu,lv,'weighted');
u=fu;
v=fv; % fu, fv => matrix
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Get x,y,u,v vector ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
xx=x(:); yy=y(:); % xx, yy, uu, vv => vector
uu=u(:); vv=v(:);
zz=sqrt((uu.^2)+(vv.^2));
temp_mat=[xx,yy,uu,vv];
csvwrite(fullfile(res_folder,'PIV velocity text',[avi_filename2 '_' num2str(ifile),'.txt']), temp_mat);
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Get x,y,u,v of roi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% ROI 1
idx_r1 = find(xx<=r1_xmax & xx>=r1_xmin & yy<=r1_ymax & yy>=r1_ymin);
xx_r1 = xx(idx_r1);
yy_r1 = yy(idx_r1);
uu_r1 = uu(idx_r1);
vv_r1 = vv(idx_r1);
csvwrite(fullfile(res_folder,'PIV r1 velocity text',[avi_filename2 '_' num2str(ifile),'.txt']), [xx_r1,yy_r1,uu_r1,vv_r1]);
abs_avg_uu_r1(ifile) = abs(mean(uu_r1));
abs_avg_vv_r1(ifile) = abs(mean(vv_r1));
% ROI 2
idx_r2 = find(xx<=r2_xmax & xx>=r2_xmin & yy<=r2_ymax & yy>=r2_ymin);
xx_r2 = xx(idx_r2);
yy_r2 = yy(idx_r2);
uu_r2 = uu(idx_r2);
vv_r2 = vv(idx_r2);
csvwrite(fullfile(res_folder,'PIV r2 velocity text',[avi_filename2 '_' num2str(ifile),'.txt']), [xx_r2,yy_r2,uu_r2,vv_r2]);
abs_avg_uu_r2(ifile) = abs(mean(uu_r2));
abs_avg_vv_r2(ifile) = abs(mean(vv_r2));
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Quiver plot ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
xx(~vv)=0; yy(~uu)=0; % Removing null zeros during ploting
scaled_quiver2(xx,yy,uu,vv,f1);
set(gcf, 'Position', get(0,'Screensize'));
print('-dtiffnocompression','-r300',fullfile(res_folder,'PIV quiver image',[num2str(ifile),'.tif']));
close all;
end
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Scale bar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cmap = jet(36); % 1:35 level , define a color map with 35 levels
rgb_cmap = reshape(flipud(cmap),[length(cmap) 1 3]);
figure;
imagesc(rgb_cmap);
x_y_w_h1=get(gcf,'Position');
x_y_w_h2=get(gca,'Position');
x_y_w_h1(3)=150;
x_y_w_h2(3)=0.2;
x_y_w_h2(1)=x_y_w_h2(1)+0.25;
set(gcf,'Position',x_y_w_h1);
set(gca,'Position',x_y_w_h2);
set(gca,'XTickLabel','');
set(gca,'TickLength', [0 0]);
set(gca,'YTick',1:36);
set(gca,'YTickLabel',{num2str(max_sp_dsply),'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','0'});
clrbar=getframe(gcf);
imwrite(clrbar.cdata,fullfile(res_folder,'PIV quiver image','scale bar.tif'));
xlswrite(fullfile(res_folder,'PIV quiver image','Absolute average u & v for r1 & r2.xlsx'),{'Frame','abs_avg_uu_r1','abs_avg_vv_r1','abs_avg_uu_r2','abs_avg_vv_r2'},1,'A1');
xlswrite(fullfile(res_folder,'PIV quiver image','Absolute average u & v for r1 & r2.xlsx'),[[1:Num_file-1]' abs_avg_uu_r1' abs_avg_vv_r1' abs_avg_uu_r2' abs_avg_vv_r2'],1,'A2');
close all;
So, my problem is at the Quiver plot step, where an error is displayed:
Undefined function or variable 'scaled_quiver2'.
Error in main_PIV (line 129)
scaled_quiver2(xx,yy,uu,vv,f1);
So probably the function on the respective m. file has a different name. I've downloaded all the m.files to the MATLAB folder, so I presume there's no function missing. It should be just a matter of different names, but I'm not sure. I think it refers to the vekplot2 function http://folk.uio.no/jks/matpiv/Download/Files/vekplot2.m, but not sure about this. So please, if anyone could give me some help here, I would really appreciate it!
Thanks a lot!
Joana

 Accepted Answer

is unlikely to refer to vekplot2 .
The package you refer to does not appear to define scaled_quiver2 . Nothing else public on the Internet does either.
I speculate that it is something like
function scaled_quiver2(x, y, u, v, img)
image(img);
hold on;
S = 0;
quiver(x, u, u, v, S);
hold off;
but possibly with S = 1

2 Comments

Thank you very much for your help Walter! I'm quite new at this, so I thought that, once the function scaled_quiver2 was missing from the package, maybe the person that send me the main script was using that function, but I could replace it for something like vekplot2, since the latter also plots vectors. But they seem actually different in fact.
At the moment, the script seems to be running pretty well, it's making the plots, but I believe this script was supposed to plot arrows in different colors according to the magnitude, at least from the info I've got. But this is not happening in fact, the arrows are all the same color. I've checked the code and colors are not defined anywhere. Am I right? That's probably why I don't get arrows in different colors.
well,actually there's pcolor, that should define a color map. But no color map is showing uo in the end

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!