Home > SuperSegger > frameLink > splitAtBestSeg.m

splitAtBestSeg

PURPOSE ^

missingSeg2to1 : finds missing segment in regC.

SYNOPSIS ^

function [data_c, success] = splitAtBestSeg (data_c, regC, CONST)

DESCRIPTION ^

 missingSeg2to1 : finds missing segment in regC.
 Segments in regC are used that are close to the segment
 between the two regions regR(1) and regR(2) in data_r.
 if a segment is found that fits the requirements data_new is made with
 the new cell_mask and success is returned as true. Else the same data is
 returned and success is false.

 INPUT :
      data_c : current data (seg/err) file.
      regC : numbers of region in current data that needs to be separated
      data_r : reverse data (seg/err) file.
      regR : numbers of regions in reverse data file
      CONST : segmentation parameters

 OUTPUT :
      data_new : data_c with new segment in good_segs and modified cell mask
      success : true if segment was found succesfully.

 Copyright (C) 2016 Wiggins Lab
 Written by 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 [data_c, success] = splitAtBestSeg (data_c, regC, CONST)
0002 % missingSeg2to1 : finds missing segment in regC.
0003 % Segments in regC are used that are close to the segment
0004 % between the two regions regR(1) and regR(2) in data_r.
0005 % if a segment is found that fits the requirements data_new is made with
0006 % the new cell_mask and success is returned as true. Else the same data is
0007 % returned and success is false.
0008 %
0009 % INPUT :
0010 %      data_c : current data (seg/err) file.
0011 %      regC : numbers of region in current data that needs to be separated
0012 %      data_r : reverse data (seg/err) file.
0013 %      regR : numbers of regions in reverse data file
0014 %      CONST : segmentation parameters
0015 %
0016 % OUTPUT :
0017 %      data_new : data_c with new segment in good_segs and modified cell mask
0018 %      success : true if segment was found succesfully.
0019 %
0020 % Copyright (C) 2016 Wiggins Lab
0021 % Written by Stella Stylianidou
0022 % University of Washington, 2016
0023 % This file is part of SuperSegger.
0024 %
0025 % SuperSegger is free software: you can redistribute it and/or modify
0026 % it under the terms of the GNU General Public License as published by
0027 % the Free Software Foundation, either version 3 of the License, or
0028 % (at your option) any later version.
0029 %
0030 % SuperSegger is distributed in the hope that it will be useful,
0031 % but WITHOUT ANY WARRANTY; without even the implied warranty of
0032 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0033 % GNU General Public License for more details.
0034 %
0035 % You should have received a copy of the GNU General Public License
0036 % along with SuperSegger.  If not, see <http://www.gnu.org/licenses/>.
0037 
0038 success = 0;
0039 
0040 [xx,yy] = getBBpad(data_c.regs.props(regC).BoundingBox,size(data_c.phase),4);
0041 mask = (data_c.regs.regs_label(yy,xx) == regC);
0042 segMask = (mask - data_c.segs.segs_3n(yy,xx) - data_c.segs.segs_good(yy,xx)) > 0;
0043 
0044 badSegMask = logical(data_c.segs.segs_bad(yy,xx) .* segMask);
0045 labelMask = data_c.segs.segs_label(yy,xx);
0046 segIDs = unique(labelMask(badSegMask));
0047 
0048 highScores = data_c.segs.scoreRaw(segIDs) > 45;
0049 [~, maxID] = max(data_c.segs.scoreRaw(segIDs));
0050 
0051 splitIDs = segIDs(highScores);
0052 splitIDs = [splitIDs; segIDs(maxID)];
0053 splitIDs = unique(splitIDs);
0054 
0055 if regC == 53
0056     disp('test');
0057 end
0058 
0059 newMask = ones(numel(yy), numel(xx));
0060 if numel(splitIDs) > 0
0061     for i = 1:numel(splitIDs)
0062         newMask = newMask .* (logical(data_c.mask_cell(yy,xx) .* segMask) & ~logical((labelMask == splitIDs(i))));
0063         newMask = imdilate(imerode(newMask, ones(3)), ones(3));
0064     end
0065 
0066     % Successfully split into 2 regions
0067     if max(unique(bwlabel(newMask))) > 1
0068         fullMask = logical(newMask) + (~mask .* logical(data_c.mask_cell(yy,xx)));
0069         data_c.mask_cell(yy,xx) = logical(data_c.mask_cell(yy,xx)) & logical(fullMask);
0070 
0071         success = 1;
0072     end   
0073 end

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