Diff of /gimmeSegs_prostate2.m [000000] .. [be1edc]

Switch to side-by-side view

--- a
+++ b/gimmeSegs_prostate2.m
@@ -0,0 +1,135 @@
+function [lumen,epithelium_cells,epithelium,stroma] = gimmeSegs_prostate2(image,showMe,saveSegs,noDecon)
+%% Prostate Adaptation of gimmeSegs
+
+%% Purpose:  
+% gimmeSegs modification for use with prostate slides
+%
+%% Inputs:
+% image:  image being segmented
+% showMe: enables figure of outputs
+% saveSegs: saves outputs to .mat variables
+% noDecon: use if not using Color Deconvolution
+%
+%% Outputs:
+% Segmented lumen, epithelial cells, epithelium, stroma, and columnar cells
+
+%% ------------------------------------------------------------------------
+if ~exist('showMe','var')
+    showMe = 0;
+end
+
+if ~exist('saveSegs','var')
+    saveSegs = 0;
+end
+
+if ~exist('noDecon','var')
+    noDecon = 0;
+end
+
+rrat = 0.293; % do not know what these are / ask Sam
+brat = 0.5078;
+
+disp('1. Segmenting Lumen')
+tic
+
+% lumen = imbinarize(image(:,:,2));
+lumen = image(:,:,2)>190;
+lumen = uint8(lumen);
+
+toc
+% -------------------------------------------------------------------------
+disp('2. Segmenting Epithelium')
+
+if noDecon == 1
+    
+    whatsLeft = image .* repmat(uint8(~lumen),[1,1,3]);
+    whatsLeft = whatsLeft .* repmat(uint8(~vessel),[1,1,3]);
+    
+    red = whatsLeft(:,:,1);
+    blue = whatsLeft(:,:,3);
+    stroma = (red + blue) ./ 2;
+    purp = ((red.*rrat) + (blue.*brat))./2;
+    p2p = stroma - purp;
+    
+    nuc = uint8(zeros(size(p2p)));
+    nuc(p2p>60) = 1;
+    
+    se = strel('disk',2);%nuc2 = imclose(nuc,se);
+    nuc2 = imfill(nuc);
+    cc = bwconncomp(nuc2);
+    epithelium = uint8(zeros(size(nuc2)));
+    x = regionprops('table',cc,'MajoraxisLength','MinoraxisLength','Circularity','Area');
+    
+    for i = 1:length(cc.PixelIdxList)
+        if x.Circularity(i) > 0.1 && x.Area(i) > 1
+            epithelium(cc.PixelIdxList{i}) = 1;
+        end
+    end
+else
+    % set of standard values for stain vectors (from python scikit)
+    He = [0.6443186; 0.7166757; 0.26688856];
+    Eo = [0.09283128; 0.9545457; 0.28324];
+    Res = [ 0.63595444;   0.001; 0.7717266 ]; %residual
+    
+    HDABtoRGB = [He/norm(He) Eo/norm(Eo) Res/norm(Res)]';
+    RGBtoHDAB = inv(HDABtoRGB);
+    
+    tic
+    imageHDAB = SeparateStains(image, RGBtoHDAB);
+    toc
+    
+    epithelium_cells = imcomplement(imageHDAB(:,:,1))>0.3; % >0.5
+   
+    thresh = quantile(unique(imcomplement(imageHDAB(:,:,1))),0.3);
+    thresh2 = quantile(unique(imageHDAB(:,:,2)),0.6);
+    epithelium = (imcomplement(imageHDAB(:,:,1))>(thresh+0.1)) + (imageHDAB(:,:,2)>thresh2) & ~lumen; %0.5 %0.8
+    
+%     epithelium2 = imbinarize(imcomplement(image(:,:,1)));
+%     epithelium = (epithelium + epithelium2) & ~lumen;
+    epithelium = uint8(epithelium);
+    
+%     figure('Position',[100 2000, 1500, 900]);
+% subplot(221); imagesc(image); axis image
+% subplot(222); imagesc(imoverlay(image,epithelium)); axis image
+
+end
+
+% -------------------------------------------------------------------------
+disp('3. Segmenting Stroma')
+
+tic
+
+% stroma = imbinarize(imageHDAB(:,:,3));
+thresh = quantile(unique(imcomplement(imageHDAB(:,:,2))),0.3); % find the 0.3 quantile to segment between epithelium and stroma
+stroma = imcomplement(imageHDAB(:,:,2))>(thresh+0.1) & ~lumen; %0.4
+% stroma2 = imageHDAB(:,:,1)>0.9; %0.8
+% stroma = (stroma + stroma2) & ~lumen;
+stroma = uint8(stroma);
+
+
+%     figure('Position',[100 2000, 1500, 900]);
+% subplot(221); imagesc(image); axis image
+% subplot(222); imagesc(imoverlay(image,stroma)); axis image
+toc
+
+disp('Segmentation Complete');
+if showMe == 1
+    
+    figure;
+    subplot(141); imagesc(image); title('orig'); axis image
+    subplot(142); imagesc(lumen); title('lumen'); axis image
+    subplot(143); imagesc(epithelium); title('epithelium'); axis image
+    subplot(144); imagesc(stroma); title('stroma'); axis image
+    set(gcf,'Position',[100,100,1600,600]); axis image
+    
+end
+
+if saveSegs == 1
+    
+    disp('Writing segmentations')
+    
+    save('lumen','lumen');
+    save('epithelium','epithelium');
+    save('stroma','stroma');
+    
+end
\ No newline at end of file