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

351
Oliver Larsen

Каков минимальный объем памяти (в байтах) для сохранения пятисекундного видео в оттенках серого с частотой кадров 14 кадров в секунду, при котором размер каждого кадра составляет 480x320? Каждый пиксель в этом видео должен иметь возможность хранить как минимум 6 различных статусов.

Глядя на похожие вопросы на доске, я предположил, что расчет будет примерно таким:

480 * 320 * 8 бит * 14 кадров в секунду * 5 секунд = 8601600

8601600/8 = 10752000 байт

Правильный ответ: 4032000, но я не понимаю, как это было рассчитано, и что подразумевается под 6 статусами?

0
Это домашнее задание? 8 бит может хранить 256 состояний пикселя, но вам нужно только 6. У вас есть фиксированный размер байта? Вы можете сделать сжатие? ... Máté Juhász 7 лет назад 1
Что это были за «похожие вопросы»? Máté Juhász 7 лет назад 0
Больше похоже на экзамен прошлого года, который я пытаюсь понять. Там нет сжатия нет. Подобные вопросы: http://superuser.com/questions/829056/how-to-calculate-bytes-need-for-an-image-with-256-level-gray-scale?newreg=2888100354bd478bb5a99f6883d959d1 - http: // stackoverflow.com/questions/27559103/video-size-calculation - я знаю только то, что процитировал, но я предполагаю, что размер байта не фиксирован, нет. Oliver Larsen 7 лет назад 0
Есть шесть разных оттенков серого. Таким образом, вы не можете использовать 1 бит для цвета и не имеет смысла использовать 32 бита. Используйте минимальное количество битов, которое у вас будет, и индикатор для шести различных видов серого, и выполняйте вычисления, как вы. Seth 7 лет назад 0
@ Так как вопрос неясен, 3 бита могут иметь 8 различных состояний, поэтому здесь хорошо хранить 6 цветов. Однако, например, 8 пикселей могут иметь общее количество 6 ^ 8 состояний, которые могут быть сохранены в 21 бит (2 ^ 21> 6 ^ 8) вместо 24. И еще есть место для оптимизации ... Máté Juhász 7 лет назад 2
@ Спасибо, это облегчило понимание .. зачем делить на 16, хотя? если 480x320x6 бит x14 кадров в секунду x 5 секунд = 645152000 -> 645152000/16 = 4032000 Oliver Larsen 7 лет назад 0
Это довольно ясно, так как он задает вопрос о «минимальной памяти» и является искусственным вопросом школьных учебников (без сжатия и т. Д.). Таким образом, он хранит 14 * 5 структур данных с разрешением 470 * 320 пикселей. Переменная, с которой вы остаетесь - это количество бит для глубины цвета. Абсолютный минимум, который вам понадобится, будет наименьшим 2 ^ n, то есть> = 6, что будет 2 ^ 3. если у вас есть информация о структуре данных, вам нужно будет соответственно изменить, например, наименьшее возможное значение для [bitmaps] (https://en.wikipedia.org/wiki/BMP_file_format#Pixel_storage) будет равно 4. Seth 7 лет назад 0
Мой комментарий действительно содержит ответ, но вы делите на 16 неправильно, даже если это даст вам тот же результат. Вы должны проверить свои учебные материалы о том, как работает десятичное преобразование в двоичное. Вам нужно найти минимальное количество битов, которое вам нужно, чтобы иметь шесть разных состояний. Чтобы иметь какое-то волшебное программное обеспечение, присвойте значение серого одному из этих состояний и отобразите видео. Seth 7 лет назад 0
@ Seth Mhh .. подожди. Таким образом, я должен преобразовать мой десятичный в двоичный файл? поэтому основание 2 100110011101000011110100000000 длиной 30 .. что является наименьшим значением 2 ^ 4 = 16, поэтому 480 * 320 * 6 * 14 * 5 -> 645152000/2 ^ 4 = 4032000 Oliver Larsen 7 лет назад 0
Я добавил ответ, в котором более подробно рассказывается о том, что я сделал, чтобы получить желаемый номер (который должен быть тем, что обычно требуется). Вы преобразовали неправильный номер. Я надеюсь, что мой ответ достаточен, чтобы прояснить это. Seth 7 лет назад 0

1 ответ на вопрос

0
Seth

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

  • Разрешение 480х320
  • 14 кадров в секунду
  • Время записи 5 секунд
  • 6 разных статусов

Это просто простое умножение этих чисел. Единственный улов в том, что вы не можете просто использовать 6 для количества статуй, но вам нужно что-то с этим сделать. Текст говорит вам, что эта 6 отвечает на каждый пиксель в одном кадре для этой записи. Таким образом, это (скорее всего) глубина цвета. Глубина цвета изображения обычно задается как число битов, которое используется для «кодирования» цвета. Было бы довольно обременительно записывать названия цветов каждого пикселя (и занимало бы намного больше места).

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

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

Теперь, когда у нас есть все детали, это просто:

color depth * resolution * frames per second * seconds 3 bit * (480 pixels * 320 pixels) * 14 * 5 = 32 256 000 bit 32 256 000 bit / 8 bit = 4 032 000 bytes 

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

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

Похожие вопросы