Мне было поручено выполнить подвыбор цветности 4: 2: 0 (сжатие цветов) для серии JPEG.
Первый шаг - убедиться, что я могу сгенерировать свои значения Y, Cb и Cr, а затем преобразовать обратно в RGB и отобразить изображение. Затем я могу go вернуться назад и добавить свои логи субсэмплинга c.
Я почти уверен, что у меня есть правильные формулы для генерации значений Y, Cb и Cr, но я не могу понять правильные способ вернуться в RGB и распечатать.
Нам не разрешено использовать какие-либо встроенные функции (что обычно появляется при решении этой проблемы).
Я приложил код того, как я получаю свои значения Y Cb и Cr и как я пытаюсь вернуться в RGB.
В настоящее время я получаю зеленый экран при запуске «imshow» на newImage после этой выдержки.
%Obtain R,G,B values
R=double(orig(:,:,1))./255;
G=double(orig(:,:,2))./255;
B=double(orig(:,:,3))./255;
%Calculate Y,Cb, Cr values
Y = (0.299*R) + (0.587*G) + (0.114*B) + 0;
Cb = (-0.168736*R) + (-0.331264*G) + (0.5*B) + 0.5;
Cr = (0.5*R) + (-0.418688*G) - (0.081312*B) + 0.5;
%Calculate new R,G,B
new_R = Y + (1.402*(Cr-128));
new_G = Y-(0.34414*(Cb-128))-(0.71414*(Cr-128));
new_B = Y+(1.772*(Cb-128));
%Fill new Image
newImage(:,:,1) =double(new_R).*255;
newImage(:,:,2) = double(new_G).*255;
newImage(:,:,3) = double(new_B).*255;
Где orig - исходное изображение, а newImage - то, что я запускаю «imshow» сразу после этой выдержки.