Неправильный результат вычисления YCbCr из RGB - PullRequest
0 голосов
/ 23 декабря 2018

Я работаю со скриптом конвертации RGB в YCbCr в MATLAB, все кажется хорошим, только когда вычисляется вектор Cb, кажется, что результаты MATLAB не разумны, мне нужно перенести код на Python, но я не понялРезультат MATLAB.

Я пытался вычислить первые элементы для векторов Y и Cr вручную, и это казалось разумным, но не вектором Cb, хотя уравнение очень простое

clear variables
close all
clc

fic='test.jpg';
img=imread(fic);
ti=size(img);

R=img(:,:,1);
V=img(:,:,2);
B=img(:,:,3);

Y = 0.299*R+0.587*V+0.114*B;

Cb = -0.1687*R-0.3313*V+0.5*B+128;

Cr = 0.5*R-0.4187*V-0.0813*B+128;

Итак, мы имеемR(1,1) = 193 и V(1,1) = 111 и B(1,1) = 74.Когда я вычисляю Cb вручную, это должно дать 96 (раунд), но Cb(1,1) дает 165, я не знаю почему?

1 Ответ

0 голосов
/ 23 декабря 2018

@ GlobalTraveler верно.Сначала нужно преобразовать изображение в удвоение.

В MATLAB при double умножении на uint8 получается uint8 с использованием насыщенной арифметики.Так что -0.1687*R - это все нули.

Чтобы преобразовать изображение в double, используйте im2double(img) или просто double(img), в зависимости от того, хотите ли вы сохранить исходный диапазон [0,255], илипреобразовать его в [0,1] (как im2double).

...