Разрешение и битность: сколько информации в картинке
Разрешение задаёт, сколько у нас пикселей, а битность — сколько оттенков может принять каждый.
Разрешение — число пикселей по ширине и высоте (например, 1920×1080). Битовая глубина — сколько бит отведено на один пиксель/канал, то есть сколько разных значений он может принять.
Разрешение
Разрешение — это размер сетки пикселей. Чем больше пикселей, тем больше деталей и тем тяжелее картинка. Фото 4000×3000 (12 мегапикселей) содержит 12 миллионов пикселей. Для нейросетей это проблема: чем больше вход, тем больше вычислений. Поэтому перед подачей в сеть картинки почти всегда уменьшают — типичные размеры 224×224 или 256×256.
Важно различать разрешение картинки и плотность пикселей экрана (DPI/PPI): для CV значимо именно число пикселей, а не физический размер.
Битовая глубина
Один байт на канал (8 бит) даёт 2**8 = 256 значений: 0..255. Этого хватает для большинства фото. Но в специальных областях нужно больше оттенков:
| Битность канала | Градаций | Где |
| 1 бит | 2 (чёрный/белый) | факсы, штрихкоды, маски |
| 8 бит | 256 | обычные фото, JPEG/PNG |
| 10–12 бит | 1024–4096 | RAW с камеры, HDR |
| 16 бит | 65536 | медицина (КТ), научные снимки |
Посчитаем число градаций для разной битности — это просто степени двойки:
for bits in [1, 2, 8, 10, 16]:
levels = 2 ** bits
print(f"{bits:2} бит -> {levels} градаций")
Вывод:
1 бит -> 2 градаций 2 бит -> 4 градаций 8 бит -> 256 градаций 10 бит -> 1024 градаций 16 бит -> 65536 градаций
Почему битность важна
Если оттенков мало, плавные переходы (небо, тени) рассыпаются на видимые «ступеньки» — это называют постеризацией (banding). А вот в медицине 12–16 бит критичны: КТ-снимок различает тысячи уровней плотности тканей, и сжатие до 256 уровней потеряло бы важные нюансы между нормой и патологией.
Сколько весит несжатая картинка
Оценим «сырой» объём (без сжатия): пиксели × каналы × байт на канал.
width, height = 1920, 1080
channels = 3 # RGB
bytes_per_channel = 1 # 8 бит
raw_bytes = width * height * channels * bytes_per_channel
print("Пикселей:", width * height)
print("Байт (сырых):", raw_bytes)
print("Мегабайт:", round(raw_bytes / 1024 / 1024, 2))
Вывод:
Пикселей: 2073600 Байт (сырых): 6220800 Мегабайт: 5.93
Почти 6 МБ на один Full HD кадр без сжатия! Поэтому форматы вроде JPEG так важны: они ужимают это в десятки раз, жертвуя незаметными деталями.
Итог
- Разрешение — число пикселей; для CV картинки обычно уменьшают (224×224 и т.п.).
- Битность — число градаций на канал:
2**bits. - 8 бит хватает для фото, но медицина и HDR требуют 12–16 бит.
- Мало оттенков → постеризация (видимые ступеньки на плавных переходах).