0001 function showSegRuleGUI( data, FLAGS, viewport )
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
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' )
0042 FLAGS.S_flag = 0;
0043 end
0044
0045 S_flag = FLAGS.S_flag;
0046
0047 if ~isfield( FLAGS, 'index_score' )
0048 FLAGS.index_score = [];
0049 end
0050 index_score = FLAGS.index_score;
0051
0052 if ~isfield( FLAGS, 't_flag' )
0053 FLAGS.t_flag = 1;
0054 end
0055
0056
0057
0058 t_flag = FLAGS.t_flag;
0059
0060
0061 if ~isfield( FLAGS, 'phase' )
0062 FLAGS.phase = 0 ;
0063 end
0064
0065
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
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
0234
0235 imshow( data.segs.phaseMagic, [], 'InitialMagnification', 'fit' );
0236 colormap jet;
0237
0238 elseif im_flag == 4
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