Merge pull request #12 from mlavik1/negative-datavalues

Fix for negative data values not working properly
This commit is contained in:
Matias Lavik 2020-02-20 09:38:24 +01:00 коммит произвёл GitHub
Родитель 982d19f2a3 d2f3086da9
Коммит 00d1aa900e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 17 добавлений и 11 удалений

Просмотреть файл

@ -6,7 +6,10 @@ namespace UnityVolumeRendering
{
public static Texture2D GenerateHistogramTexture(VolumeDataset dataset)
{
int numSamples = dataset.GetMaxDataValue() + 1;
int minValue = dataset.GetMinDataValue();
int maxValue = dataset.GetMaxDataValue();
int numSamples = maxValue - minValue + 1;
int[] values = new int[numSamples];
Color[] cols = new Color[numSamples];
Texture2D texture = new Texture2D(numSamples, 1, TextureFormat.RGBAFloat, false);
@ -14,8 +17,9 @@ namespace UnityVolumeRendering
int maxFreq = 0;
for (int iData = 0; iData < dataset.data.Length; iData++)
{
values[dataset.data[iData]] += 1;
maxFreq = System.Math.Max(values[dataset.data[iData]], maxFreq);
int dataValue = dataset.data[iData] - minValue;
values[dataValue] += 1;
maxFreq = System.Math.Max(values[dataValue], maxFreq);
}
for (int iSample = 0; iSample < numSamples; iSample++)

Просмотреть файл

@ -18,7 +18,9 @@ namespace UnityVolumeRendering
int dimY = dataset.dimY;
int dimZ = dataset.dimZ;
int maxRange = dataset.GetMaxDataValue() - dataset.GetMinDataValue();
int minValue = dataset.GetMinDataValue();
int maxValue = dataset.GetMaxDataValue();
int maxRange = maxValue - minValue;
Color[] cols = new Color[dataset.data.Length];
for (int x = 0; x < dataset.dimX; x++)
@ -29,16 +31,16 @@ namespace UnityVolumeRendering
{
int iData = x + y * dimX + z * (dimX * dimY);
int x1 = dataset.data[Math.Min(x + 1, dimX - 1) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
int x2 = dataset.data[Math.Max(x - 1, 0) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
int y1 = dataset.data[x + Math.Min(y + 1, dimY - 1) * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
int y2 = dataset.data[x + Math.Max(y - 1, 0) * dataset.dimX + z * (dataset.dimX * dataset.dimY)];
int z1 = dataset.data[x + y * dataset.dimX + Math.Min(z + 1, dimZ - 1) * (dataset.dimX * dataset.dimY)];
int z2 = dataset.data[x + y * dataset.dimX + Math.Max(z - 1, 0) * (dataset.dimX * dataset.dimY)];
int x1 = dataset.data[Math.Min(x + 1, dimX - 1) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
int x2 = dataset.data[Math.Max(x - 1, 0) + y * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
int y1 = dataset.data[x + Math.Min(y + 1, dimY - 1) * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
int y2 = dataset.data[x + Math.Max(y - 1, 0) * dataset.dimX + z * (dataset.dimX * dataset.dimY)] - minValue;
int z1 = dataset.data[x + y * dataset.dimX + Math.Min(z + 1, dimZ - 1) * (dataset.dimX * dataset.dimY)] - minValue;
int z2 = dataset.data[x + y * dataset.dimX + Math.Max(z - 1, 0) * (dataset.dimX * dataset.dimY)] - minValue;
Vector3 grad = new Vector3((x2 - x1) / (float)maxRange, (y2 - y1) / (float)maxRange, (z2 - z1) / (float)maxRange);
cols[iData] = new Color(grad.x, grad.y, grad.z, (float)dataset.data[iData] / (float)dataset.GetMaxDataValue());
cols[iData] = new Color(grad.x, grad.y, grad.z, (float)(dataset.data[iData] - minValue) / maxRange);
}
}
}