2015-05-29 3 views
1

Я пытаюсь преобразовать изображение (полутонов в 16 битов) в растровое изображение (в градациях серого 16 бит).Преобразование изображения 16-битов в оттенки серого в растровое изображение 16 бит в оттенках серого (ошибка конструктора)

Этот пример не отрабатывал (Исключение: ArgumentException)

private Mat ToMat16bGrayscale(Image im) 
    { 

     Bitmap bmp2 = new Bitmap(im); 

    } 

Но этот пример работает:

private Mat ToMat16bGrayscale(Image im) 
{ 

    //Cast obligatoire la création ou la copie d'une bitmap ne fonctionne pas ici... 
       Bitmap bmp = (Bitmap)(im); 
       Bitmap new_bmp = (Bitmap)bmp.Clone(); 
} 

Я хочу знать, почему конструктор Bitmap не работает с изображения 16bits оттенки серого и почему работает литовое изображение для растрового изображения.

Спасибо :)

ответ

1

PixelFormat.Format16bppGrayscale является белым слоном формат изображения. Товарное оборудование, которое вы нашли на своем компьютере, даже не удаленно близко к тому, чтобы точно отображать такое растровое изображение. Это RGB-based с 8 бит для каждого цветного канала, производя 16 миллионов различных цветов. Только 256 из них - серые оттенки. Еще хуже, чем обычные ЖК-мониторы, они, как правило, не могут сделать лучше, чем сделать 6 бит информации о цвете отличительной чертой, в результате получив не более 64 оттенков серого. Отображение 65 536 оттенков серого до 256 или 64, конечно, вызывает лотов деталей, которые будут утеряны.

Он действительно используется в специализированных приложениях. Один из них - рентгенологическое изображение, например, изображение рентгеновских изображений. Но у них также есть необычные дорогие мониторы для отображения такого изображения. Нетривиальная электрическая составляющая - это цифроаналоговый преобразователь, 16-разрядный преобразователь, который может работать на частоте ~ 250 МГц, требует больших и больших денег. Они также используют специализированные форматы файлов изображений, обычно DICOM, форматы, которые в ином случае не поддерживаются кодеками, входящими в GDI +.

Существует значительная ответственность здесь, всегда проблема в США, когда вы показываете такой медицинский образ на товарном оборудовании, тогда кто бы ни выглядел, он не сможет увидеть достаточно деталей, чтобы правильно диагностировать, скажем, развивающаяся опухоль. Сам по себе достаточно, чтобы препятствовать Microsoft поддерживать преобразования пикселей в пиксельном формате, они не хотят участвовать в таком судебном процессе.

GDI + поддерживает хранение такое изображение. Вы можете получить данные пикселя с помощью Bitmap.LockBits(). Подходит для приложений обработки изображений. Но любая попытка создать объект Graphics для такого изображения или использование Graphics.DrawImage() на таком изображении вызовет исключение. Это то, что делает конструктор Bitmap (Image). Найдите поставщика, например, LeadTools для поддержки библиотеки.

+0

Большое спасибо за ваш ответ. Я работаю с рентгеновским детектором (16 бит). Поэтому я использую OpenCVSharp для открытия и сохранения моего 16-битного изображения в оттенках серого. – MSA

+1

Как объясняет Ханс, общее оборудование не может правильно отображать 16-битные изображения в оттенках серого. Также стоит упомянуть, что человеческий глаз может различать только от 100 до 500 серых оттенков в зависимости от устройства отображения и условий освещения. Однако некоторые медицинские и научные изображения могут содержать значительные данные, помимо того, что может отличить человеческий глаз, поэтому эти образы требуют специальных методов, чтобы выделить оттенки интереса, такие как выравнивание окон. –