From 0a7c392ef70bc4e5a79a7982283d50eb4ec0a1f3 Mon Sep 17 00:00:00 2001 From: Florian Vollrath Date: Wed, 15 Mar 2017 14:41:11 +0100 Subject: [PATCH] added a specific script for leona and fixed the "shift" problems --- .../CellSortLoadTrialsShiftCorrOnTrials.m | 4 +- functions/CellSortShiftCorrection.m | 4 +- functions/trialAlignmentScript_Leona.m | 66 +++++++++++++++---- main.m | 4 ++ 4 files changed, 63 insertions(+), 15 deletions(-) diff --git a/functions/CellSortLoadTrialsShiftCorrOnTrials.m b/functions/CellSortLoadTrialsShiftCorrOnTrials.m index 11c401c..b24dca7 100644 --- a/functions/CellSortLoadTrialsShiftCorrOnTrials.m +++ b/functions/CellSortLoadTrialsShiftCorrOnTrials.m @@ -28,8 +28,8 @@ shiftVector = findshift(reference, medianProj, 'iter'); %shift frames for f = 1:size(data_r{i},3) - data_r{i}(:,:,f) = shift(data_r{i}(:,:,f),shiftVector); - data_g{i}(:,:,f) = shift(data_g{i}(:,:,f),shiftVector); + data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear'); + data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear'); end end %put them in single arrays diff --git a/functions/CellSortShiftCorrection.m b/functions/CellSortShiftCorrection.m index a474857..35533a2 100644 --- a/functions/CellSortShiftCorrection.m +++ b/functions/CellSortShiftCorrection.m @@ -7,8 +7,8 @@ parfor r = 1:size(data_g, 3) % waitbar(r/size(data_g, 3), wb,[num2str(r) ' of ' num2str(size(data_g, 3))]); shiftVector = findshift(referenceFrame, data_r(:,:,r), mode); - data_r(:,:,r) = shift(data_r(:,:,r),shiftVector); - data_g(:,:,r) = shift(data_g(:,:,r),shiftVector); + data_r(:,:,r) = imtranslate(data_r(:,:,r),shiftVector', 'linear'); + data_g(:,:,r) = imtranslate(data_g(:,:,r),shiftVector', 'linear'); end disp('Finished Shift Correction!'); % close(wb); diff --git a/functions/trialAlignmentScript_Leona.m b/functions/trialAlignmentScript_Leona.m index 2680f97..791d8d0 100644 --- a/functions/trialAlignmentScript_Leona.m +++ b/functions/trialAlignmentScript_Leona.m @@ -2,7 +2,7 @@ close all clc %% Load Trial Files -inFolder = 'D:\data\session_1'; +inFolder = 'D:\data\Leona'; outFolder = 'D:\data\out'; binningFactor = [1, 1, 2]; nSubIm = 10; @@ -67,11 +67,7 @@ data_r(:,:,i) = circshift(data_r(:,:,i),[rs(i),cs(i)]); data_g(:,:,i) = circshift(data_g(:,:,i),[rs(i),cs(i)]); end - - %binning - data_r = uint16(binning(data_r, binningFactor, 'mean')); - data_g = uint16(binning(data_g, binningFactor, 'mean')); - + %save stacks in memory cd(outFolder); disp(['Write Files Of Folder ', folders(f).name ' in ' outFolder ' to RAM']); @@ -98,17 +94,59 @@ shiftVector = findshift(reference, medianProj, 'iter'); %shift frames for f = 1:size(data_r{i},3) - data_r{i}(:,:,f) = shift(data_r{i}(:,:,f),shiftVector); - data_g{i}(:,:,f) = shift(data_g{i}(:,:,f),shiftVector); + data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear'); + data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear'); + end +end +%% do another med align +for j =1:numberGreen + disp(['Working on Trial ' num2str(j)]); + [rs, cs] = medAlign(data_r{j}, nSubIm, 50, -inf); + temp_r = data_r{j}; + temp_g = data_g{j}; + %shift red and green channel + parfor f = 1:size(data_r{j},3) + temp_r(:,:,f) = circshift(temp_r(:,:,f),[rs(f),cs(f)]); + temp_g(:,:,f) = circshift(temp_g(:,:,f),[rs(f),cs(f)]); + end + data_r{j} = temp_r; + data_g{j} = temp_g; +end +%% do another shift correction for every frame, takes some time +reference = median(data_r{1},3); +numberGreen = size(data_g,2); +for i = 1:numberGreen + disp(['Working on Trial ' num2str(i)]); + for f = 1:size(data_r{i},3) + shiftVector = findshift(reference, data_r{j}(:,:,f), 'iter'); + %shift frames + + data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear'); + data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear'); end end +%% do another shift correctionto align trials to each other +reference = median(data_r{1},3); +numberGreen = size(data_g,2); +for i = 1:numberGreen + disp(['Working on Trial ' num2str(i)]); + medianProj = median(data_r{i},3); + shiftVector = findshift(reference, medianProj, 'iter'); + %shift frames + for f = 1:size(data_r{i},3) + data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear'); + data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear'); + end +end +%% save tiff files +parfor i=1:numberGreen + %binning + data_r{i} = uint16(binning(data_r{i}, binningFactor, 'mean')); + data_g{i} = uint16(binning(data_g{i}, binningFactor, 'mean')); -%save tiff files -for i=1:numberGreen saveastiff(data_r{i}, [outFolder filesep folders(i).name '_r.tif']); saveastiff(data_g{i}, [outFolder filesep folders(i).name '_g.tif']); end - %% generate quality plot %put them in single arrays numFrames = 0; @@ -143,5 +181,11 @@ title('Quality Of Shift Correction'); xlabel('frame'); ylabel('std of frame'); +%% export complete files +disp('Saving Big Data Set..'); +options.big = true; +saveastiff(data_r_array, [outFolder filesep folders(i).name '_complete_r.tif'], options); +saveastiff(data_g_array, [outFolder filesep folders(i).name '_complete_g.tif'], options); %% Finished +clear all disp('Finished Complete Script!!!'); \ No newline at end of file diff --git a/main.m b/main.m index ef6cb59..c963623 100644 --- a/main.m +++ b/main.m @@ -30,6 +30,10 @@ data_g = data_g(xInterval,yInterval,:); data_r = data_r(xInterval,yInterval,:); +%% bin data again +secondBinningFactor = [1,1,1]; +data_g = binning(data_g, secondBinningFactor, 'mean'); +data_r = binning(data_r, secondBinningFactor, 'mean'); %% 1. PCA %calculate PCAs nPCs = 100;