diff --git a/src/+RSF/checkMetaTiming.m b/src/MATLAB/+RSF/checkMetaTiming.m similarity index 100% rename from src/+RSF/checkMetaTiming.m rename to src/MATLAB/+RSF/checkMetaTiming.m diff --git a/src/+RSF/chooseImageSamples.m b/src/MATLAB/+RSF/chooseImageSamples.m similarity index 100% rename from src/+RSF/chooseImageSamples.m rename to src/MATLAB/+RSF/chooseImageSamples.m diff --git a/src/+RSF/clipRSF.m b/src/MATLAB/+RSF/clipRSF.m similarity index 100% rename from src/+RSF/clipRSF.m rename to src/MATLAB/+RSF/clipRSF.m diff --git a/src/+RSF/cohortOCT.m b/src/MATLAB/+RSF/cohortOCT.m similarity index 100% rename from src/+RSF/cohortOCT.m rename to src/MATLAB/+RSF/cohortOCT.m diff --git a/src/+RSF/corrOCT.m b/src/MATLAB/+RSF/corrOCT.m similarity index 100% rename from src/+RSF/corrOCT.m rename to src/MATLAB/+RSF/corrOCT.m diff --git a/src/+RSF/draw1RSF.m b/src/MATLAB/+RSF/draw1RSF.m similarity index 100% rename from src/+RSF/draw1RSF.m rename to src/MATLAB/+RSF/draw1RSF.m diff --git a/src/+RSF/drawOCT.m b/src/MATLAB/+RSF/drawOCT.m similarity index 100% rename from src/+RSF/drawOCT.m rename to src/MATLAB/+RSF/drawOCT.m diff --git a/src/+RSF/drawPatients.m b/src/MATLAB/+RSF/drawPatients.m similarity index 100% rename from src/+RSF/drawPatients.m rename to src/MATLAB/+RSF/drawPatients.m diff --git a/src/+RSF/drawProgressionStats.m b/src/MATLAB/+RSF/drawProgressionStats.m similarity index 100% rename from src/+RSF/drawProgressionStats.m rename to src/MATLAB/+RSF/drawProgressionStats.m diff --git a/src/+RSF/drawRSF.m b/src/MATLAB/+RSF/drawRSF.m similarity index 100% rename from src/+RSF/drawRSF.m rename to src/MATLAB/+RSF/drawRSF.m diff --git a/src/+RSF/drawRSF_lever.m b/src/MATLAB/+RSF/drawRSF_lever.m similarity index 100% rename from src/+RSF/drawRSF_lever.m rename to src/MATLAB/+RSF/drawRSF_lever.m diff --git a/src/+RSF/getDeltaTstats.m b/src/MATLAB/+RSF/getDeltaTstats.m similarity index 100% rename from src/+RSF/getDeltaTstats.m rename to src/MATLAB/+RSF/getDeltaTstats.m diff --git a/src/+RSF/getImRSF.m b/src/MATLAB/+RSF/getImRSF.m similarity index 100% rename from src/+RSF/getImRSF.m rename to src/MATLAB/+RSF/getImRSF.m diff --git a/src/+RSF/getImf.m b/src/MATLAB/+RSF/getImf.m similarity index 74% rename from src/+RSF/getImf.m rename to src/MATLAB/+RSF/getImf.m index d2d7887c4a7ae2d5a28571ba873f3b3a3e528e02..b77b44e2f5fe0f17aa0161b9c470554893d6df31 100644 --- a/src/+RSF/getImf.m +++ b/src/MATLAB/+RSF/getImf.m @@ -17,8 +17,13 @@ end px = px{:}; px_pos = px(px>0); px_neg = abs(px(px<0)); -clip_pos = [mean(px_pos)-std(px_pos), mean(px_pos)+std(px_pos)]; -clip_neg = [mean(px_neg)-std(px_neg), mean(px_neg)+std(px_neg)]; + +% clip_pos = [mean(px_pos)-std(px_pos), mean(px_pos)+std(px_pos)]; +% clip_neg = [mean(px_neg)-std(px_neg), mean(px_neg)+std(px_neg)]; +% clip_pos = [min(px_pos),max(px_pos)]; +% clip_neg = [min(px_neg),max(px_neg)]; +clip_pos = prctile(px_pos,[0.5,99.5]); +clip_neg = prctile(px_neg,[0.5,99.5]); for i = 1:length(imf) imp = imf{i}; diff --git a/src/+RSF/getMetadata.m b/src/MATLAB/+RSF/getMetadata.m similarity index 100% rename from src/+RSF/getMetadata.m rename to src/MATLAB/+RSF/getMetadata.m diff --git a/src/+RSF/getPatientMetadata.m b/src/MATLAB/+RSF/getPatientMetadata.m similarity index 100% rename from src/+RSF/getPatientMetadata.m rename to src/MATLAB/+RSF/getPatientMetadata.m diff --git a/src/+RSF/imPreProcess.m b/src/MATLAB/+RSF/imPreProcess.m similarity index 51% rename from src/+RSF/imPreProcess.m rename to src/MATLAB/+RSF/imPreProcess.m index 0fbc9cdf46ea29f8164f7f8d1bba92f7d25a1b0d..62b3528f80a74edfb58521adead772e09fd4fcd5 100644 --- a/src/+RSF/imPreProcess.m +++ b/src/MATLAB/+RSF/imPreProcess.m @@ -1,28 +1,11 @@ function [imf,bwMask] = imPreProcess(im,radii) -% AX = 1/sqrt(3) .* [15.38,1,1] ; -% AX = 1/sqrt(3) .* [5,1,1] ; -AX = 1/sqrt(3); -% dx = 15.38; -dx = 20; -AX = 1/sqrt(3); -% fun fact :: mat2gray here causes r2 decline im = uint8(im); % values are already uint8, just wrapped in a double - -imp = double(0*im); -imn = imp; -for rr = 1:length(radii) - sx = radii(rr); - if 1 == length(sx) - sx = [0.45,sx,sx]; - end - sx = AX .* sx; - cudaTarget = getCudaTarget; - imf = HIP.LoG(im,sx,cudaTarget); - [~,imp1,imn1] = LoG.separateLoG(imf); - imp = max(imp,imp1); - imn = max(imn,imn1); -end +AX = 1/sqrt(3); +sx = AX .* radii; +cudaTarget = getCudaTarget; +imf = HIP.LoG(im,sx,cudaTarget); +[~,imp,imn] = LoG.separateLoG(imf); % threshold mask bw = imbinarize(im); diff --git a/src/+RSF/optimizeDeltaTstats.m b/src/MATLAB/+RSF/optimizeDeltaTstats.m similarity index 100% rename from src/+RSF/optimizeDeltaTstats.m rename to src/MATLAB/+RSF/optimizeDeltaTstats.m diff --git a/src/+RSF/pickMinVelocityStack.m b/src/MATLAB/+RSF/pickMinVelocityStack.m similarity index 100% rename from src/+RSF/pickMinVelocityStack.m rename to src/MATLAB/+RSF/pickMinVelocityStack.m diff --git a/src/+RSF/pickRSFradius.m b/src/MATLAB/+RSF/pickRSFradius.m similarity index 100% rename from src/+RSF/pickRSFradius.m rename to src/MATLAB/+RSF/pickRSFradius.m diff --git a/src/+RSF/platemetric.m b/src/MATLAB/+RSF/platemetric.m similarity index 100% rename from src/+RSF/platemetric.m rename to src/MATLAB/+RSF/platemetric.m diff --git a/src/+RSF/progressionStats.m b/src/MATLAB/+RSF/progressionStats.m similarity index 100% rename from src/+RSF/progressionStats.m rename to src/MATLAB/+RSF/progressionStats.m diff --git a/src/+RSF/thresholdRetinalOCT.m b/src/MATLAB/+RSF/thresholdRetinalOCT.m similarity index 100% rename from src/+RSF/thresholdRetinalOCT.m rename to src/MATLAB/+RSF/thresholdRetinalOCT.m diff --git a/src/MATLAB/metadata/getMetaOCT.m b/src/MATLAB/metadata/getMetaOCT.m new file mode 100644 index 0000000000000000000000000000000000000000..acf9fc5352cd522b236a7feea224c9c1a2d8d672 --- /dev/null +++ b/src/MATLAB/metadata/getMetaOCT.m @@ -0,0 +1,31 @@ +function tblMeta = getMetaOCT(ROOT,eye,scanType) + +tblMeta = table(); +flist = dir(fullfile(ROOT,'**/*.LEVER')); +mx = regexp({flist.name},'P(\d+)_(.+?)_(\d+-\d+-\d+)_(\d+-\d+-\d+)_(\w\w)_(.+?)_.*.LEVER','tokens'); +tblSkip = table(); +for ff = 1:length(flist) + nt = table(); + + nt.filename = {flist(ff).name}; + nt.folder = {flist(ff).folder}; + if isempty(mx{ff}) + tblSkip = [tblSkip;nt]; + continue; + end + nt.subjectID = str2double(mx{ff}{1}{1}); + nt.scanType = mx{ff}{1}{2}; + nt.dx = datetime(mx{ff}{1}{3},'InputFormat','MM-dd-yyyy'); + nt.time = {mx{ff}{1}{4}}; + nt.eye = mx{ff}{1}{5}; + nt.scanID = {mx{ff}{1}{6}}; + + + if ~strcmp(nt.eye,eye) || ~contains(lower(scanType),lower(nt.scanType)) + continue; + end + + tblMeta = [tblMeta;nt]; +end + +tblMeta = sortrows(tblMeta,{'subjectID','filename','dx'}); \ No newline at end of file diff --git a/src/MATLAB/metadata/goLR.m b/src/MATLAB/metadata/goLR.m new file mode 100644 index 0000000000000000000000000000000000000000..3879125c9b184def8b8eb62581f48483f6a806ff --- /dev/null +++ b/src/MATLAB/metadata/goLR.m @@ -0,0 +1,61 @@ +tic +ROOT = '/g/leverjs/Schuman_OCT/OCT/03-22-2024'; + +% flist = dir(fullfile(ROOT,'**/*.LEVER')); +% id = regexp({flist.name},'P(\d)+','tokens'); +% id = cellfun(@(x) str2double(x{1}),id); +% [uid,ia,ic] = unique(id); +% +% hx = []; +% for i = 1:length(uid) +% hx(i) = length(find(id==uid(i))); +% end + +PID = 'P10010'; +flist = dir(fullfile(ROOT,['**/' PID '*.LEVER'])); +mx = regexp({flist.name},'P(?<PID>\d+)_(?<scanType>.+)_(?<date>\d+-\d+-\d+)_(?<time>\d+-\d+-\d+)_(?<eye>\w\w)_(?<scanID>.+?)_.*.LEVER','names'); +tblMeta = struct2table(vertcat(mx{:})); +tblMeta.PID = str2double(tblMeta.PID); +tblMeta.folder = {flist.folder}'; +tblMeta.filename = {flist.name}'; + +tblMeta = tblMeta(contains(tblMeta.scanType,'Optic'),:); +% tblMeta = tblMeta(contains(tblMeta.eye,'OD'),:); +imf = RSF.getImf(tblMeta,[0.5,8,8],''); +imf2 = RSF.getImf(tblMeta,[5,5,5],''); +for i = 1:length(imf) + imf{i}(:,:,:,2) = imf2{i}; + imf{i}(:,:,:,3) = 0 .* imf2{i}; +end +p = ljsStartParallel(64); +d = []; +parfor i = 1:length(imf) + dj = []; + for j = 1:length(imf) + dj(j) = SSF.ncd_ssf_volume(imf{i},imf{j}); + end + d(i,:) = dj; +end + +A = Cluster.Regularize(d); +[~,Y] = Cluster.SpectralCluster(A,3); + +tblMeta.Y = Y; + +tS = tblMeta(strcmp(tblMeta.eye,'OD'),:); +tD = tblMeta(strcmp(tblMeta.eye,'OS'),:); +t1 = tS; +t2 = tD; + +tO = tblMeta(contains(tblMeta.scanType,'Optic'),:); +tM = tblMeta(contains(tblMeta.scanType,'Macular'),:); +t3 = tO; +t4 = tM; + +clf;hold on +plot3(t1.Y(:,1),t1.Y(:,2),t1.Y(:,3),'r*') +plot3(t2.Y(:,1),t2.Y(:,2),t2.Y(:,3),'og') +plot3(t3.Y(:,1),t3.Y(:,2),t3.Y(:,3),'mx') +plot3(t4.Y(:,1),t4.Y(:,2),t4.Y(:,3),'cs') + +toc \ No newline at end of file