superpix_group.m 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. function superMask = superpix_group(mask, N_svox_in)
  2. % this function contains supervoxel grouping
  3. fprintf(['\n' 'Creating ' num2str(N_svox_in) ' SupVox:\n' ])
  4. canvas2 = sqrt(bwdist(1-mask));
  5. % orthoslice (canvas2)
  6. % find box crop of ROI
  7. ymin = 0;
  8. ymax = 0;
  9. for yi = 1:size(mask,1)
  10. data = mask(yi, :,:);
  11. if max(data(:)) >0
  12. if ymin == 0
  13. ymin = yi;
  14. end
  15. ymax = yi;
  16. end
  17. end
  18. xmin = 0;
  19. xmax = 0;
  20. for xi = 1:size(mask,2)
  21. data = mask(:,xi,:);
  22. if max(data(:)) >0
  23. if xmin == 0
  24. xmin = xi;
  25. end
  26. xmax = xi;
  27. end
  28. end
  29. zmin = 0;
  30. zmax = 0;
  31. for zi = 1:size(mask,3)
  32. data = mask(:,:,zi);
  33. if max(data(:)) >0
  34. if zmin == 0
  35. zmin = zi;
  36. end
  37. zmax = zi;
  38. end
  39. end
  40. canvas3 = canvas2(ymin:ymax, xmin:xmax, zmin:zmax);
  41. N_svox = N_svox_in; % number of supervoxels to give as param to parse
  42. while true
  43. [L,NumLabels] = superpixels3(canvas3,N_svox);
  44. superMask = zeros(size(mask));
  45. superMask(ymin:ymax, xmin:xmax, zmin:zmax) = L;
  46. superMask(logical(1-mask)) = 0;
  47. numSupVox = numel(unique(superMask))-1; % number of created supervoxels
  48. fprintf([num2str(numSupVox) ' areas created' ])
  49. if abs(numSupVox-N_svox_in)/N_svox_in < 0.2
  50. break
  51. end
  52. N_svox = round(N_svox * N_svox_in/numSupVox);
  53. fprintf([' - not ok. ' num2str(numSupVox/N_svox_in) ' of target.\n'])
  54. end
  55. fprintf([' - ok.\n'])
  56. end