Я пытаюсь преобразовать набор необработанных видеокадров из YUV444 в sRGB , используя ImageMagick .
Формат ввода: Raw YUV444 ограниченный диапазон , BT.709 в порядке планарных данных.
Требуемый формат вывода: sRGB (набор PNG изображений).
Основная проблема: ImageMagick преобразование всегда применяется Формула преобразования JPEG .
- Замечание по поводу " ограниченный диапазон " формат YUV:
В 8-разрядном формате YUV с ограниченным диапазоном диапазон Y равен [16, 235], а диапазон UV - это [16, 240].(в системах HTDV используется ограниченный диапазон BT.709).
JPEG использует формат YUV " full range ", где Y, U, V range - [0, 255].
sRGB -используется в системах ПК, а диапазон R, G, B - полный диапазон [0, 255].
YUV и YCbCr являются взаимозаменяемыми.
Для тестирования я использовал следующий пример изображения:
- Образец изображения в формате sRGB (
rgb_input.png
):
I преобразованобразец в формате YUV444 с использованием FFmpeg :
ffmpeg -y -colorspace bt709 -i rgb_input.png -pix_fmt yuv444p yuv_input.yuv
Следующее изображение иллюстрирует вывод YUV444 (в порядке упорядоченных данных):
- Входное изображение для ImageMagick в формате YUV444 (
yuv_input.yuv
иллюстрация порядка планарных данных):
Я преобразованyuv_input.yuv
до PNG с использованием ImageMagick конвертер (версия 7.0.8-51):
magick -depth 8 -interlace plane -size 128x96 -colorspace Rec709YCbCr -sampling-factor 4:4:4 yuv:yuv_input.yuv rgb_output_magick.png
- Результат ImageMagick (
rgb_output_magick.png
):
Если вы внимательно посмотритеВы видите, что изображение отличается от rgb_input.png
.
То же преобразование с использованием FFmpeg
(используется для справки):
ffmpeg -y -s 128x96 -colorspace bt709 -pix_fmt yuv444p -i yuv_input.yuv -pix_fmt rgb24 rgb_output_ffmpeg.png
- Результат FFmpeg (
rgb_output_ffmpeg.png
):
Примечание. Истинный формат моих необработанных входных видеокадров не позволяет мне использовать FFmpeg.
Формула преобразования из 8-разрядного ограниченного диапазона YUV BT.709 в sRGB:
R = 1.1644*Y + 0.00000*U + 1.79270*V - 248.10
G = 1.1644*Y - 0.21325*U - 0.53291*V + 76.878
B = 1.1644*Y + 2.11240*U + 0.00000*V - 289.02
Как я могусделать вышеупомянутое преобразование, используя ImageMagick конвертер?