Битность изображения: Битовая глубина и настройки

Содержание

6.7. Точность

6.7.

Точность

Вложенное меню Точность содержит команды, с помощью которых можно изменять точность изображения. Параметры точности влияют на точность и кодирование каналов, используемые для хранения изображения в памяти во время обработки.

Рисунок 16.69. Вложенное меню «Точность» меню «Изображение»


6.7.1. Активация вложенного меню

Это вложенное меню находится в меню изображения Изображение → Точность.

6.7.2. Содержимое вложенного меню «Точность»

Меню «Точность» разделено на две части: точность и кодирование каналов.

Параметры «Точности»

Точность, с которой сохраняется изображение, это функция глубины цвета (8, или 16, или 32) и информация о том, как хранятся данные — в целочисленном формате или в формате с плавающей запятой. Меню предлагает следующие параметры точности:

  1. Параметры целочисленной точности

    • 8 бит, целочисленное

    • 16 бит, целочисленное

    • 32 бита, целочисленное

  2. Параметры точности с плавающей запятой

    • 16 бит, с плавающей запятой

    • 32 бита, с плавающей запятой

Параметры кодирования каналов

С помощью меню «Точность» также можно выбрать кодирование каналов для данных изображения. На данный момент есть две возможности:

6.7.3. Выбор точности изображения и кодировки каналов

Примечание

Вне зависимости от выбранных параметров в меню точности, в GIMP 2.10 вся внутренняя обработка высокой глубины цвета выполняется с точностью 32 бита с плавающей запятой, а большинство операций кодирования — с помощью кодирования линейного света.

Какие параметры точности лучше выбрать? Если кратко, то:

  1. Чтобы полностью использовать преимущества внутренней 32-битной обработки с плавающей запятой в GIMP, выберите точность в 32 бита с плавающей запятой вместе с кодированием линейного света.

  2. Если работа выполняется на машине с ограниченным запасом памяти, или же если выполняется редактирование очень больших изображений и стопок слоёв, обдумайте использование 16 бит с плавающей запятой или целочисленной точности.

  3. Если хотите использовать преимущества редактирования изображений с высокой глубиной цвета, но не хотите иметь дела со значениями каналов с плавающей запятой, выбирайте целочисленную точность в 16 бит.

  4. Во время цветопробы переключитесь на кодирование каналов в нелинейной гамме (sRGB) для избежания некоторых проблем, которые могут возникнуть во время цветопробы изображения с линейной гаммой и использованием Little CMS.

  5. На машине с очень ограниченными мощностями и небольшим объёмом памяти лучше всего использовать целочисленную точность в 8 бит, и в этом случае также выберите кодирование нелинейной (перцептуальной) гаммы (sRGB). С точностью 8 бит и кодированием линейного света у изображения будут ужасно постеризованные тени.

6.7.4. Больше сведений о параметрах точности

  1. Выбор глубины цвета (8, или 16, или 32 бита):

    • Глубина цвета изображения ограничивает возможность точности при обработке файла изображения.

      При прочих равных, более высокая глубина цвета предоставляет больше точности.

    • Глубина цвета файла изображения частично определяет то, сколько оперативной памяти требуется для его обработки. Чем выше значение глубины, тем больше памяти потребуется для хранения данных во время обработки. Другие факторы, имеющие к этому отношение, это размер слоёв изображения и число слоёв в стопке.

  2. Выбор между целочисленной точностью и числами с плавающей запятой:

    • Точность чисел с плавающей запятой нужна для полного использования преимуществ внутренних процессов обработки высоких значений глубины цвета для 32 бита с плавающей запятой. Точность с плавающей запятой позволяет создавать и использовать значения каналов, выходящих за пределы диапазона показываемых монитором цветов от 0.

      0 («точка чёрного на мониторе») до 1.0 («точка белого на мониторе»), что делает возможными выполнение таких очень полезных действий редактирования, как непривязанные изменения профиля ICC и операции расширенного динамического диапазона, имеющие отношение к изображению.

    • В отличие от точности с плавающей запятой, целочисленная точность не может сохранять значения, выходящие за диапазон цветов монитора. Поэтому выбор этой точности означает, что все значения с плавающей запятой, созданные во время обработки, обрезаются для вмещения их в эквивалентный диапазон с плавающей запятой между 0.0 и 1.0, а именно:

      • целые значения для 8 бит обрезаются до диапазона 0-255.

      • целые значения для 16 бит обрезаются до диапазона 0-65535.

      • целые значения для 32 бита обрезаются до диапазона 0-4294967295.

    • Для любой данной глубины цвета, при прочих равных, целочисленная точность является более точной, чем точность с плавающей запятой. Поэтому целочисленная точность для 16 бит будет более точной, чем точность с плавающей запятой для той же битности, а целочисленная точность для 32 бит будет более точной, чем точность с плавающей запятой для 32 бит. В GIMP, тем не менее, целочисленная точность для 32 бит не будет более точной, чем точность с плавающей запятой: в GIMP все внутренние вычисления всё ещё выполняются для 32-битной точности с плавающей запятой, даже если в меню «Точность» была выбрана целочисленная точность. Помните, что параметры меню «Точности» определяют только то, как информация об изображении обрабатывается в оперативной памяти.

    • Для любой указанной глубины цвета, целочисленная точность и точность с плавающей запятой используют примерно одинаковый объём ОЗУ для внутренних расчётов во время обработки изображения, и также примерно одинаковый объём места на диске во время сохранения изображения.

  3. Выбор кодировки каналов: линейный свет или нелинейная (перцептуальная) гамма (sRGB):

    • С точностью в 8 бит, при выборе кодировки линейного света у изображения будут ужасно постеризованные тени. Поэтому используйте линейный свет только вместе с повышением глубины цвета.

    • Во время цветопробы на текущий момент проверка локуса не вернёт корректных результатов, если изображение имеет точность линейного света. Поэтому, перед активацией цветопробы смените точность на нелинейную гамму (sRGB).

    • Кроме того факта, что кодировка линейного света в каналах не рекомендуется для редактирования 8-битных изображений, с точки зрения пользователя выбор кодирования каналов в меню «Точностью на рабочий процесс особенно не повлияет:

      • На данный момент, при выборе линейного света значения линейной гаммы каналов показываются в «пикселях», если использовать пипетку, диалоги «Выборочные точки» и «Указатель».

        Если выбрать «нелинейную гамму», то будут показываться нелинейные унифицированные значения каналов sRGB.

      • На текущий момент выбранное кодирование каналов влияет на неправильные цвета, которые можно видеть, если снять отметку с параметра Изображение/Управление цветом/Включить управление цветом, и если цветовое пространство изображения не является одним из встроенных в GIMP цветовых пространств sRGB (но цвета всё равно будут неверными при любом кодировании каналов).

      • Единственная другая ситуация, при которой кодирование каналов, выбранное в меню точности, может повлиять на рабочий процесс, имеет отношение к результатам использования параметра «Gamma hack» в расширенных параметрах цвета.

Как неправильная битность карты нормалей может испортить текстуры

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

Первым делом разберемся, что такое битность и почему она важна.
От битности зависит количество оттенков, которое может быть записано в изображении. 24-битное изображение может записать 8 бит, или 256 значений в каждый канал. 256 значений обычно достаточно для текстур типа diffuse, specular или gloss map, потому что они используют более широкий спектр цветов и на них нет необходимости четко изображать слабые градиенты.


С этого момента, говоря 8, 16 или 32 бита, я буду иметь ввиду их количество в одном канале изображения.


Tangent Space Normal Map же наоборот, обычно использует более узкий диапазон значений. Ухудшается всё тем, что чем сильнее low poly модель похожа на high poly, тем больше важна битность изображения. Причина в том, что для отображения слабой разницы между двумя версиями модели (а это нужно для корректного шейдинга), нужно использовать большее количество промежуточных оттенков. В противном случае, слабый градиент не сможет корректно отображаться на текстуре и появится лесенка.
Ниже — пример этой проблемы. Low poly объект с плавным силуэтом практически идеально совпадает с high poly. Дополнительно на него назначен металлический зеркальный материал, что позволит еще более наглядно увидеть артефакты.


Если запечь 8-битную карту с помощью софта, который не использует дайзеринг (xNormal или Maya например), появится артефакт в виде лесенки там, где текстура не может записать плавные перепады поверхности из-за ограниченной битности.


Если увеличить битность до 16 и запечь нормал с помощью xNormal в TIFF расширении, результат будет намного лучше.


И так, если 16 бит выдают хороший результат, 32 должны сделать текстуру ещё лучше? В теории да, но на практике это не всегда так. Ниже — пример запеченной 32-битной карты. Как видно, визуальной разницы между 16 и 32-битными версиями нет.


Но ведь сейчас у всех стоят SDD и HDD на несколько терабайт, проблем с памятью для хранения текстур нет, почему бы просто не запекать 32-bit текстуру каждый раз, дабы избежать проблем?
Во-первых, разница между ними практически не видна. Во-вторых, с 32-битной текстурой сложнее работать в промежутке между запеканием и до финализации текстур. Некоторые инструменты в Photoshop недоступны в режиме работы с 32-bit файлами.


В третьих, конвертация 32-bit изображений в 16-ти или 8-ми битные может вызвать еще больше артефактов. В обычной ситуации, когда происходит конвертация из 32-х бит в 16 или 8, тебе нужно будет использовать фотошоповский tone mapping, и поверь, это очень плохо сказывается на карте нормалей.


А что насчет игр? 16 и 32-битные файлы не поддерживаются многими игровыми движками из-за ограничений текстурной памяти. Так что, в конце концов, всю работу с 32-битной текстурой придется ужать в 8-ми битное изображение.


Еще хуже, текстуры могут оптимизироваться движком автоматически. Такое вмешательство со стопроцентной вероятностью создаст шумы и лесенки на карте нормалей.


Да и не все объекты имеют такую сложную форму и зеркальный материал. Поэтому описанной выше проблемы, скорее всего, не будет видно в финале.


Я не упоминал 3ds Max, но если ты запекаешь 8-битный normal map в нем, то можешь вообще не беспокоиться о том, что я тут перечислил. Только если ты не собираешься запечь curvature или AO на основе карты нормалей — в таком случае лучше приготовить normal map с высокой битностью специально под запекание.

Теперь взглянем не на абстрактный пример, а на реальный рабочий ассет.


Запекание с высокой битностью помогло избавиться от артефактов, а последующая конвертация в 8-бит позволила вместить чуть больше полезной информации в меньший объем.


Для наглядности, в конце я оставил рендер меча с наложенными текстурами и 8-битной картой нормалей. Все артефакты, о которых я так волновался, пропали. Конечно, можно заметить некоторые проблемы, если знаешь, куда смотреть. В игре, глядя с адекватного расстояния на объект, игрок ничего не увидит.


И последний пример, который поможет лучше понять, что вообще происходит с картой нормалей при разных настройках запекания.


Даже после того, как я выкрутил интенсивность текстуры, 16-ти битная версия всё ещё смотрится выигрышнее 8-ми битной.


Теперь ты еще лучше понимаешь, как работают инструменты и программы, которые ты используешь каждый день, знаешь о причинах возникновения проблемы в работе и способы их решения.


В следующей статье мы разберем реальный пример, как битность карты нормалей может испортить финальные текстуры. Stay tuned.

Перевод статьи EarthQuake

Глубина цвета FRC — что это, цветопередача и битность матрицы

Содержание

  1. Что такое глубина цвета, FRC?
  2. Цветопередача и глубина цвета в мониторах и тв
  3. Цветовые модели sRGB и NTSC, что же лучше?
  4. Разница между цветовыми моделями sRGB и NTSC и битностью
  5. Что означают 6, 8, 10 бит в мониторе и телевизоре
  6. Чем отличается обычная матрица на 6 бит и матрица 6 бит + FRC
  7. Сколько бит в матрице монитора и телевизора должно быть?

Что такое глубина цвета, FRC?

Глубина цвета — важный параметр любого монитора или телевизора. Это напрямую влияет на количество отображаемых оттенков, что серьезно отражается на качестве картинки. И чем выше данный показатель, тем насыщеннее и красивее становится изображение на экране. При этом глубина цвета в современных монитора и телевизорах может варьироваться от 6 до 12 бит.

Также многие производители используют технологию FRC (Frame Rate Control), которая при помощи мерцания пикселей создает визуально большее число оттенков. Это позволяет не только существенно повысить качество изображения, но и снизить стоимость самой техники. Как правило, речь идет о 8 бит + FRC или 6 бит + FRC.

Цветопередача и глубина цвета в мониторах и тв

Глубина цвета напрямую зависит от битности матрицы. Самыми простыми сегодня считаются 6-битные экраны, которые устанавливаются в ультрабюджетные мониторы и ТВ. Такие TN-дисплеи могут похвастаться лишь быстрым временем отклика. Матрица с 6 битами способна отображать менее 1 миллиона оттенков, а именно 260 тысяч.

Наиболее распространенными и популярными считаются 8-битные телевизоры и мониторы. Это уже матрицы IPS (PLS) и VA среднего или высокого класса. Качественная цветопередача здесь соседствует с высокими показателями контрастности и яркости. При этом у VA-экранов выделяется насыщенный черный цвет, а IPS технология обеспечивает широкие углы обзора без существенной потери качества изображения. Данные 8-битные матрицы отображают около 16 миллионов цветов.

Самыми продвинутыми являются 10-битные экраны, способные показывать более миллиарда цветов. Сейчас они устанавливаются в топовые модели мониторов и телевизоров. Хотя некоторые компании в условиях жесткой конкуренции размещают подобные матрицы и в среднем ценовом сегменте. Как правило, речь идет о дисплеях OLED и IPS. Причем 10 бит обеспечивают максимально плавные цветовые переходы.

Также встречаются и 12-битные матрицы, но их использование ограничено специальным назначением. Например, оборудование для медицины, военной и промышленных сфер.

Примечательно, что технология FRC дает отличную возможность «искусственно» увеличить количество отображаемых цветов. Так, матрица 8 бит + FRC способна работать уже почти с миллиардом цветовых оттенков. Делается это при помощи покадрового изменения яркости каждого отдельного субпикселя. Но точность цветов подобных матриц с FRC все равно зачастую не может достигнуть эталонных значений.

Цветовые модели sRGB и NTSC, что же лучше?

Благодаря цветовым моделям появилась возможность выбирать телевизор или монитор с учетом его возможности точно отображать палитру оттенков. Все началось с трехцветной диаграммы CIE 1931. А в 1953 году вместе с ростом популярности цветного телевидения на свет появилась модель NTSC. Ее главная особенность — огромный диапазон цветов. Поэтому даже в случае NTSC 75% монитор окажется весьма качественным в плане отображения сочной картинки. Более того, продвинутые лампы подсветки дают возможность увеличить данный показатель до 97%.

Что касается популярной цветовой модели sRGB, то она разрабатывалась именно для ЭЛТ-мониторов и принтеров. Это детище компаний Microsoft и HP, созданное в 1996 году. Основная задача — реализация идентичной цветовой гаммы изображения на мониторе и печати. Данная модель востребована и сейчас, особенно в мониторах и видеокартах. Если выбирать устройство для работы с фотографиями и сложным графическим контентом, то следует ориентироваться на sRGB 100%. В других ситуациях цветовой охват может быть меньшим. При этом sRGB 100% будет соответствовать NTSC 75%.

Разница между цветовыми моделями sRGB и NTSC и битностью

Тут может возникнуть логичный вопрос, а есть ли разница между битностью и цветовыми моделями с соответствующим охватом? Если матрица имеет существенную глубину цвета, то резкие цветовые переходы окажутся незаметными. Чем выше битность, тем ниже риск появления таких переходов между несколькими оттенками. И нужно понимать, что сегодня эти характеристики неотделимы друг от друга. То есть, широкий цветовой охват соседствует с высокой битностью.

Что означают 6, 8, 10 бит в мониторе и телевизоре

Рассмотрим следующую ситуацию. В 6-битной матрице каждый цвет способен отображаться в виде 64 разных оттенков. Как правило, присутствует 3 субпикселя, которые в общем результате обеспечивают 262 144 цветов. Данный показатель достигается следующим образом: 26 × 2× 26 = 64 × 64 × 64. Именно поэтому битность напрямую связана с качеством изображения.

Матрицы с 6 битами используются в старых или ультрабюджетных телевизорах. Также их можно встретить в дешевых офисных мониторах. Наиболее распространенными являются 8-битные дисплеи, способные отображать 16 777 216 цветов. Это золотая середина, а также оптимальный вариант между ценой и качеством. Продвинутыми считаются 10-битные матрицы с 1 073 741 824 цветов. Их можно встретить в премиальных мониторах и телевизорах. Экраны с 10 битами часто применяются в OLED-телевизорах. А вот 12-битные дисплеи пока еще большая редкость, так как их применение ограничено узкоспециализированными сферами.

Чем отличается обычная матрица на 6 бит и матрица 6 бит + FRC

В последнее время производители мониторов и телевизоров стали часто использовать матрицы 6 бит + FRC и 8 бит + FRC. Тут все дело в технологии Frame Rate Control, с помощью которой увеличивается количество оттенков. Делается это благодаря покадровой регулировке яркости отдельного субпикселя. Это позволяет создать иллюзию большего количества оттенков. Поэтому с FRC 8-битная матрица «превращается» в 10-битную, а 6-битная — в 8 битную.

При этом нужно понимать, что дисплеи с технологией FRC потенциально готовы отображать более глубокую и контрастную картинку. С другой стороны, например, матрица 8 бит + FRC не сможет стать полной заменой 10-битной матрице, потому что у первой из них будет менее точная цветопередача.

Сколько бит в матрице монитора и телевизора должно быть?

Самыми популярными на сегодня считаются телевизоры и мониторы, обладающие 8-битными матрицами. И тут все логично, так как именно экраны с 8 битами являются золотой серединой в плане цены и качества. В последнее время набирают популярность и устройства для вывода изображения, которые получили матрицы 8 бит + FRC. Стоимость таких телевизоров и мониторов не сильно отличается от стандартных 8-битных моделей, но они отображают визуально больше цветов.

Выбор матрицы и ее битность — процесс одновременно простой и сложный. С одной стороны, всегда нужно стремиться с совершенству. То есть, это 10 или 12 бит. Но здесь многое зависит от бюджета. Если он ограничен, то лучше всего подойти к выбору с умом.

Часто смотрите фильмы, телепередачи и играете на компьютере или консоли? Тогда выбирайте матрицы с 8 битами + FRC. Этого вполне достаточно, чтобы насладиться качественной картинкой с достаточно большой палитрой цветов. Мониторы с подобными экранами сгодятся и для работы с графикой, текстом, таблицами и разными офисными задачами.

Если же вы являетесь профессиональным дизайнером или фотографом, либо же занимаетесь сложными графическими проектами, то без 10-битного дисплея не обойтись. Только они могут обеспечить максимально точную цветопередачу. А еще к экранам 10 бит обязательно стоит присмотреться фанатам кино. Именно 10-битные телевизоры раскрывают потенциал режима HDR, который обеспечивает расширенный динамический диапазон. Естественно, такие телевизоры выделяются отличными характеристиками, демонстрируют сочную и яркую картинку. Матрицы с 10 битами установлены в моделях премиального класса. Но в последнее время наблюдается тенденция, когда телевизоры даже среднего ценового сегмента встречаются с полноценными 10-битными матрицами.

Поэтому зачастую рекомендуется выбирать телевизор или монитор с учетом определенных задач и сценариев работы. Лишние мощности и технологии могут оказаться просто невостребованными. Более того, если речь идет о 10-битных экранах, то и контент для них должен быть соответствующий. В противном случае изображение будет ухудшено до уровня 8-битных дисплеев. Но важно помнить, чем больше бит, тем больше цветов способен отобразить экран.

Что такое битовая глубина изображения? для фотографов

Мы знаем, что изображение битовая глубина может быть запутанной темой. Итак, вот несколько моментов, которые помогут вам понять что такое битовая глубина и как она может повлиять на ваш рабочий процесс как фотографа и пользователя Photoshop/Lightroom.

Вы, несомненно, видели ссылки на 8-битные или 16-битные файлы при открытии изображений из Camera Raw или, возможно, из требований к файлам печатных лабораторий.

Проще говоря, чем выше битовая глубина, тем больше информации можно захватить или воспроизвести . 16-битные файлы изображений могут хранить больше информации о цвете и тонах , чем 8-битные файлы. Битовую глубину часто называют числом оттенков, которое может быть представлено .

Настройка битовой глубины в Camera Raw

Чтобы установить битовую глубину изображения перед открытием в Photoshop, щелкните Настройки Camera Raw , показанный на GIF ниже. Затем выберите желаемую разрядность из выпадающего списка.


Зачем выбирать более высокую разрядность?

Более высокая битовая глубина даст вам более плавных тонов или переходов между пикселями изображения.

Большая битовая глубина  предлагает больше деталей в белых, светлых, средних тонах, тенях, черных . Это обеспечивает лучшее качество изображения и меньше проблем с цветом и полосами .

Это одна из причин, по которой мы рекомендуется снимать в формате RAW . Большинство цифровых зеркальных камер захватывают от 10 до 16 бит по сравнению с ограничениями 8-битного захвата JPG. См. нашу статью «Съемка в формате RAW или JPG».


Работа с 16-битными файлами изображений

16-битные дают гораздо больше информации по сравнению с 8-битными. Но есть некоторые вещи, о которых следует помнить.

Размер файла изображения

Чем больше информации об изображении , тем больше размер файла . Таким образом, для 16-битных файлов требуется больше памяти и больше вычислительной мощности компьютера по сравнению с 8-битными файлами. Если у вас более старая/медленная система, из-за этого могут возникнуть проблемы.

Форматы файлов изображений и битовая глубина

Не все форматы файлов поддерживают 16-битную . Например, TIFF и PSD поддерживают 16-битный формат, тогда как JPG ограничен 8-битным .

Вы можете узнать больше в нашей статье «Что вам нужно знать о форматах файлов изображений».

А как же мои файлы JPG?

Да, вы, скорее всего, потеряете качество при сохранении в виде 8-битного JPG для клиентских файлов, социальных сетей и вашего веб-сайта. НО преимущество в манипулировании 16-битными данными во время редактирования является ключевым фактором в сценарии. Начиная с 16-битного файла , вы получаете преимущество перед редактированием 8-битного файла , в котором меньше тонов и информации.

Рабочий процесс редактирования

Общий рабочий процесс для сохранения максимального качества изображения для откройте изображение из RAW как 16-битное и сразу сохраните рабочий файл как 16-битный PSD или многослойный TIFF. Немедленное сохранение вашего рабочего файла и обновление каждые несколько минут должно позволить вам восстановить последнее сохранение в случае сбоя Photoshop. Формат файла, который поддерживает слои, например PSD или TIFF, важен для полного контроля над вашими правками.

Работа с дополнительной информацией об изображении поможет вам получить более качественное изображение и снижает вероятность появления полос .

Но имейте в виду, что когда вы сохраняете свой клиентский файл в формате JPG , который ограничен 8-битным , вы можете потерять некоторое качество или увидеть полосы . Так что не забудьте проверить ваши JPG после сохранения.

Совет!

Один из советов: продублируйте рабочий файл в Photoshop (Изображение > Дублировать), а затем сведите слои перед сохранением или экспортом в формате JPG. Это часто (но не всегда) приводит к уменьшению серьезности проблем с качеством.

С другой стороны, наличие 16-битного рабочего файла TIFF/PSD означает, что вы можете найти принтер для печати изображения более высокого качества для печати наилучшего качества.

Совместимость

Не все фильтры Photoshop можно применять к 16-битным файлам . В 2021 году это менее актуально, чем десять лет назад. Но это все еще кое-что, о чем нужно знать.


Настройка битовой глубины в Lightroom

Перед экспортом необработанного изображения из Lightroom Classic в Photoshop , проверьте формат файла Настройки . Они определяют формат файла, который ваше изображение будет сохранять из Photoshop; цветовое пространство, в котором вы будете редактировать; Разрешение PPI; И битовая глубина , с которой ваше изображение откроется в Photoshop .

В Настройки Lightroom выберите вкладку Внешнее редактирование , чтобы установить эти настройки.


Ваш компьютер и 16-битное редактирование..

Вы обеспокоены тем, что ваш компьютер не справляется с 16-битным редактированием в Photoshop? Если да, то минимум помните об этом для изображений, где вы подозреваете проблемы с полосами, теневым шумом и т. д. Обработка и сохранение этих изображений в 16-битном формате позволит максимально увеличить их качество.

Способ редактирования зависит от вас и вашей системы. Но понимание причин возникновения проблем с качеством поможет вам справляться с ними по мере необходимости .

Типы и разрядность · Анализ изображений флуоресцентной микроскопии с помощью ImageJ

Работает на GitBook

Схема главы

  • Битовая глубина и тип изображения определяют, какие значения пикселей оно может содержать

  • Изображение с более высокой битовой глубиной может (потенциально) содержать больше информации

  • Для получения большинство изображений имеют тип беззнакового целого числа

    .
  • Для обработки часто лучше использовать типы с плавающей запятой

  • Попытка сохранить значения за пределами диапазона, разрешенного типом и битовой глубиной, приводит к отсечению

Как описано в разделе «Изображения и пиксели», каждый пиксель имеет числовое значение — но пиксель обычно не может иметь только любых числовых значение, которое ему нравится. Вместо этого он работает с ограничениями изображения. тип и разрядность . В конечном итоге пиксели хранятся в некотором двоичном формате. формат: ряд битов ( bi nary digi ts ), т.е. единицы и нули. Разрядность определяет, сколько из этих единиц и нулей доступно для хранения каждого пикселя. Тип определяет, как эти биты интерпретируется.

Предположим, вы разрабатываете код для хранения чисел, но в котором вы разрешено писать только единицы и нули. Если вам разрешено только одно один или ноль, то вы можете фактически представить только два разных числа. Ясно, что чем больше единиц и нулей разрешено, тем уникальнее комбинаций, которые у вас могут быть, и, следовательно, чем больше различных чисел вы может представлять в вашем коде.

4-битный пример

Кодирование значений пикселей в двоичных цифрах включает именно это явление. Если мы сначала предположим, что у нас есть 4 бита, то есть 4 нуля и единицы доступно для каждого пикселя, то эти 4 бита можно объединить в 16 по-разному:

0000 0

0100 4

1000 8

1100 12

0001 1

0101 5

1001 9

1101 13

0010 2

0110 6

1010 10

1110 14

0011 3

0111 7

1011 11

1111 15

Здесь число после стрелки показывает, как каждая последовательность битов может интерпретироваться. У нас нет интерпретаций этих конкретных комбинации как целые числа от 0 до 15, но это обычное дело – это это то, как двоичные цифры понимаются с использованием типа целого числа без знака . Но мы могли бы также легко решить посвятить один из фрагментов тому, чтобы дать знак (положительный или отрицательный), и в этом случае мы могли бы хранить числа в вместо этого диапазон от -8 до +7, при этом используются точно такие же комбинации битов. Этот будет целое число со знаком типа .

Конечно, в принципе есть бесконечные другие варианты того, как мы интерпретируем наши 4-битные двоичные последовательности (целые числа в диапазоне от -7 до +8, четные числа от 39 до 73, первые 16 простых чисел и т. д.), но диапазоны, которые я привел, самые обычные.

В любом случае, важно знать тип изображения, чтобы иметь возможность расшифровать значения его пикселей из того, как они хранятся в двоичном виде.

Увеличение разрядности

Таким образом, с 4 битами на пиксель мы можем представить только 16 уникальных значений. Каждый когда мы включаем еще один бит, мы удваиваем количество значений, которые можем представлять.

Компьютеры склонны работать с группами по 8 бит, с каждой группой известен как 1 байт. Микроскопы, которые получают 8-битные изображения, все еще общие, и они допускают 2 8 = 256 различных значений пикселей, которые, понимаемые как целые числа без знака, попадают в диапазон 0–255. Следующий step up — это 16-битное изображение, которое может содержать 2 16 = 65536 значений: резкое улучшение (0–65535). Конечно, потому что для каждого пикселя в изображении требуется вдвое больше битов. 16-битное изображение по сравнению с 8-битным изображением, в два раза больше места для хранения требуется место — что приводит к увеличению размера файла.

Типы с плавающей запятой

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

Пиксели с плавающей запятой имеют переменную точность в зависимости от того, не они представляют очень маленькие или очень большие числа. Представляя число в двоичном формате с плавающей запятой аналогично его записи в стандартной форме, то есть что-то вроде 3,14 × 10 8 . В этом случае нам удалось представить 314000000, используя только 4 цифры: 314 и 8 (10 уже известно заранее). В бинарном случай, форма более правильно что-то вроде ± 2 M × N: у нас есть один бит, посвященный знаку, a фиксированное количество дополнительных битов для показателя степени M , и остальные на основной номер N (называемый дробью).

32-битное число с плавающей запятой обычно использует 8 бит для экспоненты и 23 бита для дроби, что позволяет нам хранить очень широкий диапазон положительные и отрицательные числа. 64-битное число с плавающей запятой использует 11 бит для показателя степени и 52 для дроби, что позволяет еще более широкий диапазон и большая точность. Но опять же, это требует большего дискового пространства, чем 8- и 16-битные изображения.

Суть изображения и пикселей в том, что нам нужно сохраняйте контроль над нашими значениями пикселей, чтобы наш окончательный анализ оправдано. В связи с этим есть две основные вещи, связанные с битами, которые может пойти не так при попытке сохранить значение пикселя в изображении:

  1. Отсечение: Мы пытаемся сохранить число за пределами поддерживаемого диапазона, поэтому что вместо этого сохраняется ближайшее действительное значение, например. пытаюсь поставить -10 и 500 в 8-битное целое число без знака приведет к значениям 0 и Вместо этого сохраняется 255.

  2. Округление: Мы пытаемся сохранить число, которое не может быть представлено точно, поэтому его необходимо округлить до ближайшего возможного значения, например. попытка поместить 6.4 в 8-битное целочисленное изображение без знака приведет к 6 вместо этого хранится.

Отсечение данных

Из двух проблем отсечение обычно является более серьезной, как показано на рис. Рис. 1. Вырезанное изображение содержит пиксели со значениями равно максимальному или минимальному, поддерживаемому этой битовой глубиной, и это больше невозможно сказать, какие значения этих пикселей должен иметь . информация безвозвратно утеряна.

Отсечение может произойти уже во время получения изображения, где оно может быть называется насыщенность . В флуоресцентной микроскопии это зависит от трех основные факторы:

  1. Количество излучаемого света. Поскольку значения пикселей зависят в зависимости от того, сколько света обнаружено, образец, излучающий очень мало света, с меньшей вероятностью потребуется возможность хранить очень большие значения. Несмотря на то что это все еще может быть из-за…​

  2. Усиление микроскопа. Количественное определение очень малых количеств света точно имеет практические трудности. Усиление микроскопа эффективно усиливает количество обнаруженного света, чтобы помочь преодолеть это до превращая его в значение пикселя (см. Микроскопы и детекторы). Однако, если коэффициент усиления слишком высок, даже небольшое количество обнаруженных фотоны могут оказаться чрезмерно усиленными до тех пор, пока не произойдет отсечение.

  3. Офсетный микроскоп. Действует как константа добавляется к каждому пикселю. Если это слишком высокое или отрицательное значение, оно может также вытолкнуть пиксели за пределы допустимого диапазона.

Если происходит отсечение, мы больше не знаем, что происходит в самом ярком или самые темные части изображения, которые могут помешать любому последующему анализу. Поэтому во время получения изображения любые элементы управления усилением и смещением должны при необходимости отрегулируйте, чтобы избежать обрезки.

Ошибки округления

Округление — более тонкая проблема, чем отсечение. Опять же актуально, т.к. рано как приобретение. Например, предположим, что вы получаете изображение в что на самом деле существует 1000 различных и измеримых уровней света излучается из разных частей образца. Эти никак не могли получать разные значения пикселей в 8-битном изображении, но может обычно вписывается в 16-битное или 32-битное изображение с большим количеством места для запасной. Если наше изображение 8-битное, и мы хотим избежать отсечения, то мы потребуется сначала масштабировать исходный отсчет фотонов, что приводит к пиксели с разным количеством фотонов округляются до одинакового значения, и их первоначальные различия теряются.

Тем не менее, ошибки округления при сборе данных обычно невелики. Округление может быть более серьезной проблемой, когда дело доходит до операций обработки. как фильтрация, которая часто включает вычисление средних значений по многим пикселям (см. Фильтры). Но, к счастью, в этот пост-приобретение этапе мы можем преобразовать наши данные в числа с плавающей запятой, а затем получить дроби если они нам понадобятся.

Чем больше битов, тем лучше…​ обычно

Учитывая как отсечение, так и округление, простое правило появляется битовая глубина: если вы хотите получить максимальную информацию и точность в ваши изображения, чем больше битов, тем лучше. Это изображено в Рис. 2. Таким образом, при наличии возможности получения 16-битного или 8-битного изображения, в большинстве случаев следует выбирать бывший.

При этом иногда необходимо преобразовать тип изображения или битовая глубина, а затем рекомендуется соблюдать осторожность.

Это преобразование может даже иногда потребоваться против ваше лучшее суждение, но у вас мало выбора, потому что конкретное команда или плагин, которые вам нужны, были написаны только для определенных типов изображения. И хотя это может быть редким событием, процесс достаточно неинтуитивным, чтобы требовать особого внимания.

Преобразования применяются в ImageJ с помощью команд в Изображение ▸ Введите ▸ подменю. Верхние три варианта 8-бит (без знака целое), 16-битное (целое без знака) и 32-битное (с плавающей запятой), которые соответствуют поддерживаемым в настоящее время типам [1] .

В целом, увеличение битовой глубины изображения не должно изменять значения пикселей: более высокие битовые глубины могут хранить все значения, которые ниже битовая глубина может хранить. Но идя назад, это не так, и когда уменьшение битовой глубины может произойти одна из двух вещей в зависимости от ли вариант Масштаб при преобразовании под Редактировать ▸ Параметры ▸ Преобразования…​ отмечен или нет.

  • Масштаб при преобразовании проверяется на , а не на : пикселям просто присваивается ближайшее действительное значение в пределах новой битовой глубины, т.е. округление по необходимости.

  • Масштаб при преобразовании проверяется на : добавляется константа или вычитаются, затем пиксели делятся на другую константу перед присваивается ближайшему допустимому значению в пределах новой разрядности. Только , то применяется обрезка или округление, если это все еще необходимо.

Как ни странно, константы, участвующие в масштабировании, определяются от минимального и максимального в текущей яркости/контрастности …​ настройки: из вычитается минимум , а результат делится на Максимум Минимум . Любое значение пикселя ниже Минимум или выше Максимум заканчивается обрезкой. Следовательно, преобразование на меньшую разрядность с масштабированием может привести к другим результатам в зависимости от того, какие настройки яркости и контрастности были .


1. Остальные команды в списке связаны с цветом и являются вариациями 8-битных целых чисел без знака (см. Каналы и цвета).

Классификация изображений

с использованием BigTransfer (BiT)

Автор: Саян Натх
Дата создания: 24.09.2021
Последнее изменение: 24.09.2021
Описание: BigTransfer (BiTart) классификация.

Посмотреть в Colab Исходный код GitHub


Введение

BigTransfer (также известный как BiT) — современный метод обучения переносу изображений классификация. Передача предварительно обученных представлений повышает эффективность выборки и упрощает настройку гиперпараметров при обучении глубоких нейронных сетей зрению. Кусочек пересмотреть парадигму предварительного обучения на больших контролируемых наборах данных и тонкой настройки модель на целевой задаче. Важность правильного выбора слоев нормализации и масштабирование емкости архитектуры по мере увеличения объема предтренировочных данных.

BigTransfer(BiT) обучается на общедоступных наборах данных вместе с кодом в TF2, Джакс и Пайторч. Это поможет любому достичь первоклассное исполнение интересующей их задачи, даже с небольшим количеством помеченные изображения для каждого класса.

Вы можете найти предварительно обученные модели BiT на ImageNet и ImageNet-21k в TFHub как TensorFlow2 SavedModels, которые вы можно легко использовать в качестве слоев Keras. Есть разные размеры: от стандартных ResNet50 в ResNet152x4 (152 слоя в глубину, в 4 раза шире, чем типичный ResNet50) для пользователей. с большими вычислительными ресурсами и бюджетом памяти, но с более высокими требованиями к точности.

Рисунок: По оси X показано количество изображений, используемых для каждого класса, в диапазоне от 1 до полного набор данных. На графиках слева кривая синего цвета выше — это наша модель BiT-L, тогда как кривая ниже представляет собой ResNet-50, предварительно обученный на ImageNet (ILSVRC-2012).


Настройка

 импортировать numpy как np
импортировать панд как pd
импортировать matplotlib. pyplot как plt
импортировать тензорный поток как tf
из тензорного потока импортировать керас
импортировать tensorflow_hub как концентратор
импортировать наборы данных tensorflow_datasets как tfds
tfds.disable_progress_bar()
СЕМЕНА = 42
np.random.seed (СЕМЕНА)
tf.random.set_seed(СЕМЕНА)
 

Сбор набора данных цветов

 train_ds, validation_ds = tfds.load(
    "tf_flowers",
    split=["поезд[:85%]", "поезд[85%:]"],
    as_supervised=Верно,
)
 
 [1 м Загрузка и подготовка набора данных 218,21 МБ (загрузка: 218,21 МБ, сгенерировано: 221,83 МБ, всего: 440,05 МБ) в ~/tensorflow_datasets/tf_flowers/3.0.1...[0m
[1mDataset tf_flowers загружен и подготовлен в ~/tensorflow_datasets/tf_flowers/3.0.1. Последующие вызовы будут повторно использовать эти данные.[0m
 

Визуализация набора данных

 plt.figure(figsize=(10, 10))
для i (изображение, метка) в enumerate(train_ds.take(9)):
    топор = plt.subplot (3, 3, я + 1)
    plt.imshow(изображение)
    plt. title (int (метка))
    плт.ось("выкл")
 


Определить гиперпараметры

 RESIZE_TO = 384
КРОП_ТО = 224
ПАКЕТ_РАЗМЕР = 64
STEPS_PER_EPOCH = 10
AUTO = tf.data.AUTOTUNE # оптимизировать производительность конвейера
NUM_CLASSES = 5 # количество классов
РАСПИСАНИЕ_ДЛИНА = (
    500 # мы будем тренироваться на изображениях с более низким разрешением и все равно добьемся хороших результатов
)
SCHEDULE_BOUNDARIES = [
    200,
    300,
    400,
] # чем больше размер набора данных, тем больше длина расписания
 

Гиперпараметры, такие как SCHEDULE_LENGTH и SCHEDULE_BOUNDARIES , определяются на основе на эмпирических результатах. Метод описан в оригинале. бумаге и в их блоге Google AI Почта.

SCHEDULE_LENGTH также определяется, следует ли использовать MixUp Увеличение или нет. Вы также можете найти простой MixUp Реализация в примерах кодирования Keras.


Определение вспомогательных функций предварительной обработки

 SCHEDULE_LENGTH = SCHEDULE_LENGTH * 512 / BATCH_SIZE
@tf. function
def preprocess_train (изображение, метка):
    изображение = tf.image.random_flip_left_right (изображение)
    изображение = tf.image.resize (изображение, (RESIZE_TO, RESIZE_TO))
    изображение = tf.image.random_crop (изображение, (CROP_TO, CROP_TO, 3))
    изображение = изображение / 255,0
    возврат (изображение, метка)
@tf.function
def preprocess_test (изображение, метка):
    изображение = tf.image.resize (изображение, (RESIZE_TO, RESIZE_TO))
    изображение = изображение / 255,0
    возврат (изображение, метка)
DATASET_NUM_TRAIN_EXAMPLES = train_ds.cardinality().numpy()
Repeat_count = целое (
    SCHEDULE_LENGTH * BATCH_SIZE / DATASET_NUM_TRAIN_EXAMPLES * STEPS_PER_EPOCH
)
repeat_count += 50 + 1 # Чтобы обеспечить как минимум 50 эпох обучения
 

Определение конвейера данных

 # Учебный конвейер
конвейер_поезд = (
    train_ds.shuffle(10000)
    .repeat(repeat_count) # Повторить dataset_size / num_steps
    .map (preprocess_train, num_parallel_calls = AUTO)
    . пакет (BATCH_SIZE)
    .prefetch(АВТО)
)
# Конвейер проверки
конвейер_валидация = (
    validation_ds.map (preprocess_test, num_parallel_calls = AUTO)
    .пакет (BATCH_SIZE)
    .prefetch(АВТО)
)
 

Визуализация обучающих выборок

 image_batch, label_batch = next(iter(pipeline_train))
plt.figure(figsize=(10, 10))
для n в диапазоне (25):
    топор = plt.subplot (5, 5, n + 1)
    plt.imshow (изображение_пакет [n])
    plt.title(label_batch[n].numpy())
    плт.ось("выкл")
 


Загрузите предварительно обученную модель TF-Hub в

KerasLayer
 bit_model_url = "https://tfhub.dev/google/bit/m-r50x1/1"
bit_module = hub.KerasLayer(bit_model_url)
 

Создать модель BigTransfer (BiT)

Для создания новой модели мы:

  1. Отрежьте оригинальную головку модели BiT. Это оставляет нас с выводом «pre-logits». Нам не нужно этого делать, если мы используем модели «извлекателя признаков» (т. подкаталоги под названием feature_vectors ), так как для этих моделей голова уже был отрезан.

  2. Добавить новую головку с количеством выходов равным количеству классов нашей новой задача. Обратите внимание, что важно, чтобы мы инициализировали голову всеми нулями.

 класс MyBiTModel(keras.Model):
    def __init__(self, num_classes, модуль, **kwargs):
        super().__init__(**kwargs)
        self.num_classes = количество_классов
        self.head = keras.layers.Dense(num_classes, kernel_initializer="zeros")
        self.bit_model = модуль
    вызов защиты (я, изображения):
        bit_embedding = self.bit_model(изображения)
        вернуть self.head(bit_embedding)
модель = MyBiTModel (num_classes = NUM_CLASSES, модуль = битовый_модуль)
 

Определение оптимизатора и потери

 Learning_rate = 0,003 * BATCH_SIZE / 512
# Уменьшить скорость обучения в 10 раз при SCHEDULE_BOUNDARIES.
lr_schedule = keras.optimizers.schedules.PiecewiseConstantDecay(
    границы=SCHEDULE_BOUNDARIES,
    значения=[
        скорость_обучения,
        скорость_обучения * 0,1,
        скорость_обучения * 0,01,
        скорость_обучения * 0,001,
    ],
)
оптимизатор = keras. optimizers.SGD (learning_rate = lr_schedule, импульс = 0,9)
loss_fn = keras.losses.SparseCategoricalCrossentropy (from_logits = True)
 

Скомпилируйте модель

 model.compile(optimizer=optimizer, loss=loss_fn, metrics=["accuracy"])
 

Настройка обратных вызовов

 train_callbacks = [
    keras.callbacks.EarlyStopping(
        монитор = "val_accuracy", терпение = 2, restore_best_weights = True
    )
]
 

Обучить модель

 history = model.fit(
    конвейер_поезд,
    batch_size=BATCH_SIZE,
    эпохи = целое (SCHEDULE_LENGTH / STEPS_PER_EPOCH),
    steps_per_epoch=STEPS_PER_EPOCH,
    validation_data = pipeline_validation,
    callbacks=train_callbacks,
)
 
 Эпоха 1/400
10/10 [==============================] - 18 с 852 мс/шаг - потери: 0,7465 - точность: 0,7891 - val_loss : 0,1865 - val_accuracy: 0,9582
Эпоха 2/400
10/10 [==============================] - 5 с 529 мс/шаг - потери: 0,1389 - точность: 0,9578 - val_loss : 0,1075 - val_accuracy: 0,9727
Эпоха 3/400
10/10 [==============================] - 5 с 520 мс/шаг - потери: 0,1720 - точность: 0,9391 - val_loss : 0,0858 - val_accuracy: 0,9727
Эпоха 4/400
10/10 [==============================] - 5 с 525 мс/шаг - потери: 0,1211 - точность: 0,9516 - val_loss: 0,0833 - val_accuracy: 0,9691
 

Постройте метрики обучения и проверки

 def plot_hist(hist):
 plt.
Битность изображения: Битовая глубина и настройки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх