Skip to content

Commit

Permalink
Segmentations: Read multi-segmentation dataset
Browse files Browse the repository at this point in the history
  • Loading branch information
mlavik1 committed Sep 8, 2024
1 parent 4c4efa1 commit ba9aa7c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public static ImageFileFormat GetImageFileFormat(string filePath)
case ".vasp":
return ImageFileFormat.VASP;
case ".nii":
return ImageFileFormat.NIFTI;
case ".gz":
return filePath.ToLower().EndsWith(".nii.gz") ? ImageFileFormat.NIFTI : ImageFileFormat.Unknown;
default:
Expand Down
29 changes: 20 additions & 9 deletions Assets/Scripts/VolumeObject/VolumeRenderedObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,28 +159,39 @@ public void AddSegmentation(VolumeDataset dataset)

overlayType = OverlayType.Segmentation;

int segmentationId = segmentationLabels.Count > 0 ? segmentationLabels.Max(l => l.id) + 1 : 1;
int lastSegmentationId = segmentationLabels.Count > 0 ? segmentationLabels.Max(l => l.id) : 0;
int maxSegmentationId = -1;

if (segmentationLabels.Count == 0)
{
secondaryDataset = dataset;
maxSegmentationId = Mathf.RoundToInt(dataset.GetMaxDataValue());
}
else
{
for (int i = 0; i < secondaryDataset.data.Length; i++)
for (int i = 0; i < dataset.data.Length; i++)
{
secondaryDataset.data[i] = dataset.data[i] > 0.0f ? (float)segmentationId : secondaryDataset.data[i];
int value = Mathf.RoundToInt(dataset.data[i]);
if (value > 0)
{
maxSegmentationId = Mathf.Max(maxSegmentationId, value);
secondaryDataset.data[i] = maxSegmentationId + value;
}
}
secondaryDataset.RecalculateBounds();
secondaryDataset.RecreateDataTexture();
secondaryDataset.GetDataTexture().filterMode = FilterMode.Point;
}
SegmentationLabel segmentationLabel = new SegmentationLabel();
segmentationLabel.id = segmentationId;
segmentationLabel.name = dataset.name;
segmentationLabel.colour = Random.ColorHSV();
segmentationLabels.Add(segmentationLabel);
UpdateSegmentationLabels();
for (int i = 1; i <= maxSegmentationId; i++)
{
int segmentationId = i + lastSegmentationId;
SegmentationLabel segmentationLabel = new SegmentationLabel();
segmentationLabel.id = segmentationId;
segmentationLabel.name = dataset.name;
segmentationLabel.colour = Random.ColorHSV();
segmentationLabels.Add(segmentationLabel);
UpdateSegmentationLabels();
}
}

public void RemoveSegmentation(int id)
Expand Down

0 comments on commit ba9aa7c

Please sign in to comment.