Skip to content
Snippets Groups Projects
Commit 9b3d67e8 authored by Mark Winter's avatar Mark Winter Committed by Mark Winter
Browse files

Various fixes and improvements to matlab scripts

parent 11dd0220
Branches
No related tags found
No related merge requests found
%inputroot = 'C:\Users\mwinter\Documents\MATLAB\KymoTrackingData\Movies';
%outputroot = 'C:\Users\mwinter\Documents\MATLAB\KymoTrackingResults';
inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\ssNPY';
%inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\ssNPY';
%outputroot = fullfile(inputroot, 'OutputTrackingResults');
inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\BDNF';
outputroot = fullfile(inputroot, 'OutputTrackingResults');
if ( ~exist('movielist', 'var') )
if ( exist(fullfile(inputroot, 'movielist.mat'), 'file') )
load(fullfile(inputroot, 'movielist.mat'));
else
movielist = Make43MovieList(inputroot);
movielist = MakeBDNFMovieList(inputroot);
end
end
......@@ -27,13 +29,46 @@ ps = {};
ds = {};
ts = {};
j=1;
for i=startidx:endidx
alpha = 0.0;
bNameWithAlpha = 0;
if ( ~exist(fullfile(outputroot,[movielist(i).root movielist(i).cellname '.mat']),'file') )
for alpha=0.05:0.01:2.0
if ( exist(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '.mat']),'file') )
bNameWithAlpha = 1;
break;
end
end
if ( ~bNameWithAlpha )
continue;
end
end
if ( bNameWithAlpha )
load(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '.mat']));
else
load(fullfile(outputroot,[movielist(i).root movielist(i).cellname '.mat']));
outdatname = [movielist(i).root movielist(i).cellname '_tracks.txt'];
dbgdatname = [movielist(i).root movielist(i).cellname '_dbginfo.txt'];
segdatname = [movielist(i).root movielist(i).cellname '_seg.dat'];
mbdatname = [movielist(i).root movielist(i).cellname '_mb.dat'];
alpha = trackingStruct.alpha;
system(['copy "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '.mat']) '" "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '.mat']) '"']);
delete(fullfile(outputroot,[movielist(i).root movielist(i).cellname '.mat']));
system(['copy "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_tracks.txt']) '" "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_tracks.txt']) '"']);
delete(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_tracks.txt']));
system(['copy "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_dbginfo.txt']) '" "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_dbginfo.txt']) '"']);
delete(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_dbginfo.txt']));
system(['copy "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_seg.dat']) '" "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_seg.dat']) '"']);
delete(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_seg.dat']));
system(['copy "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_mb.dat']) '" "' fullfile(outputroot,[movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_mb.dat']) '"']);
delete(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_mb.dat']));
end
outdatname = [movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_tracks.txt'];
dbgdatname = [movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_dbginfo.txt'];
segdatname = [movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_seg.dat'];
mbdatname = [movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_mb.dat'];
trackingStruct.fullname = [movielist(i).root movielist(i).cellname];
......@@ -43,15 +78,19 @@ for i=startidx:endidx
trackingStruct = readConnectData(trackingStruct, fullfile(outputroot,outdatname), fullfile(outputroot,dbgdatname));
trackingStruct.umppix = 0.18;
trackingStruct.spfrm = 0.575;
trackingStruct.spfrm = 0.650;
plotConnect(trackingStruct,5,5);
%axis([0 (numframes-1)*trackingStruct.spfrm 0 kymoArcLength*trackingStruct.umppix]);
print('-dtiff','-r300',['Z:\Prints\' movielist(i).root movielist(i).cellname '_interestingtracks.tiff']);
print('-dtiff','-r300',['Z:\Prints\allbdnf\' movielist(i).root movielist(i).cellname '_a' mkalphastr(alpha) '_interestingtracks.tiff']);
close all;
[stats{i,1} vs{i,1} ps{i,1} ds{i,1} ts{i,1} vtrkidx{i,1}] = GenerateStats(trackingStruct);
names{i,1} = [movielist(i).root movielist(i).cellname];
[stats{j,1} vs{j,1} ps{j,1} ds{j,1} ts{j,1} vtrkidx{j,1}] = GenerateStats(trackingStruct);
names{j,1} = [movielist(i).root movielist(i).cellname];
dsetnum(j,1) = movielist(i).datasetnum;
dsetmap(j,1) = i;
j=j+1;
end
\ No newline at end of file
......@@ -78,6 +78,7 @@ for t=1: NFRAMES
%
level=alpha*graythresh(im(bwd));
level = min(level,0.95);
bwi=im2bw(im,level);
bwi(~bw)=0;
......@@ -115,6 +116,7 @@ for t=1: NFRAMES
% end
% plot maxima
j = 1;
rcPKS{t} = [];
for n=1:num
[r c]=find(L==n);
if length(r)>10,ccc='.m';
......@@ -179,7 +181,7 @@ if ( ~bCheckMotionBlur )
end
lenpix = size(imKymo,1);
if ( (totalDetections / (lenpix*120)) > 0.3 )
if ( (totalDetections / (lenpix*NFRAMES)) > 0.20 )
disp(['Too many detections ' inResultStruct.moviename]);
rgDetect = [];
rgMotionBlur = [];
......
inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\BDNF';
outputroot = fullfile(inputroot, 'OutputTrackingResults');
%inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\BDNF';
%outputroot = fullfile(inputroot, 'OutputTrackingResults');
%inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\ssNPY';
%outputroot = fullfile(inputroot, 'OutputTrackingResults');
inputroot = 'C:\Users\mwinter\Documents\Data\OHSU\newbdnf';
outputroot = fullfile(inputroot, 'OutputTrackingResults');
if ( ~exist(outputroot, 'dir') )
mkdir(outputroot);
......@@ -11,7 +13,8 @@ if ( ~exist('movielist', 'var') )
if ( exist(fullfile(inputroot, 'movielist.mat'), 'file') )
load(fullfile(inputroot, 'movielist.mat'));
else
movielist = Make43MovieList(inputroot);
movielist = MakeBDNFMovieList(inputroot);
save(fullfile(inputroot, 'movielist.mat'), 'movielist');
end
end
......@@ -49,6 +52,7 @@ end
disp(['Start time: ' datestr(clock())]);
goodsegs = [];
for i=startidx:endidx
trackingStruct.moviepath = movielist(i).moviepath;
......@@ -71,26 +75,29 @@ for i=startidx:endidx
trackingStruct.trackList = [];
trackingStruct.tracerange = tracelist{i};
if ( exist(fullfile(outputroot, [trackingStruct.fullname '.mat']), 'file') )
%for tryalpha = 0.4:0.3:1.6
if ( exist(fullfile(outputroot, [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '.mat']), 'file') )
continue;
end
%[rgDetect, rgMotionBlur, imKymo, LKymo, iPath, jPath] = GoSegmentIt(mvlist(i).movieroot, mvlist(i).moviename, mvlist(i).tracefilename, mvlist(i).kymofilename, alphalist(i), exthlist(i));
%trackingStruct.alpha = tryalpha;
trackingStruct = GoSegmentIt(trackingStruct, movielist(i).tracefilename, movielist(i).kymofilename);
if ( isempty(trackingStruct.rgDetect) )
disp(['Error segmenting ' movielist(i).root movielist(i).cellname]);
disp(['Error segmenting ' movielist(i).root movielist(i).cellname ' with alpha=' num2str(trackingStruct.alpha)]);
continue;
end
outdatname = [trackingStruct.fullname '_tracks.txt'];
dbgdatname = [trackingStruct.fullname '_dbginfo.txt'];
segdatname = [trackingStruct.fullname '_seg.dat'];
mbdatname = [trackingStruct.fullname '_mb.dat'];
goodsegs(end+1,:) = [i trackingStruct.alpha];
outdatname = [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '_tracks.txt'];
dbgdatname = [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '_dbginfo.txt'];
segdatname = [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '_seg.dat'];
mbdatname = [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '_mb.dat'];
trackingStruct.outdatname = outdatname;
trackingStruct.dbgdatname = dbgdatname;
results(i) = trackingStruct;
save(fullfile(outputroot, [trackingStruct.fullname '.mat']), 'trackingStruct');
save(fullfile(outputroot, [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '.mat']), 'trackingStruct');
writeSegData(fullfile(outputroot, segdatname), results(i).rgDetect, results(i).rgCC);
%writeTraceData([outdatname '_trace.dat'], [jPath';iPath']);
......@@ -101,36 +108,43 @@ for i=startidx:endidx
system(['C:\Users\mwinter\Documents\Projects\KymoTracker_v2\Release\KymoTracker_v2.exe "' fullfile(outputroot, segdatname) '" "' fullfile(outputroot, mbdatname) '" "' fullfile(outputroot, outdatname) '" "' fullfile(outputroot, dbgdatname) '" &']);
end
disp(['Finished ' trackingStruct.fullname ': ' datestr(clock())]);
%end
end
lastidx = startidx;
for i=startidx:endidx
if ( exist(fullfile(outputroot, [movielist(i).root movielist(i).cellname '.mat']), 'file') )
lastidx = i;
end
end
lastidx = goodsegs(end,1);
lastalpha = goodsegs(end,2);
while ( ~exist(fullfile(outputroot, [movielist(lastidx).root movielist(lastidx).cellname '_tracks.txt']), 'file')...
|| ~exist(fullfile(outputroot,[movielist(lastidx).root movielist(lastidx).cellname '_dbginfo.txt']), 'file') )
while ( ~exist(fullfile(outputroot, [movielist(lastidx).root movielist(lastidx).cellname '_a' mkalphastr(trackingStruct.alpha) '_tracks.txt']), 'file')...
|| ~exist(fullfile(outputroot,[movielist(lastidx).root movielist(lastidx).cellname '_a' mkalphastr(trackingStruct.alpha) '_dbginfo.txt']), 'file') )
pause(30);
end
close all;
for i=startidx:endidx
while ( ~exist(fullfile(outputroot, [movielist(i).root movielist(i).cellname '_tracks.txt']), 'file')...
|| ~exist(fullfile(outputroot,[movielist(i).root movielist(i).cellname '_dbginfo.txt']), 'file') )
pause(30);
if ( ~exist(fullfile(outputroot,'Prints'), 'dir') )
mkdir(fullfile(outputroot,'Prints'));
end
for i=1:size(goodsegs,1)
mvidx = goodsegs(i,1);
alpha = goodsegs(i,2);
if ( ~exist(fullfile(outputroot, [movielist(mvidx).root movielist(mvidx).cellname '_a' mkalphastr(alpha) '_tracks.txt']), 'file')...
|| ~exist(fullfile(outputroot,[movielist(mvidx).root movielist(mvidx).cellname '_a' mkalphastr(alpha) '_dbginfo.txt']), 'file') )
continue;
end
outdatname = [movielist(i).root movielist(i).cellname '_tracks.txt'];
dbgdatname = [movielist(i).root movielist(i).cellname '_dbginfo.txt'];
load(fullfile(outputroot, [movielist(i).root movielist(i).cellname '.mat']));
outdatname = [movielist(mvidx).root movielist(mvidx).cellname '_a' mkalphastr(alpha) '_tracks.txt'];
dbgdatname = [movielist(mvidx).root movielist(mvidx).cellname '_a' mkalphastr(alpha) '_dbginfo.txt'];
load(fullfile(outputroot, [movielist(mvidx).root movielist(mvidx).cellname '_a' mkalphastr(alpha) '.mat']));
trackingStruct = readConnectData(trackingStruct, fullfile(outputroot, outdatname), fullfile(outputroot, dbgdatname));
save(fullfile(outputroot, [trackingStruct.fullname '.mat']), 'trackingStruct');
save(fullfile(outputroot, [trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '.mat']), 'trackingStruct');
try
plotConnect(trackingStruct,5);
print('-r300', '-dtiffn', ['Z:\Prints\' trackingStruct.fullname '_tracks.tiff']);
print('-r300', '-dtiffn', [fullfile(outputroot,'Prints') filesep trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '_tracks.tiff']);
catch(me)
disp(['Problem plotting: ' fullfile(outputroot,'Prints') filesep trackingStruct.fullname '_a' mkalphastr(trackingStruct.alpha) '_tracks.tiff']);
disp([' :' me.message]);
end
close all;
end
......
......@@ -46,11 +46,11 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
imfig = figure();
kymofig = figure();
bFlipKymo = (trackingStruct.iPath(end) - trackingStruct.iPath(1)) < 0;
bFlipKymo = (trackingStruct.iPath(end) - trackingStruct.iPath(1)) > 0;
movfile = [];
try
movfile = avifile(fname, 'Compression','None', 'fps',fps);
%movfile = avifile(fname, 'Compression','None', 'fps',fps);
for t=1:N
kymoFrame = drawKymo();
......@@ -59,7 +59,7 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
fullFrame = kymoFrame;
fullFrame.cdata = [kymoFrame.cdata imFrame.cdata];
movfile = addframe(movfile,fullFrame);
%movfile = addframe(movfile,fullFrame);
end
catch excp
......@@ -69,7 +69,7 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
rethrow (excp);
end
movfile = close(movfile);
%movfile = close(movfile);
function frm = drawKymo()
......@@ -78,7 +78,7 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
if ( bFlipKymo )
kymoimg = kymoimg(end:-1:1,:);
end
imagesc(kymoimg);colormap(gray);hold on;
imagesc(kymoimg);colormap(gray);axis xy;hold on;
for i=1:length(fullTrackList)
if ( any(i == selectTracks) )
continue;
......@@ -91,7 +91,8 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
continue;
end
plotidx = find(trkt <= t);
%plotidx = find(trkt <= t);
plotidx = 1:length(trkt);
if ( length(plotidx) < 2 )
continue
......@@ -109,9 +110,10 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
trkt = trackingStruct.globNodeLUT(fullTrackList{selectTracks(i)},1)';
trkidx = trackingStruct.globNodeLUT(fullTrackList{selectTracks(i)},2)';
plotidx = find(trkt <= t);
%plotidx = find(trkt <= t);
plotidx = 1:length(trkt);
if ( isempty(plotidx) )
if ( length(plotidx) < 2 )
continue
end
......@@ -121,12 +123,20 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
end
%plot(trkt(1), trkpts(1), 'o', 'Color', trackColors(i,:));
plot(trkt(plotidx), trkpts(plotidx), 'Color', [1 0 0], 'LineWidth',2, 'LineStyle','-');
plot(trkt(plotidx(end)), trkpts(plotidx(end)), 'or', 'LineWidth',2);
markeridx = find(trkt == t,1);
if ( isempty(markeridx) )
if ( t < trkt(1) )
markeridx = plotidx(1);
else
markeridx = plotidx(end);
end
end
plot(trkt(markeridx), trkpts(markeridx), 'or', 'LineWidth',2);
text(trkt(plotidx(end))-3, trkpts(plotidx(end)), [num2str(selectTracks(i)) ' \rightarrow'], 'HorizontalAlign','Right', 'FontSize',8, 'Color', [1 0 0]);
%text(trkt(plotidx(end))-3, trkpts(plotidx(end)), [num2str(selectTracks(i)) ' \rightarrow'], 'HorizontalAlign','Right', 'FontSize',8, 'Color', [1 0 0]);
end
plot([t t], [1 size(trackingStruct.imKymo,1)], '-r', 'LineWidth',2);
%plot([t t], [1 size(trackingStruct.imKymo,1)], '-r', 'LineWidth',2);
hold off;
drawnow;
......@@ -197,8 +207,8 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
bwbound = bwboundaries(bwim);
plot(bwbound{1}(:,2),bwbound{1}(:,1), 'Color',[1 0 0], 'LineStyle','-');
n2 = length(trkt)/2;
if ( trackingStruct.jPath(round(trkpts(n2))) < trackingStruct.rgDetect{t}(trkidx(n2),2) )
n2 = round(length(trkt)/2);
if ( trackingStruct.jPath(trkpts(n2)) < trackingStruct.rgDetect{trkt(n2)}(trkidx(n2),2) )
text(x+5,y,['\leftarrow ' num2str(selectTracks(i))], 'FontSize',10, 'HorizontalAlignment','Left', 'Color',[1 0 0]);
else
text(x-5,y,[num2str(selectTracks(i)) ' \rightarrow'], 'FontSize',10, 'HorizontalAlignment','Right', 'Color',[1 0 0]);
......@@ -213,6 +223,17 @@ function makeTrackingMovie(trackingStruct, fname, fps, selectTracks, minlength)
hold off;
drawnow;
scllength = 10;
%upp = 0.18;
if ( ~isfield(trackingStruct,'umppix') )
trackingStruct.umppix = 0.18;
end
while ( scllength/trackingStruct.umppix > (0.5*(tracemax(1)-tracemin(1))) )
scllength = scllength / 10;
end
posx = min(tracemax(1)-(0.5*scllength/trackingStruct.umppix + 1),0.45*(tracemax(1)-tracemin(1))+tracemin(1));
plot_scale([posx,0.55*(tracemax(2)-tracemin(2))+tracemin(2)], trackingStruct.umppix, scllength, 'r', 'um', 'h');
truesize(imfig, imsize);
frm = getframe(gca);
end
......
......@@ -18,6 +18,13 @@ function plotConnect(inStruct, minlength, mintravel)
branchPaths = [];
highlightedBranch = [];
if ( ~isfield(inStruct,'umppix') )
inStruct.umppix = 0.18;
end
if ( ~isfield(inStruct,'spfrm') )
inStruct.spfrm = 0.575;
end
figure
[rgbKymo rgbmap] = gray2ind(inStruct.imKymo, 255);
hold off;imagesc(ind2rgb(rgbKymo, rgbmap));
......@@ -36,9 +43,13 @@ function plotConnect(inStruct, minlength, mintravel)
trkt = inStruct.globNodeLUT(inStruct.trackList{i},1)';
trkidx = inStruct.globNodeLUT(inStruct.trackList{i},2)';
if ( length(trkt) <= minlength )
continue;
end
lengthTraveled = norm(inStruct.rgDetect{trkt(end)}(trkidx(end),1:2) - inStruct.rgDetect{trkt(1)}(trkidx(1),1:2)) * inStruct.umppix;
if ( length(trkt) <= minlength || lengthTraveled < mintravel )
if ( lengthTraveled < mintravel )
continue;
end
......
function [dist, dtst] = plotVoronoi(trackingStruct, dist, dtst)
iminfo = imfinfo(fullfile(trackingStruct.moviepath, trackingStruct.moviename));
immin = [-70 1];
immax = [iminfo(1).Height iminfo(1).Width];
gridx = immin(2):immax(2);
gridy = immin(1):immax(1);
[X,Y] = meshgrid(gridx, gridy);
path = [trackingStruct.jPath';trackingStruct.iPath'];
if ( ~exist('dist','var') || ~exist('dtst','var') )
[dist dtst] = distToPath(X,Y,path);
end
figure;
imagesc(gridx, gridy, label2rgb(dtst));
axis ij;
hold on;
plot(path(1,:)', path(2,:)', '-k');
hold off;
[XI,YI] = meshgrid((immin(2)*2:immax(2)*2)/2, (immin(1)*2:immax(1)*2)/2);
smoothdist = interp2(X,Y,dist,XI,YI);
[gradx,grady] = gradient(smoothdist,(immin(2)*2:immax(2)*2)/2,(immin(1)*2:immax(1)*2)/2);
N = 70;
NC = 1;
gridcolor = [0.75 0.75 0.75];
figure;
rdtst = dtst;
rdtst(dist>8) = 0;
%imagesc(gridx, gridy, label2rgb(rdtst));
imagesc(gridx, gridy, label2rgb(dtst));
%imagesc(gridx, gridy, dist);
hold on;
[C, hgrid] = contour(XI,YI,smoothdist, 10, 'b');
set(hgrid, 'Color', gridcolor);
%axis ij;
hold on;
endidx = 0;
for i=1:NC
nextidx = endidx + 1;
startidx = nextidx + 1;
endidx = C(2,nextidx) + nextidx;
end
cpts = C(:,startidx:endidx);
cvec = diff(cpts,1,2);
clens = sqrt((cvec(1,:).^2) + (cvec(2,:).^2));
cunit = cvec ./ (ones(2,1)*clens);
totallens = [0 cumsum(clens)];
inclen = totallens(end) / N;
streampts = [];
for i=1:N
curlength = (i-1)*inclen;
idx = find(totallens <= curlength,1,'last');
lninc = curlength - totallens(idx);
lnpt = cpts(:,idx) + lninc*cunit(:,idx);
streampts(:,i) = lnpt;
end
hgrid = streamline(stream2(XI,YI,-gradx,-grady,streampts(1,:),streampts(2,:)));
set(hgrid, 'Color', gridcolor);
hgrid = streamline(stream2(XI,YI,gradx,grady,streampts(1,:),streampts(2,:)));
set(hgrid, 'Color', gridcolor);
plot(path(1,:)', path(2,:)', '-k', 'LineWidth',2);
hold off;
end
\ No newline at end of file
function scrollTrackingFigure(trackingStruct, minlength)
if ( ~exist('minlength','var'))
minlength = 0;
end
fullTrackList = BuildFullTrackList(trackingStruct);
numtracks = length(fullTrackList);
cmap = [winter(512); summer(512)];
trackColors = cmap(round(rand(length(fullTrackList),1)*1023)+1,:);
iminfo = imfinfo(fullfile(trackingStruct.moviepath, trackingStruct.moviename));
kymoinfo = imfinfo(fullfile(trackingStruct.moviepath, trackingStruct.moviename));
N = length(iminfo);
istat=[]; stats=[0 Inf];
for t=1: N
im=(imread(fullfile(trackingStruct.moviepath, trackingStruct.moviename),t));
if max(im(:))<stats(2)
stats(2)=max(im(:));
end
if min(im(:))>stats(1)
stats(1)= min(im(:));
end
end
% 1. Trace Line
% 2. Trace Normals
% 3. Peaks
% 4. Connected Components
% 5. Connected Component Outlines(track colored)
% 6. Peaks(track colored)
% 7. Track Labels
bOverlays = boolean(zeros(7,1));
bOverlays(1) = 1;
bOldOverlays = [];
mvfig = figure();
clf(mvfig,'reset');
set(mvfig, 'WindowScrollWheelFcn', @scrollWheelCallback);
set(mvfig, 'KeyPressFcn', @keyPressFunction);
trace = [trackingStruct.jPath';trackingStruct.iPath'];
[tracemin, tracemax] = getTrackExtents(trackingStruct, N);
imsize = [iminfo(1).Height, iminfo(1).Width];
im = zeros(imsize);
imwght = (1.6)*mkHCAxon(im, trace, 1.0, 5) + 0.4;
%imwght = ones(size(im));
t = 1;
dispImage();
dispOverlays();
function dispImage(curxlim, curylim)
if ( ~exist('curxlim','var') || ~exist('curylim', 'var') )
curxlim = [1 imsize(2)];
curylim = [1 imsize(1)];
end
im=imread(fullfile(trackingStruct.moviepath, trackingStruct.moviename),t);
%im(im<stats(1))=stats(1);
im(im>stats(2))=stats(2);
im=mat2gray(im);
hold off;imagesc(im.*imwght);colormap(gray);hold on
%axis equal;
title(num2str(t));
xlim(curxlim);
ylim(curylim);
end
function dispOverlays(curxlim, curylim)
if ( ~exist('curxlim','var') || ~exist('curylim', 'var') )
curxlim = [1 imsize(2)];
curylim = [1 imsize(1)];
end
% 1. Plot scale bar
if ( bOverlays(1) )
scllength = 10;
%upp = 0.18;
if ( ~isfield(trackingStruct,'umppix') )
trackingStruct.umppix = 0.18;
end
while ( scllength/trackingStruct.umppix > (0.5*(curxlim(2)-curxlim(1))) )
scllength = scllength / 10;
end
posx = min(curxlim(2)-(0.5*scllength/trackingStruct.umppix + 1),0.9*(curxlim(2)-curxlim(1))+curxlim(1));
plot_scale([posx,0.9*(curylim(2)-curylim(1))+curylim(1)], trackingStruct.umppix, scllength, 'r', 'um', 'h');
end
% 1. Trace Line
if ( bOverlays(1) )
plot(trace(1,:),trace(2,:),'b')
end
% 2. Trace Normals
if ( bOverlays(2) )
nrmextent = 8;
ctrnrms = diff(trace,1,2);
lengths = sqrt((ctrnrms(1,:).^2) + (ctrnrms(2,:).^2));
ctrnrms = [-ctrnrms(2,:); ctrnrms(1,:)]./(ones(2,1)*lengths);
ptnrms = [ctrnrms(:,1) (ctrnrms(:,2:end) + ctrnrms(:,1:end-1))/2 ctrnrms(:,end)];
plot([trace(1,:)-nrmextent*ptnrms(1,:);trace(1,:)+nrmextent*ptnrms(1,:)],[trace(2,:)-nrmextent*ptnrms(2,:);trace(2,:)+nrmextent*ptnrms(2,:)], '-y');
end
% 4. Connected Components
if ( bOverlays(4) )
% for k=1:length(trackingStruct.rgCC{t})
% plot(trackingStruct.rgCC{t}{k}(:,2),trackingStruct.rgCC{t}{k}(:,1), '.g');
% end
end
% 3. Peaks
if ( bOverlays(3) )
r= trackingStruct.rgDetect{t}(:,1);
c= trackingStruct.rgDetect{t}(:,2);
plot(c,r,'.r');
end
for k=1:length(fullTrackList)
trkt = trackingStruct.globNodeLUT(fullTrackList{k},1)';
trkidx = trackingStruct.globNodeLUT(fullTrackList{k},2)';
if ( length(trkt) <= minlength )
continue;
end
trkpts = GetKymoPt(trackingStruct.rgDetect, trkidx', trkt', trackingStruct.LKymo, [trackingStruct.jPath';trackingStruct.iPath']);
umppix = 0.18;
lengthTraveled = norm(trackingStruct.rgDetect{trkt(end)}(trkidx(end),1:2) - trackingStruct.rgDetect{trkt(1)}(trkidx(1),1:2)) * umppix;
% if ( lengthTraveled <= 5 )
% continue;
% end
idx = find(trkt==t);
if ( ~isempty(idx) )
x=trackingStruct.rgDetect{t}(trkidx(idx),2);
y=trackingStruct.rgDetect{t}(trkidx(idx),1);
% 4. Connected Components
if ( bOverlays(4) )
plot(trackingStruct.rgCC{t}{trkidx(idx)}(:,2),trackingStruct.rgCC{t}{trkidx(idx)}(:,1), '.', 'Color',trackColors(k,:));
end
% 5. Connected Component Outlines(track colored)
if ( bOverlays(5) )
bwim = zeros(size(im));
r = trackingStruct.rgCC{t}{trkidx(idx)}(:,1);
c = trackingStruct.rgCC{t}{trkidx(idx)}(:,2);
linidx = sub2ind(size(bwim), r,c);
bwim(linidx) = 1;
bwbound = bwboundaries(bwim);
plot(bwbound{1}(:,2),bwbound{1}(:,1), 'Color',trackColors(k,:), 'LineStyle','-');
end
% 6. Peaks(track colored)
if ( bOverlays(6) )
plot(x,y,'o','color',trackColors(k,:));
plot(x,y,'.r');
end
% 7. Track Labels
if ( bOverlays(7) )
textoffset = 2;
n2 = round(length(trkt)/2);
if ( trackingStruct.jPath(trkpts(n2)) < trackingStruct.rgDetect{trkt(n2)}(trkidx(n2),2) )
text(x+textoffset,y, ['\leftarrow ' num2str(k)], 'FontSize',10, 'HorizontalAlignment','Left', 'Color','w', 'BackgroundColor',trackColors(k,:));
else
text(x-textoffset,y, [num2str(k) ' \rightarrow'], 'FontSize',10, 'HorizontalAlignment','Right', 'Color','w', 'BackgroundColor',trackColors(k,:));
end
end
end
end
end
function scrollWheelCallback(src, evt)
if ( evt.VerticalScrollCount < 0 )
t = t - 1;
else
t = t + 1;
end
if ( t > N-1 )
t = N-1;
elseif ( t < 1 )
t = 1;
end
curxlim = xlim;
curylim = ylim;
dispImage(curxlim, curylim);
dispOverlays(curxlim, curylim);
end
function keyPressFunction(src, evt)
key = str2num(evt.Key);
if ( ~isempty(key) )
if ( key <= 0 )
key = 10;
end
if ( key <= length(bOverlays) )
if ( ~isempty(bOldOverlays) )
bOverlays = bOldOverlays;
end
bOverlays(key) = ~bOverlays(key);
curxlim = xlim;
curylim = ylim;
dispImage(curxlim, curylim);
dispOverlays(curxlim, curylim);
end
elseif ( evt.Key == 't' )
if ( isempty(bOldOverlays) )
bOldOverlays = bOverlays;
bOverlays(2:end) = 0;
else
bOverlays = bOldOverlays;
bOldOverlays = [];
end
curxlim = xlim;
curylim = ylim;
dispImage(curxlim, curylim);
dispOverlays(curxlim, curylim);
end
end
end
function [tracemin, tracemax] = getTrackExtents(trackingStruct, N)
tracemin = [Inf Inf];
tracemax = [0 0];
for t=1:N
xmin = min(trackingStruct.rgDetect{t}(:,2));
xmax = max(trackingStruct.rgDetect{t}(:,2));
ymin = min(trackingStruct.rgDetect{t}(:,1));
ymax = max(trackingStruct.rgDetect{t}(:,1));
tracemin = [min(tracemin(1), xmin) min(tracemin(2), ymin)];
tracemax = [max(tracemax(1), xmax) max(tracemax(2), ymax)];
end
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment