Разве все цифровые изображения в конечном итоге не являются значениями пикселей в диапазоне от 0 до 255? - Фотопедия
56 голосов
/ 09 мая 2018

У меня есть несколько невероятно простых (глупых?) Вопросов об изображениях; в частности, форматы изображений и значения пикселей.

Простите, я не фотограф. Я просто тот, кто работает с изображениями, а для меня они просто строки и столбцы чисел.

Мои вопросы:

Если в основе фотографии лежат только 3 канала значений пикселей [0, 255] X RBG, то как может быть какая-либо разница между любыми двумя форматами изображений? Я имею в виду, что делает RAW отличным от TIFF - не ограничены ли они значениями от 0 до 255? Число - это число - не должен ли быть возможен только один заданный формат? Или же два файла с одинаковой высотой и шириной не должны иметь одинаковый размер файла?

Кроме того, с цифровой точки зрения, что отличает 16-битные изображения от 32-битных? Опять же, изображение - это просто массив с целочисленными значениями от 0 до 255.

Продолжая с этой точки зрения, что изображение в файловой системе компьютера - это просто 3-канальный массив целых чисел в диапазоне от 0 до 255, какой смысл сжимать изображение в формат с потерями, например, JPG? Скажем, алгоритм сжатия изменяет некоторые значения пикселей с 254 до 255 или как угодно. Так? Как это обеспечивает экономию размера файла или влияет на качество изображения?

Я знаю, что существует много разных способов хранения данных изображений. Но я не спрашиваю ни о чем, кроме основного 3-канального изображения RBC. Все, что я знаю, это то, что, если кто-то вручит мне один из них, у меня теперь есть массив чисел. У меня нет причин знать, почему один массив чисел может отличаться от другого массива чисел от 0 до 255. Надеюсь, это имеет смысл. Этот вопрос не ограничивается форматом RAW! Скорее, речь идет о любом массиве значений пикселей

Ответы [ 15 ]

1 голос
/ 11 мая 2018

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

В своей основной форме изображение (ЛЮБОЕ изображение), отображаемое на определенном экране, действительно является просто идентичным массивом чисел. Все эти числа могут быть 0-255 или 0-65535 или 0-что-32-бит-это-я-забыл-гуглить-это.

НО так много способов ХРАНИТЬ и ТРАНСПОРТИРОВАТЬ эту информацию, многие из них - просто продукты технологий, утерянные в глубине веков.

Кроме того, одна деталь, о которой я не упомянул ни в одном из упомянутых здесь педантов, заключается в том, что данные датчика изображения RAW с цифровой камеры могут быть RGrGbB в виде байеровского рисунка или что-то такое, что должно быть обработано хотя бы немного. немного, чтобы иметь какой-либо смысл для человеческого глаза Mk.1. Скорее всего, вы никогда не получите это даже в формате RAW, сохраненном вашей DSLR, потому что это бесполезно, пока вы не преобразуете его в красивую сетку пикселей RGB или YUV, будь то глубина 8, 16, 32 или одиннадцать миллиардов.

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

Некоторое легкое чтение перед сном см. В разделе «формат изображения кадра»: http://focus.ti.com/lit/ug/sprufg8b/sprufg8b.pdf

В любом случае ... вернемся к исходному вопросу о разнице между несжатыми файлами изображений, такими как TIFF / RAW / IFF / PNG.

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

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

Традиционно это делается для того, чтобы вы (или, что более вероятно, профессиональные фотографы) могли использовать свое проприетарное (а иногда и дорогое) программное обеспечение для обработки этих изображений более высокого качества, иначе вы можете начать использовать дорогое программное обеспечение других людей. Кроме того, возможно, Adobe Photoshop хочет поддержать их формат, поэтому, возможно, они могут взимать с Adobe $$$ за эту информацию, чтобы более профессиональные фотографы покупали PS и, возможно, покупали эту марку камеры, потому что PS поддерживает ее сейчас. Уютная!

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

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

IFF (да, это так) был похожим форматом, используемым на компьютерах Amiga, я думаю, он был изобретен ими или одним из популярных пакетов краски. Но я использую его здесь в качестве примера, потому что, хотя он хранит данные изображения битовой карты, как и другие, он поддерживает несжатые данные или данные RLE, переменную глубину цвета от 1-битного моно до 8-битного 256-цветного (но с 3x8-битная палитра RGB на выбор для каждого из цветов), а также специальные режимы, называемые полутоновыми и удерживающими-и-модифицированными, позволяющие получать гораздо больше цветов, чем могли бы управлять другие машины той эпохи. Да, и он также поддерживал анимацию (например, GIF), поэтому файл IFF может хранить любое количество кадров с переменными задержками между кадрами, и каждый кадр может иметь свою собственную палитру. Таким образом, IFF будет включать дополнительные данные для обработки всего этого по сравнению, скажем, с файлом TIFF.

PNG - это другой формат изображения без потерь, который снова хранит растровые данные, но поддерживает некоторые интересные функции, такие как 8-битный альфа-канал для переменной прозрачности изображения (полезно на веб-страницах), так что опять-таки данные изображения «полезная нагрузка» могут выглядят очень похоже, но обертка вокруг него другая, и полезная нагрузка может содержать RGBA, а не только данные RGB на пиксель.

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

Надеюсь, это поможет!

1 голос
/ 10 мая 2018

Да, но как вы получаете эти 1 и 0 очень разные.

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

Чтобы усложнить ситуацию, существуют разные каналы. CMYK, RGB, B & W, просто назвать несколько. Мы не будем вдаваться в это. Существуют также различные этапы, такие как захват, хранение и отображение. Мы будем вдаваться в подробности, хотя пример должен продемонстрировать, что он не является точным. Если вам нужны точные примеры, вам нужно найти тонну технической документации.

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

00067000
00067000
00567800
04056090
40056009

Числа показывают, насколько сильны «черные». Вот как камера захватила изображение. Это приличная камера, поэтому она также хранит изображение.

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

302730
302730
204820
*04056090
1420262019

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

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

00011000
00011000
00111100
01011010
10011001

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

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

00077000
00077000
00888800
04056090
40066009

Как видите, изображение "лучше", но немного изменено по сравнению с оригиналом.

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

Однако сжатый формат теряет много «информации». Важна ли эта информация? Ну, это зависит от художника и зрителей. Есть несколько компромиссов между экономией места, временем обработки, качеством конечного / сохраненного изображения и необходимостью. Я сканирую большинство своих документов одним черным цветом, потому что это все, что мне нужно. Тем не менее, мои свадебные фотографии в формате HUGE RAW, потому что я никогда не знаю, когда я захочу их перепечатать. Тем не менее, когда я передаю их (фотографии) в цифровую фоторамку, я конвертирую их в JPEG для экономии места. Разные каналы, разные фильтры и разные методы сжатия - это ряд компромиссов. Это как цифровая версия треугольника принтеров.

0 голосов
/ 15 мая 2018

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

Первый вопрос здесь:

Далее, с цифровой точки зрения, что делает что-то вроде 16-битного изображения, отличные от 32-битных изображений? Опять же, изображение это просто массив с целочисленными значениями от 0 до 255.

Как представлено ранее: Нет, это не так. Изображение - это не просто массив целочисленных значений в диапазоне 0-255. На самом деле это может быть одиночный или многомерный массив значений от 0 до 65535, массив от 0 до 4294967295 или даже массив битов (бит может содержать значения 0 или 1, вот и все), который преобразуется программным обеспечением, способным читать файлы изображений в целые числа в соответствии с различными правилами кодирования.

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

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

  • BIT - удержание 0 или 1
  • UINT8 - 8-битное целое число без знака - они могут содержать значения в интервале от [0 до 255].
  • INT8 - 8-битное целое число со знаком - они могут содержать значения в интервале от [-126 до 127].
  • UINT16 - 16-разрядное целое число без знака - они могут содержать значения в интервале от [0 до 65535].
  • INT16 - 16-разрядное целое число без знака - они могут содержать значения в интервале от [−32768 до 32767].
  • UINT32 - 32-разрядное целое число без знака - они могут содержать значения в интервале от [0 до 4294967295].
  • INT32 - 32-разрядное целое число без знака - они могут содержать значения в интервале от [−2147483648 до 2147483647].
  • ИЛИ комбинация всех этих типов данных в более сложном формате. Например, UINT16 (16 бит), содержащий 3 различных значения, первые 4 биты, содержащие значения от 0 до 127, следующий бит с 0 или 1 и т. Д.

Далее БОЛЬШЕ есть что-то, с чем программистам приходится сталкиваться при чтении или записи целочисленного типа данных из файлов. Порядковый номер. Порядковый номер относится к последовательному порядку, в котором байты (UINT8 из нашей таблицы) располагаются в большие числовые значения при хранении в памяти или файлах. Порядковый номер представляет интерес в компьютерной науке, потому что два конфликтующих и несовместимых формата широко используются: значения могут быть представлены в формате с прямым порядком байтов или с прямым порядком байтов, в зависимости от того, упорядочены ли биты, байты или другие компоненты с большого конца (наиболее значимый) немного) или маленький конец (наименее значимый бит). Проще говоря, вы можете сохранить значение, например, 0000000011011111 или ... как 1101111100000000, в зависимости от выбранного порядка байтов. И вы можете выбрать любой заказ, который соответствует вашим целям. Нет других правил, которые вы применяете при разработке формата файла изображения.

Обратите внимание, что в компьютерном программировании целые числа используют больше или меньше места, зависит от значения. Как будто вам нужно больше бумаги, чтобы написать 255255255, вам нужно больше битов, чтобы написать большее значение. Затем, когда вы захотите прочитать значение, вы должны точно знать правила, которые вы создали, когда писали его. В противном случае вы не сможете понять, как мы читаем просто просто массив с целочисленными значениями от 0 до 255 , потому что вы просто не знаете, где хранятся эти числа и как эти числа хранятся, имея так много вариантов выбора. у вас есть (BIT, UINT8, UINT16, UINT32 или комбинация всех этих типов данных компьютера). И не забывай, Endianness. Если вы не знаете, что данные были записаны с использованием порядка с прямым или прямым порядком байтов, вы не сможете прочитать правильное значение.

Из-за этого изображения НИКОГДА не являются просто массивом с целочисленными значениями от 0 до 255. Некоторые из них являются массивами UINT16 (16-битные изображения), другие являются массивами UINT32 (32-битные изображения) или другие являются массивами UINT8 (8-битные) изображений). Некоторые очень креативные программисты могут даже использовать подписанные типы, которые используют вас в массивах INT8, что означает массив значений от -126 до 127.

На самом деле, когда вы читаете файл изображения, одним из первых данных, с которыми вы сталкиваетесь, обычно являются биты, представляющие ширину и высоту изображения. И это не просто 0-255 значений. Это также некоторые типы данных, выбранные программистом. Некоторые программисты подумают, что 16 битов достаточно для хранения максимальной ширины изображения 65535 пикселей, потому что они проектируют формат изображения, используемый в игре, чтобы сохранить изображения маленьких кнопок. Некоторые другие программисты могут использовать здесь 32-битное значение, позволяющее хранить изображения вплоть до ширины и высоты 4294967295. Некоторые сумасшедшие программисты NASA могут даже использовать 64-битные для хранения огромных фотографий галактики размером до 18446744073709551615 пикселей. Если вы не знаете правил, вы не можете читать эти «значения» так, как вы их называете. Потому что вы не знаете, где они начинаются в файле изображения и где они заканчиваются. Таким образом, вы получите кучу битов, о которых ничего не понимаете.

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

Практичный простой формат файла черно-белого изображения, который содержит только одно значение 166 для представления изображения 4x2 пикселей:

Изображение (1 - черный пиксель, 0 - белый пиксель):

1010 
0110

В этом формате файла используется 1 БИТ на ПИКСЕЛ, сохраненный в виде ЕДИНОГО 8-битного целочисленного значения 166 (10100110). Это все. Массив значений 0-255 не используется, но 8 различных значений 0 или 1 хранятся как значения 166.

Если вы использовали массив значений 0-255 для каждого пикселя * 3 раза для RGB, вы получите изображение в 24 раза больше. Этот формат файла просто сэкономил в 24 раза больше дискового пространства, необходимое для сохранения изображения, подобного этому, или в 24 раза меньше памяти компьютера, необходимой для чтения и сохранения этого изображения в оперативной памяти компьютера, когда вы используете это изображение, например, в своем высокопроизводительном движке 3D-игр для Нарисуйте что-нибудь на экране (текстурирование тысяч летящих частиц пыли может быть хорошим кандидатом :)).

0 голосов
/ 14 мая 2018

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

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

0 голосов
/ 10 мая 2018

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

Пиксели на изображении не сохраняются в байтах - если только изображение не является монохромным, то есть только черно-белым.

Если у вас есть изображение истинного цвета, то каждый пиксель представлен 16 битами или 2 байтами - как одно значение. Если у вас есть 32-битное изображение, то для каждого пикселя требуется 32 бита или 4 байта, опять же как одно значение.

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

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

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

Вот почему у нас есть такие вещи, как 16-битные и 32-битные изображения и 16-битные и 24-битные аудиофайлы. Чем больше бит вы используете для пикселя или звукового образца, тем более выразительным вы можете быть - 16 бит могут определять только 64 000 уникальных цветов, а 32 бит могут определять более 4 миллионов уникальных цветов. Монохромное изображение использует 1 бит на пиксель - оно либо включено, либо выключено.

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

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