Files
SDR-Rover/docs/video_compression_research_lab026_lab027.md
2026-07-24 17:54:27 +03:00

17 KiB
Raw Blame History

Исследование сжатия видеопотока в Lab026Lab027

1. Назначение исследований

Lab026, Lab026B и Lab027 исследуют способы уменьшения полезной нагрузки видеоканала для системы управления ровером через ретранслятор.

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

Последовательность исследований:

Lab026
  |
  +-- разрешение кадра
  +-- частота кадров
  +-- color / grayscale
  +-- JPEG Quality
  |
  v
Контрольный профиль: 320x180, grayscale, 2 fps, JPEG Q40
  |
  +--> Lab026B: 4-битная яркость и индексированный цвет
  |
  +--> Lab027: раздельная передача общего кадра BASE и области ROI

2. Исходное видео

Во всех трёх лабораторных использован один файл:

data/raw/lab026_rover_source.mp4
Параметр Значение
Размер файла 7 790 985 байт
Разрешение 1280x720
Частота кадров 30.000000 кадр/с
Число кадров 623
Длительность 20.766667 с
Приблизительный файловый битрейт 3001.343 кбит/с

3. Метод покадрового JPEG-сжатия

Lab026 и JPEG-режимы последующих лабораторных используют независимое покадровое сжатие:

исходный кадр
    |
    +--> изменение разрешения
    |
    +--> преобразование color / grayscale по параметрам профиля
    |
    +--> cv2.imencode(..., JPEG Quality)
    |
    +--> размер JPEG в байтах
    |
    +--> cv2.imdecode(...)
    |
    +--> расчёт PSNR

JPEG кодируется и декодируется в памяти. Отдельные JPEG-файлы на диск не сохраняются. Межкадровое предсказание не используется.

Кадры для заданной частоты выбираются по временной шкале. В общем виде:

frame_time = frame_index / source_fps

кадр выбирается, если:
frame_time + 1e-9 >= next_sample_time

после выбора:
next_sample_time += 1 / target_fps

4. Lab026: разрешение, FPS, grayscale и JPEG Quality

4.1. Изменение FPS

Условия серии: 640x360, grayscale, JPEG Q50.

Целевой FPS Выбрано кадров Payload, кбит/с PSNR, дБ
30 623 3936.913 37.350
10 208 1402.877 36.370
5 104 702.043 36.353
2 42 284.084 36.320
1 21 142.273 36.288
0.5 11 73.821 36.372
0.2 5 35.247 35.860

4.2. Изменение разрешения

Условия серии: 5 кадр/с, grayscale, JPEG Q50.

Разрешение Выбрано кадров Payload, кбит/с PSNR, дБ
1280x720 104 2121.333 39.608
960x540 104 1314.376 38.632
640x360 104 702.043 36.353
480x270 104 431.824 36.172
320x180 104 227.294 35.069
160x90 104 80.918 33.586

4.3. Color, grayscale и JPEG Quality

Условия серии: 640x360, 5 кадр/с.

Режим JPEG Quality Payload, кбит/с PSNR, дБ
color 90 2113.639 39.694
color 70 1117.677 36.029
color 50 823.307 34.439
color 30 605.629 32.766
color 20 471.731 31.299
grayscale 90 1809.440 42.575
grayscale 70 957.219 38.032
grayscale 50 702.043 36.353
grayscale 30 511.658 34.702
grayscale 20 392.150 33.304

4.4. Контрольный профиль

В качестве контрольного профиля принят:

Параметр Значение
Разрешение 320x180
Цветовой режим grayscale
Частота 2 кадр/с
JPEG Quality 40
Выбрано кадров 42
Payload bitrate 80.283660 кбит/с
Средний PSNR 34.362114 дБ

Этот профиль используется как baseline в Lab026B и как контрольная точка для Lab027.

5. Lab026B: глубина 4 бита на пиксель

5.1. Исследованные представления

Под 4-битной яркостью понимается индекс 0...15, то есть 16 уровней серого. Восстановленное значение формируется по тому же индексу в диапазоне 0...255.

Под 4-битным индексированным цветом понимается один индекс 0...15 на пиксель и палитра не более 16 RGB-цветов на кадр. Это не RGB444: RGB444 использует по 4 бита на каждый из трёх каналов, то есть 12 бит на пиксель.

Исследованы пять режимов:

Режим Представление
gray8_jpeg Контрольный grayscale JPEG Q40
gray4_jpeg 16 уровней серого, восстановление в uint8, JPEG Q40
gray4_packed_zlib Два 4-битных индекса в байте, zlib level 9, заголовок 16 байт
color16_png До 16 цветов, без дизеринга, индексированный PNG
color16_packed_zlib 4-битные индексы, zlib level 9, заголовок 16 байт, палитра 48 байт

5.2. Результаты при 320x180 и 2 кадр/с

Режим Payload, кбит/с Средний PSNR, дБ
gray8_jpeg 80.283660 34.362114
gray4_jpeg 88.417849 32.588941
gray4_packed_zlib 169.916148 34.397012
color16_png 143.121669 25.384724
color16_packed_zlib 140.568347 25.384724

5.3. Зафиксированный отрицательный результат

В Lab026B уменьшение глубины до 4 бит не позволило повысить разрешение кадра в пределах 100 кбит/с.

До 100 кбит/с прошли только два профиля:

Профиль Разрешение Payload, кбит/с Средний PSNR, дБ
320x180_gray8_jpeg_2fps 320x180 80.283660 34.362114
320x180_gray4_jpeg_2fps 320x180 88.417849 32.588941

Профилей с разрешением больше 320x180 и payload не более 80.283660 кбит/с не получено. Цветных color16-профилей до 100 кбит/с также не получено.

6. Lab027: многомасштабная передача BASE + ROI

6.1. Принцип

В Lab027 один профиль состоит из двух независимых JPEG-потоков:

исходный полноразмерный кадр
    |
    +--> BASE
    |      полный grayscale-кадр
    |      собственные разрешение, FPS и JPEG Quality
    |
    +--> ROI
           вырезка из исходного кадра
           собственные разрешение, FPS и JPEG Quality

приёмная реконструкция 640x360:

декодированный BASE
    |
    +--> масштабирование до 640x360
    |
    +--> наложение последнего декодированного ROI
           в геометрическое положение области интереса

BASE и ROI обновляются независимо по временной шкале. Между обновлениями удерживается последнее декодированное состояние каждого потока.

6.2. Фиксированная ROI

Нормализованные координаты:

x_min = 0.20
x_max = 0.80
y_min = 0.42
y_max = 1.00

Для исходного кадра 1280x720 используются координаты:

x = 256...1024
y = 302...720

Область занимает центральные 60% ширины и нижние 58% высоты кадра. ROI фиксирована и не использует автоматическое распознавание дороги, нейронные сети или детекторы объектов.

6.3. Результаты ROI-профилей

Профиль BASE ROI BASE, кбит/с ROI, кбит/с Total, кбит/с Full PSNR, дБ ROI PSNR, дБ
base240_1fps_q25_roi320_2fps_q35 240x135, 1 FPS, Q25 320x180, 2 FPS, Q35 19.592167 73.683467 93.275634 19.657187 19.574377
base240_0_5fps_q25_roi320_2fps_q35 240x135, 0.5 FPS, Q25 320x180, 2 FPS, Q35 10.150112 73.683467 83.833579 18.613817 19.574377
base160_1fps_q25_roi320_2fps_q35 160x90, 1 FPS, Q25 320x180, 2 FPS, Q35 11.511525 73.683467 85.194992 19.701304 19.574377
base240_1fps_q25_roi448_1fps_q30 240x135, 1 FPS, Q25 448x252, 1 FPS, Q30 19.592167 56.932392 76.524559 19.098790 17.871555
base240_0_5fps_q25_roi448_1fps_q30 240x135, 0.5 FPS, Q25 448x252, 1 FPS, Q30 10.150112 56.932392 67.082504 18.113877 17.871555
base320_1fps_q30_roi320_1fps_q35 320x180, 1 FPS, Q30 320x180, 1 FPS, Q35 33.862343 36.738491 70.600835 19.121457 17.888190
base240_1fps_q20_roi320_1fps_q30 240x135, 1 FPS, Q20 320x180, 1 FPS, Q30 17.180610 33.306453 50.487063 19.107784 17.873870
base160_0_5fps_q20_roi320_2fps_q30 160x90, 0.5 FPS, Q20 320x180, 2 FPS, Q30 5.323917 66.820546 72.144462 18.664976 19.549559

Контрольный baseline при повторении в Lab027 составил 80.270177 кбит/с. Контрольное значение из Lab026, используемое для сравнения, равно 80.283660 кбит/с.

6.4. Основной режим

В качестве основного режима в этом описании зафиксирован профиль:

base160_1fps_q25_roi320_2fps_q35
Компонент Параметры
BASE 160x90, 1 кадр/с, JPEG Q25
ROI 320x180, 2 кадр/с, JPEG Q35
BASE bitrate 11.511525 кбит/с
ROI bitrate 73.683467 кбит/с
Total payload bitrate 85.194992 кбит/с
Mean reconstructed full PSNR 19.701304 дБ
Mean reconstructed ROI PSNR 19.574377 дБ

6.5. Аварийный режим

В качестве аварийного режима в этом описании зафиксирован профиль:

base240_1fps_q20_roi320_1fps_q30
Компонент Параметры
BASE 240x135, 1 кадр/с, JPEG Q20
ROI 320x180, 1 кадр/с, JPEG Q30
BASE bitrate 17.180610 кбит/с
ROI bitrate 33.306453 кбит/с
Total payload bitrate 50.487063 кбит/с
Mean reconstructed full PSNR 19.107784 дБ
Mean reconstructed ROI PSNR 17.873870 дБ

7. Расчёт payload bitrate

Для одного JPEG-потока:

total_payload_bytes = сумма размеров выбранных JPEG-кадров

payload_bitrate_bps =
    total_payload_bytes * 8 / source_duration_seconds

payload_bitrate_kbps =
    payload_bitrate_bps / 1000

Для Lab027:

total_payload_bytes =
    total_base_bytes + total_roi_bytes

base_bitrate_kbps =
    total_base_bytes * 8 / source_duration_seconds / 1000

roi_bitrate_kbps =
    total_roi_bytes * 8 / source_duration_seconds / 1000

total_payload_bitrate_kbps =
    base_bitrate_kbps + roi_bitrate_kbps

Lab026B использует тот же принцип подсчёта полезной нагрузки, но размер кадра определяется выбранным режимом: JPEG, индексированный PNG либо упакованные и сжатые zlib индексы вместе с предусмотренными заголовком и палитрой.

8. Неучтённые накладные расходы радиоканала

В приведённые значения payload bitrate пока не включены:

  • заголовки радиопакетов и служебные поля радиопротокола;
  • преамбула;
  • CRC;
  • FEC;
  • фрагментация кадров по радиопакетам;
  • межпакетные интервалы;
  • повторные передачи;
  • команды управления.

Значения также не включают оценку задержки полного тракта. PSNR и статические сравнительные изображения не заменяют ручную оценку пригодности изображения. Фиксированная ROI не гарантирует попадания препятствия в область интереса.

9. Итоговый рабочий видеорежим после Lab027CLab027E

Динамические сравнения Lab027C и Lab027D подтвердили, что раздельное асинхронное обновление BASE и ROI заметно оператору. Синхронное формирование обеих частей из одного исходного кадра устранило их визуальное рассогласование. Частота 2 кадр/с оказалась недостаточной, а 3 кадр/с по результатам ручной оценки признаны приемлемыми.

В качестве рабочего компромисса выбран следующий профиль:

Компонент Рабочие параметры
BASE 240x135, grayscale, JPEG Q23
ROI 320x180, grayscale, JPEG Q33
Обновление синхронное и атомарное
Частота составного изображения 3 кадр/с
JPEG payload 156.342279 кбит/с
Оценка с 10% overhead и FEC 2/3 257.964761 кбит/с
Оценка с 10% overhead и FEC 1/2 343.953014 кбит/с

Расчёт иллюстративных канальных скоростей:

channel_rate_fec_2_3_kbps =
    payload_kbps * 1.10 / (2 / 3)

channel_rate_fec_1_2_kbps =
    payload_kbps * 1.10 / (1 / 2)

JPEG Q20 для BASE и Q30 для ROI признаны приемлемыми. Профиль Q23/Q33 выбран как рабочий компромисс качества и потока. Визуальная разница между Q23/Q33 и Q25/Q35 практически отсутствует, поэтому увеличение потока для Q25/Q35 не дало заметного преимущества при ручной оценке.

При скорости ровера 25 км/ч линейная скорость равна примерно 6.944 м/с. При трёх составных кадрах в секунду ровер проходит:

6.944 м/с / 3 кадр/с = 2.315 м/кадр

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

Lab027E дополнительно использовала playback 0.5x для локальной визуальной имитации более медленного движения сцены. Замедление применялось только при создании операторского preview и не является частью передаваемого радиоканального формата. Реальная скорость автомобиля в исходном видео неизвестна.