Skip to content

Commit d36986c

Browse files
committed
Histogram texture now has maximum 1024 samples (=> less memory usage + fixed error or large datasets)
1 parent 105a931 commit d36986c

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

Assets/Scripts/Importing/RawDatasetImporter.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public override VolumeDataset Import()
5050
if (fs.Length < expectedFileSize)
5151
{
5252
Debug.LogError($"The dimension({dimX}, {dimY}, {dimZ}) exceeds the file size. Expected file size is {expectedFileSize} bytes, while the actual file size is {fs.Length} bytes");
53+
reader.Close();
54+
fs.Close();
5355
return null;
5456
}
5557

@@ -94,6 +96,8 @@ public override VolumeDataset Import()
9496
}
9597
Debug.Log("Loaded dataset in range: " + dataset.GetMinDataValue() + " - " + dataset.GetMaxDataValue());
9698

99+
reader.Close();
100+
fs.Close();
97101
return dataset;
98102
}
99103

Assets/Scripts/Utils/HistogramTextureGenerator.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,21 @@ public static Texture2D GenerateHistogramTexture(VolumeDataset dataset)
88
{
99
int minValue = dataset.GetMinDataValue();
1010
int maxValue = dataset.GetMaxDataValue();
11+
int numValues = maxValue - minValue + 1;
1112

12-
int numSamples = maxValue - minValue + 1;
13+
int numSamples = System.Math.Min(numValues, 1024);
1314
int[] values = new int[numSamples];
1415
Color[] cols = new Color[numSamples];
1516
Texture2D texture = new Texture2D(numSamples, 1, TextureFormat.RGBAFloat, false);
1617

1718
int maxFreq = 0;
1819
for (int iData = 0; iData < dataset.data.Length; iData++)
1920
{
20-
int dataValue = dataset.data[iData] - minValue;
21-
values[dataValue] += 1;
22-
maxFreq = System.Math.Max(values[dataValue], maxFreq);
21+
int dataValue = dataset.data[iData];
22+
float tValue = Mathf.InverseLerp(minValue, maxValue, dataValue);
23+
int valueIndex = Mathf.RoundToInt((numSamples - 1) * tValue);
24+
values[valueIndex] += 1;
25+
maxFreq = System.Math.Max(values[valueIndex], maxFreq);
2326
}
2427

2528
for (int iSample = 0; iSample < numSamples; iSample++)

0 commit comments

Comments
 (0)