LibTiff.NET — изображение в оттенках серого, созданное на основе необработанных данных пикселей камеры, очень темное.C#

Место общения программистов C#
Ответить
Anonymous
 LibTiff.NET — изображение в оттенках серого, созданное на основе необработанных данных пикселей камеры, очень темное.

Сообщение Anonymous »

Я использую LibTiff.NET для создания изображений TIFF в оттенках серого. Изображения представляют собой необработанные значения пикселей с камеры. Камера создает 14-битные изображения, т.е. интенсивность пикселей от 0 до 16383. Я использую код, показанный ниже, для создания изображения в формате TIFF. Результат выглядит правильно, но он очень темный. Я предполагаю, что это связано с тем, что TIFF назначает 16 бит на пиксель, что дает максимум 65535. Это будет означать, что максимальное значение пикселя моей камеры составляет только четверть от максимального, и яркость масштабируется соответствующим образом.
Есть ли легкое решение этой проблемы? Я мог бы умножить значения пикселей на 4, но не хочу изменять необработанные значения пикселей. Причина, по которой мы предпочитаем формат TIFF, заключается в том, что его можно использовать для хранения исходных данных пикселей.
public static void createTiffShorts(int width, int height, ushort[] imageData)
{
string fileName = "myImage.tif";
using (Tiff output = Tiff.Open(fileName, "w"))
{
output.SetField(TiffTag.IMAGEWIDTH, width);
output.SetField(TiffTag.IMAGELENGTH, height);
output.SetField(TiffTag.SAMPLESPERPIXEL, 1);
output.SetField(TiffTag.BITSPERSAMPLE, 16);
output.SetField(TiffTag.ORIENTATION, BitMiracle.LibTiff.Classic.Orientation.TOPLEFT);
output.SetField(TiffTag.ROWSPERSTRIP, height);
output.SetField(TiffTag.XRESOLUTION, 88.0);
output.SetField(TiffTag.YRESOLUTION, 88.0);
output.SetField(TiffTag.RESOLUTIONUNIT, ResUnit.CENTIMETER);
output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
output.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);
output.SetField(TiffTag.COMPRESSION, Compression.NONE);
output.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB);
for (int i = 0; i < height; i++)
{
ushort[] samples = new ushort[width];
for (int j = 0; j < width; j++)
samples[j] = (ushort)(imageData[(height - 1 - i) * width + j]);

byte[] buffer = new byte[samples.Length * sizeof(ushort)];
Buffer.BlockCopy(samples, 0, buffer, 0, buffer.Length);
output.WriteScanline(buffer, i);
}
output.WriteDirectory();
}
System.Diagnostics.Process.Start(fileName);
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... s-very-dar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»