function [] = consensusMasks(locArray) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Generates the consensus masks to be used in our experiment. Uses the IoU %and the hungarian algorithm in order to make matches % Inputs: % - locArray: string array of 4 file paths: % 1. output directory [filepath] % 2. directory for first grader [filepath] % 3. directory for second grader [filepath] % 4. directory for third grader [filepath] % Outputs: (none) % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% outputdir = locArray(1); user1_folder = locArray(2); user2_folder = locArray(3); user3_folder = locArray(4); cd(user3_folder) A = dir('0*'); threshold = 0.5; for vid = 1:15 cd(user1_folder) vname = A(vid).name; greenind = strfind(vname, 'Green'); B = dir(strcat(vname(1:greenind), '*_masks.tif')); name1 = B(1).name; masks1 = bigread2(name1); projname = dir(strcat(vname(1:greenind), '*_projection.tif')); projection = imread(projname(1).name); cd(strcat(user2_folder, vname)) maskname = dir('*.tif'); masks2 = bigread2(maskname(1).name); cd(user3_folder) fname = dir(strcat(vname(1:greenind), '*')); cd(fname(1).name) maskname = dir('*.tif'); masks3 = bigread2(maskname(1).name); [d1 d2 d3] = size(masks1); [s1 s2 s3] = size(masks3); if d1 == s2 masks1 = permute(masks1, [2 1 3]); end M1match = zeros(size(masks1, 3), 2); M2match = zeros(size(masks2, 3), 2); M3match = zeros(size(masks3, 3), 2); M1neurons = []; M2neurons = []; M3neurons = []; [M] = matchNeurons(masks1, masks2, threshold); M1match(M(:, 1), 1) = M(:, 2); M2match(M(:, 2), 1) = M(:, 1); M1neurons = cat(1, M1neurons, M(:, 1)); M2neurons = cat(1, M2neurons, M(:, 2)); [M] = matchNeurons(masks1, masks3, threshold); M1match(M(:, 1), 2) = M(:, 2); M3match(M(:, 2), 1) = M(:, 1); M1neurons = cat(1, M1neurons, M(:, 1)); M3neurons = cat(1, M3neurons, M(:, 2)); [M] = matchNeurons(masks2, masks3, threshold); M2match(M(:, 1), 2) = M(:, 2); M3match(M(:, 2), 2) = M(:, 1); M2neurons = cat(1, M2neurons, M(:, 1)); M3neurons = cat(1, M3neurons, M(:, 2)); M1neurons = unique(M1neurons); M2neurons = unique(M2neurons); M3neurons = unique(M3neurons); sm1 = sum(masks1(:, :, M1neurons),3); sm2 = sum(masks2(:, :, M2neurons),3); sm3 = sum(masks3(:, :, M3neurons), 3); M1use = find(M1match(:, 1)); fmask = []; %Masks 1 to masks 2 M1use = find(M1match(:, 1) > 0 & M1match(:, 2) == 0); for nn = 1:length(M1use) cm2 = masks1(:, :, M1use(nn)); cm3 = masks2(:, :, M1match(M1use(nn), 1)); cummask = logical(cm2)+logical(cm3); maskind = find(cummask >= 2); blank = zeros(size(cm2)); blank(maskind) = 1; fmask = cat(3, fmask, blank); end %Masks 1 to masks 3 M1use = find(M1match(:, 2) > 0 & M1match(:, 1) == 0); for nn = 1:length(M1use) cm2 = masks1(:, :, M1use(nn)); cm3 = masks3(:, :, M1match(M1use(nn), 2)); cummask = logical(cm2)+logical(cm3); maskind = find(cummask >= 2); blank = zeros(size(cm2)); blank(maskind) = 1; fmask = cat(3, fmask, blank); nn end %All matching M1use = find(M1match(:, 2) > 0 & M1match(:, 1) > 0); for nn = 1:length(M1use) cm1 = masks1(:, :, M1use(nn)); cm2 = masks2(:, :, M1match(M1use(nn), 1)); cm3 = masks3(:, :, M1match(M1use(nn), 2)); cummask = logical(cm1)+logical(cm2)+logical(cm3); maskind = find(cummask >= 2); blank = zeros(size(cm2)); blank(maskind) = 1; fmask = cat(3, fmask, blank); end %Masks 2 to 3 M1use = find(M2match(:, 2) > 0 & M2match(:, 1) == 0); for nn = 1:length(M1use) cm2 = masks2(:, :, M1use(nn)); cm3 = masks3(:, :, M2match(M1use(nn), 2)); cummask = logical(cm2)+logical(cm3); maskind = find(cummask >= 2); blank = zeros(size(cm1)); blank(maskind) = 1; fmask = cat(3, fmask, blank); end fmask = removeDuplicates(fmask); projection = double(projection); mask2image(fmask, projection/max(projection(:))) axis equal F = getframe(gcf); [X, Map] = frame2im(F); cd(outputdir) imwrite(X, strcat(vname, '_consensusmasks.jpg')); masks = fmask; save(strcat(vname, '_consensusmasks.mat'), 'masks'); end