3
% written by Chris and Dan
5
% Displacement.m allows you to analyze the data you aquiered with the
6
% correlation, fitting or mean routine. It only needs the validx and
7
% validy and can calculate strain from it. Before you start you should
8
% consider cleaning up the data as described in the guide. After that step
9
% you can analyze parts of your data, or the full set. Try to use also the
10
% console command, e.g. if you want to analyze only image 100-110 since
11
% something really interesting happend there, load validx and validy into
12
% your workspace and call
13
% displacement(validx(:,100:110),validy(:,100:110));
14
% In this case displacement only loads the important images and you can
15
% clean this part of your data set.
17
% Changed 3. February 2008
20
function [validx,validy]=displacement(validx,validy);
22
%load data in case you did not load it into workspace yet
24
[validxname,Pathvalidx] = uigetfile('*.dat','Open validx.dat');
26
disp('You did not select a file!')
30
validx=importdata(validxname,'\t');
33
[validyname,Pathvalidy] = uigetfile('*.dat','Open validy.dat');
35
disp('You did not select a file!')
39
validy=importdata(validyname,'\t');
42
%define the size of the data set
43
sizevalidx=size(validx);
44
sizevalidy=size(validy);
45
looppoints=sizevalidx(1,1);
46
loopimages=sizevalidx(1,2);
48
%calculate the displacement relative to the first image in x and y
51
validxfirst=zeros(size(validx));
52
validxfirst=mean(validx(:,1),2)*ones(1,sizevalidx(1,2));
53
displx=validx-validxfirst;
56
validyfirst=zeros(size(validy));
57
validyfirst=mean(validy(:,1),2)*ones(1,sizevalidy(1,2));
58
disply=validy-validyfirst;
61
%Prompt user for type of plotting / visualization
62
selection10 = menu(sprintf('How do you want to visualize your data?'),'3D Mesh Plot of Displacement'...
63
,'Full Strain Plots','Strain Measurement between 2 Points','1D Average Strain Measurement',...
64
'Rotate Orientation (exchange x and y)','Remove badly tracked marker, one by one (Position)',...
65
'Delete multible markers (Position)','Delete markers from displacement vs. position plot',...
66
'Delete points moving relative to their neighbours','Select Markers to Analyze ',...
67
'Save validx and validy','Average a couple of images','Cancel');
69
% Selection for Cancel - All windows will be closed and you jump back to
76
% This selection will average up a specified number of images to reduce the
77
% noise of the data set. I would like to point out that you will need to
78
% average your other sensor data (e.g. load data), too, to match it to your
81
prompt = {'How many images would you like to combine as a base image?'};
82
dlg_title = 'Input number of images:';
85
answer = inputdlg(prompt,dlg_title,num_lines,def);
86
if str2num(cell2mat(answer(1)))==0
87
disp('Get out, you changed your mind?')
88
[validx validy]=displacement(validx,validy);
91
baseimages = str2num(cell2mat(answer(1)));
93
disp('Give me a number, will you?')
94
[validx validy]=displacement(validx,validy);
97
if baseimages>loopimages
98
disp('That is too large?!')
100
baseimagemean=mean(validx(:,1:baseimages),2);
101
validx(:,1:baseimages-1)=[];
102
validx(:,1)=baseimagemean;
103
baseimagemean=mean(validy(:,1:baseimages),2);
104
validy(:,1:baseimages-1)=[];
105
validy(:,1)=baseimagemean;
108
[validx validy]=displacement(validx,validy);
112
% Save validx and validy, very useful if you cleaned up your dataset. Data
113
% will be saved as -ascii text file. If you send data like this by email
114
% you can reduce the size tremendously by compressing it. Use ZIP or RAR.
116
[FileName,PathName] = uiputfile('validx_corr.dat','Save validx');
118
disp('You did not save your file!')
119
[validx validy]=displacement(validx,validy);
123
save(FileName,'validx','-ascii')
124
[FileName,PathName] = uiputfile('validy_corr.dat','Save validy');
126
disp('You did not save your file!')
127
[validx validy]=displacement(validx,validy);
130
save(FileName,'validy','-ascii')
132
[validx validy]=displacement(validx,validy);
137
% Select Points from detailed Analysis
139
[validx validy validxbackup validybackup]=ppselection_func(validx,validy);
148
[validx validy]=displacement(validx,validy);
151
% Remove markers moving relativ to their neighbours
153
[validx,validy,displx,disply]=delete_jumpers(validx,validy,displx,disply);
154
[validx validy]=displacement(validx,validy);
157
% Remove markers from the displacement vs. position plot
159
[validx,validy,displx,disply]=removepoints_func(validx,validy,displx,disply);
160
[validx validy]=displacement(validx,validy);
165
[validx,validy]=removepoints_func2(validx,validy);
166
[validx validy]=displacement(validx,validy);
171
[validx validy]=removepoints_func3(validx,validy);
172
[validx validy]=displacement(validx,validy);
177
[validx, validy]=rotatematrix(validx,validy);
178
[validx validy]=displacement(validx,validy);
181
% 1D Strain plot using average strains for ELASTIC STRAIN only
183
[validx validy]=strain_1D_average_func(validx, validy,displx,disply);
184
[validx validy]=displacement(validx,validy);
189
[validx, validy,displx,disply]=strain_1D_2Points_func(validx, validy,displx,disply);
190
[validx validy]=displacement(validx,validy);
193
% Fast plotting, cropping needed for polynomial fit
195
[validx, validy,displx,disply]=polyfit3D(validx, validy,displx,disply);
196
[validx validy]=displacement(validx,validy);
202
[validx, validy,displx,disply]=meshplot(validx,validy,displx,disply);
204
disp('You need at least three markers to display the 3D-plot')
205
msgbox('You need at least three markers to display the 3D-plot','3D-Plot','warn');
207
[validx validy]=displacement(validx,validy);
210
%---------------------------------
212
function [validx,validy,displx,disply]=delete_jumpers(validx,validy,displx,disply);
216
% This is a filter which helps to find jumpy data points which are
217
% oscillating or stop moving.
218
% The Filter starts by finding the next 10 datapoint neighbours
219
% (num_neighbours), calculates their mean position and then plots the
220
% difference between each data point and its neighbours versus image
221
% number. If a data point is jumping around it will show up as a spike. But
222
% be careful, one bad one will also affect his neighbours, therefore its
223
% worthwhile to use this filter step by step.
225
% Changed 3. February 2008
231
while doitonemoretime==1
233
sizevalidx=size(validx);
234
sizevalidy=size(validy);
235
looppoints=sizevalidx(1,1);
236
loopimages=sizevalidx(1,2);
238
% clear the used ones
241
clear meandistancetemp
253
% calculate the distance to the next data points
254
% dist_matrix=zeros(looppoints,looppoints);
255
meandistance=zeros(sizevalidx);
257
g=waitbar(0,'Processing the markers...');
259
waitbar(i/looppoints);
260
dist_matrix=(((validx(:,1)-validx(i,1)).^2+(validy(:,1)-validy(i,1)).^2).^(0.5))';
263
% find the next neighbours by indexing the ones closest
264
[dist_sort, dist_index]=sort(dist_matrix);
266
% take the mean position of the closest data points of each for all
268
meandistance(i,:)= validx(i,:)-mean(validx(dist_index(2:num_neighbours),:),1);
269
max_distance(i)= max(diff(meandistance(i,:)-meandistance(i,1)));
270
min_distance(i)= min(diff(meandistance(i,:)-meandistance(i,1)));
275
plot(diff(meandistance(i,:)-meandistance(i,1)))
279
% Select an upper and lower boundary
280
xlabel('Image number[ ]')
281
ylabel('Relative marker dispacement [Pixels]')
282
title(sprintf('Define the upper and lower bound by clicking above and below the valid points'))
283
marker_pt=(ginput(1));
284
x_mark(1,1) = marker_pt(1);
285
y_mark(1,1) = marker_pt(2);
286
plot([1;loopimages],[y_mark(1,1);y_mark(1,1)],'r');
288
title(sprintf('Define the upper and lower bound by clicking above and below the valid points'))
289
marker_pt=(ginput(1));
290
x_mark(1,2) = marker_pt(1);
291
y_mark(1,2) = marker_pt(2);
292
plot([1;loopimages],[y_mark(1,2);y_mark(1,2)],'r');
294
upperbound=max(y_mark);
295
lowerbound=min(y_mark);
301
meandistancetemp=meandistance;
304
validxtemp(find(max_distance>upperbound | min_distance<lowerbound),:)=[];
305
validytemp(find(max_distance>upperbound | min_distance<lowerbound),:)=[];
306
meandistancetemp(find(max_distance>upperbound |min_distance<lowerbound),:)=[];
307
sizevalidxtemp=size(validxtemp);
308
sizevalidytemp=size(validytemp);
309
looppointstemp=sizevalidxtemp(1,1);
310
loopimagestemp=sizevalidxtemp(1,2);
312
for i=1:looppointstemp
313
plot(diff(meandistancetemp(i,:)-meandistancetemp(i,1)))
316
plot([1;loopimages],[y_mark(1,1);y_mark(1,1)],'r');
317
plot([1;loopimages],[y_mark(1,2);y_mark(1,2)],'r');
321
selection_filter = menu('Do you like the result?','Take it as is','Want to select more','Try again','Cancel');
322
if selection_filter==1
326
elseif selection_filter==2
330
elseif selection_filter==3
332
elseif selection_filter==4
337
%---------------------------------
340
function [validx, validy]=rotatematrix(validx,validy);
349
%---------------------------------
350
% Delete points from the displacement plot
352
function [validx,validy,displx,disply] = removepoints_func(validx,validy,displx,disply) ; %delete points
356
if exist('validx')==0
357
[validx,Pathvalidx] = uigetfile('*.mat; *.txt','Open validx.mat or validx.txt');
359
validx=importdata(validx,'\t');
360
[validy,Pathvalidy] = uigetfile('*.mat;*.txt','Open validy.mat or validy.txt');
362
validy=importdata(validy,'\t');
365
selectremove1 = menu(sprintf('Do you want to delete makers?'),'Yes','No');
373
sizevalidx=size(validx);
374
sizevalidy=size(validy);
376
selectionremove2=selectremove1;
378
sizevalidx=size(validx);
379
looppoints=sizevalidx(1,1);
380
loopimages=sizevalidx(1,2);
381
defaultimage=loopimages
384
while selectionremove2==1
392
sizevalidx=size(validx);
393
looppoints=sizevalidx(1,1);
394
loopimages=sizevalidx(1,2);
396
% update temporary matrices
402
% get the image number from which the bad points will be chosen
403
prompt = {'From which image do you want to delete markers?'};
404
dlg_title = 'Marker removal';
406
if numberbadpoints==0
407
defaultimage=loopimages
410
defaultimage=numberbadpoints
412
def = {num2str(defaultimage)};
413
answer = inputdlg(prompt,dlg_title,num_lines,def);
414
numberbadpoints = str2num(cell2mat(answer(1,1)));
415
if numberbadpoints>loopimages
416
numberbadpoints=loopimages
422
% displx(:,1)=-validx(:,1)+validx(:,numberbadpoints);
423
% disply(:,1)=-validy(:,1)+validy(:,numberbadpoints);
425
plot(validx(:,numberbadpoints),displx(:,numberbadpoints),'o');
426
xlabel('position [pixel]')
427
ylabel('displacement [pixel]')
428
title(['Displacement versus position',sprintf(' (Current image #: %1g)',numberbadpoints)]);
433
validxdelete=validxtemp;
434
validydelete=validytemp;
435
displxdelete=displxtemp;
436
displydelete=displytemp;
438
title(sprintf('Define the region of interest. \n All points ouside that region will be deleted'))
440
[xgrid,ygrid]=ginput(2);
446
deletepoints=find(validxdelete(:,numberbadpoints)>min(x) & validxdelete(:,numberbadpoints)<max(x) & displxdelete(:,numberbadpoints)<max(y) & displxdelete(:,numberbadpoints)>min(y));
447
[loopnum one]=size(deletepoints);
449
validxdelete(deletepoints,:)=[];
450
validydelete(deletepoints,:)=[];
453
% update temporary data matrices; delete bad points
454
displxtemp(deletepoints,:)=[];
455
displytemp(deletepoints,:)=[];
456
validxtemp(deletepoints,:)=[];
457
validytemp(deletepoints,:)=[];
459
plot(validxtemp(:,numberbadpoints),displxtemp(:,numberbadpoints),'o');
461
% delete point permanently?
462
selectremove3 = menu(sprintf('Do you want to delete these markers permanently?'),'Yes','No');
475
selectremove2 = menu(sprintf('Do you want to mark another bad point?'),'Yes','No');
479
validxfirst=zeros(size(validx));
480
validxfirst=validx(:,1)*ones(1,sizevalidx(1,2));
481
validyfirst=zeros(size(validy));
482
validyfirst=validy(:,1)*ones(1,sizevalidy(1,2));
483
displx=validx-validxfirst;
484
disply=validy-validyfirst;
491
%---------------------------------
492
% Delete single points
494
function [validx,validy]=removepoints_func3(validx,validy);
498
selection1 = menu(sprintf('Do you want to mark bad points?'),'Yes','No');
506
selection2=selection1;
509
sizevalidx=size(validx);
510
looppoints=sizevalidx(1,1);
511
loopimages=sizevalidx(1,2)-1;
512
defaultimage=loopimages
523
sizevalidx=size(validx);
524
looppoints=sizevalidx(1,1);
525
loopimages=sizevalidx(1,2)-1;
528
validxfirst=zeros(size(validx));
529
validxfirst=validx(:,1)*ones(1,sizevalidx(1,2));
530
displx=validx-validxfirst;
532
% update temporary matrices
536
% resnormxtemp=resnormx;
538
% get the image number from which the bad points will be chosen
539
prompt = {'From which image do you want to choose the bad points?'};
540
dlg_title = 'Bad points removal';
542
if numberbadpoints==0
543
defaultimage=loopimages
546
defaultimage=numberbadpoints
548
def = {num2str(defaultimage)};
549
answer = inputdlg(prompt,dlg_title,num_lines,def);
550
numberbadpoints = str2num(cell2mat(answer(1,1)));
551
if numberbadpoints>loopimages
552
numberbadpoints=loopimages
558
gridsizex=10*round(min(min(validx))/10):10:10*round(max(max(validx))/10);
559
gridsizey=10*round(min(min(validy))/10):10:10*round(max(max(validy))/10);
560
[XI,YI]=meshgrid(gridsizex,gridsizey);
561
ZI=griddata(validx(:,numberbadpoints),validy(:,numberbadpoints),displx(:,numberbadpoints),XI,YI,'cubic');
562
epsxx = gradient(ZI,10,10);
564
% find max and min point and point them out
565
mindisplx=find(displx(:,numberbadpoints)==min(displx(:,numberbadpoints)));
566
maxdisplx=find(displx(:,numberbadpoints)==max(displx(:,numberbadpoints)));
571
caxis([min(min(epsxx)) max(max(epsxx))])
575
plot3(validx(:,numberbadpoints),validy(:,numberbadpoints),displx(:,numberbadpoints)-min(displx(:,numberbadpoints)),'o','MarkerEdgeColor','k','MarkerFaceColor','g'), hold on;
576
plot3(validx(mindisplx,numberbadpoints),validy(mindisplx,numberbadpoints),displx(mindisplx,numberbadpoints)-min(displx(:,numberbadpoints)),'o','MarkerEdgeColor','y','MarkerFaceColor','b')
577
plot3(validx(maxdisplx,numberbadpoints),validy(maxdisplx,numberbadpoints),displx(maxdisplx,numberbadpoints)-min(displx(:,numberbadpoints)),'o','MarkerEdgeColor','y','MarkerFaceColor','r')
578
axis([min(min(XI))-10 max(max(XI))+10 min(min(YI))-10 max(max(YI))+10])
582
% get the bad point position
584
title(sprintf('Click on the bad point',counter))
585
[badpoint]=ginput(1);
586
badpointx = badpoint(1,1);
587
badpointy = badpoint(1,2);
589
% find the point matching the given position
590
wherethehellisthispoint=abs(validx(:,numberbadpoints)-badpoint(1,1))+abs(validy(:,numberbadpoints)-badpoint(1,2));
591
badpointnum=find(wherethehellisthispoint==min(wherethehellisthispoint));
593
% update temporary data matrices; delete bad points
595
displxtemp(badpointnum,:)=[];
596
validxtemp(badpointnum,:)=[];
597
validytemp(badpointnum,:)=[];
598
mindisplx=find(displxtemp(:,numberbadpoints)==min(displxtemp(:,numberbadpoints)));
599
maxdisplx=find(displxtemp(:,numberbadpoints)==max(displxtemp(:,numberbadpoints)));
602
ZI=griddata(validxtemp(:,numberbadpoints),validytemp(:,numberbadpoints),displxtemp(:,numberbadpoints),XI,YI,'cubic');
603
epsxx = gradient(ZI,10,10);
606
caxis([min(min(epsxx)) max(max(epsxx))])
610
plot3(validxtemp(:,numberbadpoints),validytemp(:,numberbadpoints),displxtemp(:,numberbadpoints),'o','MarkerEdgeColor','k','MarkerFaceColor','g')
611
plot3(validxtemp(mindisplx,numberbadpoints),validytemp(mindisplx,numberbadpoints),displxtemp(mindisplx,numberbadpoints)-min(displxtemp(:,numberbadpoints)),'o','MarkerEdgeColor','y','MarkerFaceColor','b')
612
plot3(validxtemp(maxdisplx,numberbadpoints),validytemp(maxdisplx,numberbadpoints),displxtemp(maxdisplx,numberbadpoints)-min(displxtemp(:,numberbadpoints)),'o','MarkerEdgeColor','y','MarkerFaceColor','r')
613
axis([min(min(XI))-10 max(max(XI))+10 min(min(YI))-10 max(max(YI))+10])
616
% delete point permanently?
617
selection3 = menu(sprintf('Do you want to delete this point permanently?'),'Yes','No');
622
% resnormx=resnormxtemp;
628
% resnormxtemp=resnormx;
630
selection2 = menu(sprintf('Do you want to mark another bad point?'),'Yes','No');
639
%---------------------------------
640
% Strain between two markers
642
function [validx, validy,displx,disply] = strain_1D_2Points_func(validx, validy,displx,disply) ; % 1D strain calculation
644
sizevalidx=size(validx);
645
looppoints=sizevalidx(1,1);
646
loopimages=sizevalidx(1,2)-1;
647
defaultimage=loopimages;
649
clear selection3; selection3=1;
659
sizevalidx=size(validx);
660
looppoints=sizevalidx(1,1);
661
loopimages=sizevalidx(1,2)-1;
663
% update temporary matrices
667
% resnormxtemp=resnormx;
669
% get the image number from which the bad points will be chosen
670
prompt = {'Which image do you want for point selection?'};
671
dlg_title = '1D Strain Plotting';
673
if numberbadpoints==0
674
defaultimage=loopimages;
677
defaultimage=numberbadpoints
679
def = {num2str(defaultimage)};
680
answer = inputdlg(prompt,dlg_title,num_lines,def);
681
numberbadpoints = str2num(cell2mat(answer(1,1)));
682
if numberbadpoints>loopimages
683
numberbadpoints=loopimages;
689
gridsizex=10*round(min(min(validx))/10):10:10*round(max(max(validx))/10);
690
gridsizey=10*round(min(min(validy))/10):10:10*round(max(max(validy))/10);
691
[XI,YI]=meshgrid(gridsizex,gridsizey);
692
ZI=griddata(validx(:,numberbadpoints),validy(:,numberbadpoints),displx(:,numberbadpoints),XI,YI,'cubic');
696
caxis([min(min(ZI)) max(max(ZI))])
700
plot3(validx(:,numberbadpoints),validy(:,numberbadpoints),abs(displx(:,numberbadpoints)),'o','MarkerEdgeColor','k','MarkerFaceColor','g');
701
axis([min(min(XI))-10 max(max(XI))+10 min(min(YI))-10 max(max(YI))+10])
704
% get the bad point position
706
title(sprintf('Click on the two points for strain measurement'))
707
[badpoint]=ginput(2);
708
badpointx = badpoint(1,1);
709
badpointy = badpoint(1,2);
710
badpointx2 = badpoint(2,1);
711
badpointy2 = badpoint(2,2);
713
% find the point matching the given position
714
wherethehellisthispoint=abs(validx(:,numberbadpoints)-badpoint(1,1))+abs(validy(:,numberbadpoints)-badpoint(1,2));
715
badpointnum=find(wherethehellisthispoint==min(wherethehellisthispoint));
716
wherethehellisthispoint2=abs(validx(:,numberbadpoints)-badpoint(2,1))+abs(validy(:,numberbadpoints)-badpoint(2,2));
717
badpointnum2=find(wherethehellisthispoint2==min(wherethehellisthispoint2));
721
ZI=griddata(validxtemp(:,numberbadpoints),validytemp(:,numberbadpoints),displxtemp(:,numberbadpoints),XI,YI,'cubic');
722
caxis([min(min(ZI)) max(max(ZI))])
723
plot3(validxtemp(badpointnum,numberbadpoints),validytemp(badpointnum,numberbadpoints),displxtemp(badpointnum,numberbadpoints),'+','MarkerEdgeColor','k','MarkerFaceColor','g')
724
plot3(validxtemp(badpointnum2,numberbadpoints),validytemp(badpointnum2,numberbadpoints),displxtemp(badpointnum2,numberbadpoints),'+','MarkerEdgeColor','k','MarkerFaceColor','r')
726
axis([min(min(XI))-10 max(max(XI))+10 min(min(YI))-10 max(max(YI))+10])
729
epsilon1D=(displxtemp(badpointnum,:)-displxtemp(badpointnum2,:))/(validxtemp(badpointnum,1)-validxtemp(badpointnum2,1));
730
epsilonsize=size(epsilon1D);
731
figure; plot(1:epsilonsize(1,2),epsilon1D,'.');
732
title(['True strain versus image from two picked points']);
733
xlabel('Image number [ ]');
734
ylabel('True Strain [ ]');
737
selection3 = menu(sprintf('Do you want to choose 2 other points?'),'Yes','No');
740
selection40 = menu(sprintf('Do you want to save the data as a text file?'),'Yes','No');
745
numimagtemp = [1:epsilonsize(1,2)]';
746
alltemp = [numimagtemp epsilon1D'];
747
[FileNameBase,PathNameBase] = uiputfile('','Save file with image# vs. 1Dstrain');
749
save(FileNameBase,'alltemp','-ASCII');
750
% save image_1Dstrain.txt alltemp -ASCII
756
%---------------------------------
757
% Measure elastic slope
759
function [validx, validy,displx,disply] = strain_1D_average_func(validx, validy,displx,disply) ; % 1D strain calculation
760
videoselection = menu(sprintf('Do you want to create a video?'),'Yes','No');
769
minminvalidx=min(min(validx));
770
maxmaxvalidx=max(max(validx));
771
minminvalidy=min(min(validy));
772
maxmaxvalidy=max(max(validy));
773
minmindisplx=min(min(displx));
774
maxmaxdisplx=max(max(displx));
778
[pointnumber imagenumber]=size(displx);
780
plot(validx_fit(:,i),displx_fit(:,i),'o');
781
xdata=validx_fit(:,i);
782
ydata=displx_fit(:,i);
787
[x,resnormx,residual,exitflagx,output] = lsqcurvefit(@linearfit, [x(1) x(2)], xdata, ydata);
789
ydatafit=x(1)*xdata+x(2);
790
plot(xdata,ydatafit,'r');
794
axis([minminvalidx maxmaxvalidx minmindisplx maxmaxdisplx])
795
xlabel('position [pixel]')
796
ylabel('displacement [pixel]')
797
title(['Displacement versus position',sprintf(' (Current image #: %1g)',i)]);
802
videoname=[Vid ustr '.jpg']
803
saveas(h,videoname,'jpg')
806
g1 = figure, plot(slope(:,1),slope(:,2));
808
plot(slope(:,1),slope(:,2),'.');
810
ylabel('True Strain [ ]')
811
title(['True Strain vs. Image #']);
813
selection40 = menu(sprintf('Do you want to save the data as file?'),'Yes','No');
818
alltemp = [slope(:,1) slope(:,2)];
819
[FileNameBase,PathNameBase] = uiputfile('','Save file with image# vs. 1Dstrain');
821
save(FileNameBase,'alltemp','-ASCII');
822
% save image_1Dstrain_avg.txt alltemp -ASCII
825
selection50 = menu(sprintf('Do you want to analyse a selected area again?'),'Yes','No');
833
plot(validx_fit(:,imagenumber),displx_fit(:,imagenumber),'o');
834
title(['True strain versus image from all markers']);
835
xlabel('Image number [ ]');
836
ylabel('True Strain [ ]');
837
prompt = {'Min. x-position:','Max. x-position:'};
838
dlg_title = 'Regime to be analyzed in pixels';
840
def = {'800','1200'};
841
answer = inputdlg(prompt,dlg_title,num_lines,def);
842
minx= str2num(cell2mat(answer(1,1)));
843
maxx= str2num(cell2mat(answer(2,1)));
847
selectedmarkers=find(validx(:,imagenumber)>minx & validx(:,imagenumber)<maxx);
848
validx_fit=validx(selectedmarkers,:);
849
displx_fit=displx(selectedmarkers,:);
856
%---------------------------------
859
function [validx, validy,displx,disply]=meshplot(validx,validy,displx,disply);
861
sizevalidx=size(validx);
862
sizevalidy=size(validy);
863
looppoints=sizevalidx(1,1);
864
loopimages=sizevalidx(1,2);
866
videoselection = menu(sprintf('Do you want to create a video?'),'Yes','No');
872
gridsizex=10*round(min(min(validx))/10):10:10*round(max(max(validx))/10);
873
gridsizey=10*round(min(min(validy))/10):10:10*round(max(max(validy))/10);
874
[XI,YI]=meshgrid(gridsizex,gridsizey);
875
minminvalidx=min(min(validx));
876
maxmaxvalidx=max(max(validx));
877
minminvalidy=min(min(validy));
878
maxmaxvalidy=max(max(validy));
879
minmindisplx=min(min(displx));
880
maxmaxdisplx=max(max(displx));
881
minmindisply=min(min(disply));
882
maxmaxdisply=max(max(disply));
883
for i=1:(loopimages-1)
884
ZI=griddata(validx(:,i),validy(:,i),displx(:,i),XI,YI,'cubic');
885
mesh(XI,YI,ZI); hold on
886
bottomplot=ones(size(validx))*minmindisplx;
887
backyplaneplot=ones(size(validx))*maxmaxvalidy;
888
backxplaneplot=ones(size(validx))*minminvalidx;
889
plot3(validx(:,i),validy(:,i),displx(:,i),'.b');
890
% plot3(validx(:,i),backyplaneplot(:,i),displx(:,i),'.');
891
plot3(backxplaneplot(:,i),validy(:,i),displx(:,i),'.g');
892
xlabel('x-position [pixel]')
893
ylabel('y-position [pixel]')
894
zlabel('displacement [pixel]')
895
% plot3(validx(:,i),validy(:,i),bottomplot(:,i),'.');
897
title(['Displacement versus x-y-position',sprintf(' (Current image #: %1g)',i)]);
898
axis([minminvalidx maxmaxvalidx minminvalidy maxmaxvalidy minmindisplx maxmaxdisplx])
903
videoname=[Vid ustr '.jpg']
904
saveas(h,videoname,'jpg')
912
%-------------------------------
914
% written by Dan slightly changed by Chris
915
function [validx, validy,displx,disply]=polyfit3D(validx, validy,displx,disply);
917
plot3dsurface_func(validx,validy,displx);
919
%---------------------------------------
921
% written by Dan slightly changed by Chris
922
function plot3dsurface_func(validx,validy,displx,gridstyle,cropxx,cropyy)
924
sizevalidx=size(validx);
925
looppoints=sizevalidx(1,1);
926
loopimages=sizevalidx(1,2);
927
gridsizex=10*round(min(min(validx))/10):10:10*round(max(max(validx))/10);
928
gridsizey=10*round(min(min(validy))/10):10:10*round(max(max(validy))/10);
929
[XI,YI]=meshgrid(gridsizex,gridsizey);
930
ZI=griddata(validx(:,1),validy(:,1),displx(:,1),XI,YI,'cubic');
933
straincolor = [-0.005 0.03];
935
maxminusminvalidx=(max(max(validx))-min(min(validx)));
936
maxminusminvalidy=(max(max(validx))-min(min(validy)));
938
for i=1:(loopimages-1)
940
ZI=griddata(validx(:,i),validy(:,i),displx(:,i),XI,YI,'cubic');
942
epsxx = gradient(ZI,(maxminusminvalidx/ZIsize(1,1)),(maxminusminvalidy/ZIsize(1,2)));
950
set(h1, 'PlotBoxAspectRatio',[2.0 10 8.0])
951
set(h1, 'FontSize', 12);
952
title(['Raw Displacement in x-direction',sprintf(' (Current image #: %1g)',i)]);
960
set(h1, 'PlotBoxAspectRatio',[2.0 10 8.0])
961
set(h1, 'FontSize', 12);
962
title('Raw Strain in x-direction');
968
%--------------------------------------
969
% Delete some markers
971
function [validx,validy] = removepoints_func2(validx,validy) ; %delete points
973
if exist('validx')==0
974
[validx,Pathvalidx] = uigetfile('*.mat; *.txt','Open validx.mat or validx.txt');
976
validx=importdata(validx,'\t');
977
[validy,Pathvalidy] = uigetfile('*.mat;*.txt','Open validy.mat or validy.txt');
979
validy=importdata(validy,'\t');
983
selectremove1 = menu(sprintf('Do you want to delete makers?'),'Yes','No');
991
selectionremove2=selectremove1;
994
sizevalidx=size(validx);
995
looppoints=sizevalidx(1,1);
996
loopimages=sizevalidx(1,2);
997
defaultimage=loopimages
1000
while selectionremove2==1
1004
clear selectremove11
1008
sizevalidx=size(validx);
1009
looppoints=sizevalidx(1,1);
1010
loopimages=sizevalidx(1,2);
1012
% update temporary matrices
1013
% displxtemp=displx;
1016
% resnormxtemp=resnormx;
1018
% get the image number from which the bad points will be chosen
1019
prompt = {'From which image do you want to delete markers?'};
1020
dlg_title = 'Marker removal';
1022
if numberbadpoints==0
1023
defaultimage=loopimages
1025
if numberbadpoints~0
1026
defaultimage=numberbadpoints
1028
def = {num2str(defaultimage)};
1029
answer = inputdlg(prompt,dlg_title,num_lines,def);
1030
numberbadpoints = str2num(cell2mat(answer(1,1)));
1031
if numberbadpoints>loopimages
1032
numberbadpoints=loopimages
1034
if numberbadpoints<1
1038
displx(:,1)=-validx(:,1)+validx(:,numberbadpoints);
1039
displx(:,1)=displx(:,1)-min(displx(:,1));
1041
gridsizex=10*round(min(min(validx))/10):10:10*round(max(max(validx))/10);
1042
gridsizey=10*round(min(min(validy))/10):10:10*round(max(max(validy))/10);
1043
[XI,YI]=meshgrid(gridsizex,gridsizey);
1044
ZI=griddata(validx(:,numberbadpoints),validy(:,numberbadpoints),displx(:,1),XI,YI,'cubic');
1045
epsxx = gradient(ZI,10,10);
1047
pcolor(XI,YI,epsxx);
1049
caxis([min(min(epsxx)) max(max(epsxx))])
1053
plot3(validx(:,numberbadpoints),validy(:,numberbadpoints),displx(:,1),'.','MarkerEdgeColor','k','MarkerFaceColor','g'), hold off;
1054
axis([min(min(XI))-10 max(max(XI))+10 min(min(YI))-10 max(max(YI))+10])
1060
validxdelete=validxtemp;
1061
validydelete=validytemp;
1062
displxdelete=displxtemp;
1064
title(sprintf('Define the region of interest. \n All points ouside that region will be deleted'))
1066
[xgrid,ygrid]=ginput(2);
1072
deletepoints=find(validxdelete(:,numberbadpoints)>min(x) & validxdelete(:,numberbadpoints)<max(x) & validydelete(:,numberbadpoints)<max(y) & validydelete(:,numberbadpoints)>min(y));
1073
[loopnum one]=size(deletepoints);
1075
validxdelete(deletepoints,:)=[];
1076
validydelete(deletepoints,:)=[];
1078
plot3(validxtemp(:,numberbadpoints),validytemp(:,numberbadpoints),displxtemp(:,1),'o','MarkerEdgeColor','k','MarkerFaceColor','g'), hold off;
1080
% update temporary data matrices; delete bad points
1081
displxtemp(deletepoints,:)=[];
1082
validxtemp(deletepoints,:)=[];
1083
validytemp(deletepoints,:)=[];
1086
gridsizex=10*round(min(min(validxtemp))/10):10:10*round(max(max(validxtemp))/10);
1087
gridsizey=10*round(min(min(validytemp))/10):10:10*round(max(max(validytemp))/10);
1088
[XI,YI]=meshgrid(gridsizex,gridsizey);
1089
ZI=griddata(validxtemp(:,numberbadpoints),validytemp(:,numberbadpoints),displxtemp(:,1),XI,YI,'cubic');
1090
epsxx = gradient(ZI,10,10);
1091
pcolor(XI,YI,epsxx);
1093
caxis([min(min(epsxx)) max(max(epsxx))])
1097
plot3(validxtemp(:,numberbadpoints),validytemp(:,numberbadpoints),displxtemp(:,1),'o','MarkerEdgeColor','k','MarkerFaceColor','g'), hold off;
1098
axis([min(min(XI))-10 max(max(XI))+10 min(min(YI))-10 max(max(YI))+10])
1101
% delete point permanently?
1102
selectremove3 = menu(sprintf('Do you want to delete these markers permanently?'),'Yes','No');
1113
selectremove2 = menu(sprintf('Do you want to mark another bad point?'),'Yes','No');
1116
validxfirst=zeros(size(validx));
1117
validxfirst=validx(:,1)*ones(1,sizevalidx(1,2));
1118
displx=validx-validxfirst;
b'\\ No newline at end of file'