Home > SuperSegger > trainingConstants > showSegRuleGUI.m

showSegRuleGUI

PURPOSE ^

showSegRule : shows the segmentation for regions and segments

SYNOPSIS ^

function showSegRuleGUI( data, FLAGS, viewport )

DESCRIPTION ^

 showSegRule : shows the segmentation for regions and segments

 INPUT :
       data : data file with segmentation information.
       FLAGS :
           .im_flag = 1 : segment view ,
                      2 : region view,
                      3 : false color,
                      4 : phase image
           .S_flag = segments/regions' scores
           .t_flag = segments/regions' labels
           .Sj_flag = shows disagreeing segments scores (S_flag must be on
           too)
       viewport : display axis

 Copyright (C) 2016 Wiggins Lab
 Written by Paul Wiggins & Stella Stylianidou.
 University of Washington, 2016
 This file is part of SuperSegger.

 SuperSegger is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 SuperSegger is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with SuperSegger.  If not, see <http://www.gnu.org/licenses/>.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function showSegRuleGUI( data, FLAGS, viewport )
0002 % showSegRule : shows the segmentation for regions and segments
0003 %
0004 % INPUT :
0005 %       data : data file with segmentation information.
0006 %       FLAGS :
0007 %           .im_flag = 1 : segment view ,
0008 %                      2 : region view,
0009 %                      3 : false color,
0010 %                      4 : phase image
0011 %           .S_flag = segments/regions' scores
0012 %           .t_flag = segments/regions' labels
0013 %           .Sj_flag = shows disagreeing segments scores (S_flag must be on
0014 %           too)
0015 %       viewport : display axis
0016 %
0017 % Copyright (C) 2016 Wiggins Lab
0018 % Written by Paul Wiggins & Stella Stylianidou.
0019 % University of Washington, 2016
0020 % This file is part of SuperSegger.
0021 %
0022 % SuperSegger is free software: you can redistribute it and/or modify
0023 % it under the terms of the GNU General Public License as published by
0024 % the Free Software Foundation, either version 3 of the License, or
0025 % (at your option) any later version.
0026 %
0027 % SuperSegger is distributed in the hope that it will be useful,
0028 % but WITHOUT ANY WARRANTY; without even the implied warranty of
0029 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0030 % GNU General Public License for more details.
0031 %
0032 % You should have received a copy of the GNU General Public License
0033 % along with SuperSegger.  If not, see <http://www.gnu.org/licenses/>.
0034 
0035 if (~exist('FLAGS','var') || isempty(FLAGS)) || ~isfield( FLAGS, 'im_flag' )
0036     FLAGS.im_flag=2;
0037 end
0038 
0039 im_flag = FLAGS.im_flag;
0040 
0041 if ~isfield( FLAGS, 'S_flag' ) % shows all segments scores
0042     FLAGS.S_flag = 0;
0043 end
0044 
0045 S_flag = FLAGS.S_flag;
0046 
0047 if ~isfield( FLAGS, 'index_score' ) % labels for segments
0048     FLAGS.index_score = [];
0049 end
0050 index_score = FLAGS.index_score;
0051 
0052 if ~isfield( FLAGS, 't_flag' ) % labels for segments
0053     FLAGS.t_flag = 1;
0054 end
0055 
0056 
0057 
0058 t_flag = FLAGS.t_flag;
0059 
0060 
0061 if ~isfield( FLAGS, 'phase' ) % labels for segments
0062     FLAGS.phase = 0 ;
0063 end
0064 
0065 % shows scores for segments/regions that computer/user disagrees
0066 if ~isfield( FLAGS, 'Sj_flag' )
0067     FLAGS.Sj_flag = 0;
0068 end
0069 
0070 Sj_flag = FLAGS.Sj_flag;
0071 
0072 segs_good      = zeros( size( data.phase ) );
0073 segs_good_fail = segs_good;
0074 segs_bad       = segs_good;
0075 segs_bad_fail  = segs_good;
0076 segs_Include   = segs_good;
0077 num_segs = numel( data.segs.score(:) );
0078 
0079 sz = size(segs_good);
0080 backer = 0.7*ag(data.phase);
0081 
0082 if ~exist('viewport','var') || isempty(viewport)
0083     figure;
0084 else
0085     axes(viewport);
0086 end
0087 
0088 
0089 if im_flag == 1
0090     
0091     rawSegScore = data.segs.scoreRaw;
0092     if size(rawSegScore, 2) > size(rawSegScore, 1)
0093         rawSegScore = rawSegScore';
0094     end
0095     
0096     
0097     rawSegScore = round(rawSegScore > 0);
0098     isnan_rawscore = isnan(rawSegScore);
0099     rawSegScore(isnan_rawscore) = 0;
0100     isnan_score = isnan(data.segs.score);
0101     data.segs.score(isnan_score) = 0;
0102     
0103     if isempty(data.segs.score)
0104         segs_good      = data.segs.segs_label*0;
0105         segs_good_fail = data.segs.segs_label*0;
0106         segs_bad_fail  = data.segs.segs_label*0;
0107         segs_bad  =data.segs.segs_label*0;
0108     else
0109         segs_good      = ismember( data.segs.segs_label, find(and( ~isnan_score, and(data.segs.score,rawSegScore))));
0110         segs_good_fail = ismember( data.segs.segs_label, find(and( ~isnan_score, and(data.segs.score,~rawSegScore))));
0111         segs_bad_fail  = ismember( data.segs.segs_label, find(and( ~isnan_score, and(~data.segs.score,rawSegScore))));
0112         segs_bad       = ismember( data.segs.segs_label, find(and( ~isnan_score, and(~data.segs.score,~rawSegScore))));
0113     end
0114     str = strel('square',2);
0115     
0116     segs_good = imdilate(double(segs_good), str);
0117     segs_good_fail = imdilate(double(segs_good_fail), str);
0118     segs_bad_fail = imdilate(double(segs_bad_fail), str);
0119     segs_bad = imdilate(double(segs_bad),str);
0120     
0121     segsGoodag  = ag(segs_good);
0122     segsGoodFailag = ag(segs_good_fail);
0123     segs3nag = ag(data.segs.segs_3n);
0124     segsBadag  = ag(segs_bad );
0125     segsBadFailag = ag(segs_bad_fail);
0126     
0127     if FLAGS.phase
0128         phaseBackag = uint8(ag(data.segs.phaseMagic));
0129     else
0130         phaseBackag = uint8(ag(~data.mask_cell));
0131     end
0132     
0133     
0134     imshow( cat(3, 0.2*phaseBackag + 0.3*segs3nag + uint8(segsGoodag+segsGoodFailag+0.5*segsBadFailag), ...
0135         0.2*phaseBackag + 0.3*segs3nag + 0.8*uint8(segsGoodFailag+segsBadFailag) , ...
0136         0.2*phaseBackag + 0.3*segs3nag + uint8(segsBadag+segsBadFailag + 0.2 * segsGoodFailag) ), 'InitialMagnification', 'fit');
0137     
0138     props = regionprops( data.segs.segs_label, 'Centroid'  );
0139     num_segs = numel(props);
0140     
0141     if S_flag && (~t_flag)
0142         for ii = 1:num_segs
0143             r = props(ii).Centroid;
0144             
0145             if isempty(index_score) || index_score(1) < 1 || index_score(1) > size(data.segs.info,2)
0146                 score_tmp =  data.segs.scoreRaw(ii);
0147             else
0148                 score_tmp =  data.segs.info(ii,index_score);
0149             end
0150             
0151             tmp_flag = ((score_tmp>0) == (data.segs.score(ii)));
0152                        
0153             
0154             if tmp_flag == 0
0155                 if ~Sj_flag
0156                     text( r(1), r(2), num2str( score_tmp, 2), 'Color', [0.5,0.5,0.5] );
0157                 end
0158             else
0159                 if isfield (data.segs, 'Include') && data.segs.Include(ii)
0160                     text( r(1), r(2), num2str( score_tmp, 2), 'Color', 'w' );
0161                 elseif ~Sj_flag
0162                     text( r(1), r(2), num2str( score_tmp, 2), 'Color', 'g' );
0163                 end
0164             end
0165         end
0166     end
0167     
0168     if t_flag
0169         for ii = 1:num_segs            
0170             r = props(ii).Centroid;
0171             text( r(1), r(2), num2str( ii ), 'Color', 'w' );
0172         end
0173     end
0174     
0175     
0176 elseif im_flag == 2 % region view
0177     
0178     if ~isfield(data,'regs')
0179         error ('no region fields');
0180         return;
0181     end
0182     num_regs = data.regs.num_regs;
0183     
0184     if isfield(data.regs,'score')
0185         regs_good_agree = double(ag(ismember(data.regs.regs_label,find(data.regs.score & round(data.regs.scoreRaw > 0)))));
0186         regs_good_disagree = double(ag(ismember(data.regs.regs_label,find(data.regs.score & ~round(data.regs.scoreRaw > 0)))));
0187         
0188         regs_bad_agree = double(ag(ismember(data.regs.regs_label,find(~data.regs.score & ~round(data.regs.scoreRaw > 0)))));
0189         regs_bad_disagree = double(ag(ismember(data.regs.regs_label,find(~data.regs.score & round(data.regs.scoreRaw > 0)))));
0190         
0191         
0192         imshow( cat(3, 0.2*backer + uint8(regs_good_agree+regs_good_disagree+0.5*regs_bad_disagree),...
0193             0.2*backer + 0.8 * uint8(regs_good_disagree+regs_bad_disagree),...
0194             0.2*backer + uint8(regs_bad_agree + regs_bad_disagree + 0.2*regs_good_disagree)), 'InitialMagnification', 'fit');
0195         
0196     else
0197         imshow( cat(3, 0.8*backer + ag(data.mask_cell), ...
0198             0.8*backer, ...
0199             0.8*backer) , 'InitialMagnification', 'fit');
0200     end
0201     
0202     
0203     if S_flag && (~t_flag)
0204         for ii = 1:num_regs
0205             r = data.regs.props(ii).Centroid;
0206             flagger = 1;
0207             
0208             if isfield (data.regs,'score')
0209                 if isempty(index_score) || index_score(1) < 1 || index_score(1) > size(data.regs.info,2)
0210                     score_tmp =  data.regs.scoreRaw(ii);
0211                 else
0212                     score_tmp =  data.regs.info(ii,index_score);
0213                 end
0214 
0215                 flagger = ((score_tmp>0) == (data.regs.score(ii)));
0216 
0217                 if flagger
0218                     text( r(1), r(2), num2str( score_tmp, 2), 'Color', 'w' );
0219                 elseif ~Sj_flag
0220                     text( r(1), r(2), num2str( score_tmp, 2), 'Color', [0.5,0.5,0.5] );
0221                 end
0222             end
0223         end
0224     end
0225     
0226     if t_flag
0227         for ii = 1:num_regs
0228             r = data.regs.props(ii).Centroid;
0229             text( r(1), r(2), num2str( ii ), 'Color', 'w' );
0230         end
0231     end
0232     
0233 elseif im_flag == 3 % phase image in jet color
0234     
0235     imshow( data.segs.phaseMagic, [], 'InitialMagnification', 'fit' );
0236     colormap jet;
0237     
0238 elseif im_flag == 4 % phase image
0239     
0240     backer = ag(data.phase);
0241     imshow( cat(3,backer,backer,backer), 'InitialMagnification', 'fit' );
0242 elseif im_flag == 5
0243     
0244     cell_mask = data.mask_cell;
0245     segs_3n = data.segs.segs_3n ;
0246     segs_good = data.segs.segs_good;
0247     segs_bad = data.segs.segs_bad  ;
0248     
0249     back = double(0.7*ag( data.phase ));
0250     outline = imdilate( cell_mask, strel( 'square',3) );
0251     outline = ag(outline-cell_mask);
0252     
0253     imshow(uint8(cat(3,back + 0.1*double(outline)+ double(ag(segs_good+segs_3n)),...
0254         back ,...
0255         back + 0.2*double(ag(segs_bad))+ 0.2*double(ag(~cell_mask)-outline))));
0256     
0257     drawnow;
0258 end
0259 
0260 
0261 end

Generated on Thu 19-Jan-2017 13:55:21 by m2html © 2005