Я пишу фрагмент кода, который должен трансформироваться из изображения RGB в нормализованное пространство rgb. Я работаю с форматом для , но он работает слишком медленно, и мне нужно оценить множество изображений. Я пытаюсь векторизовать полную функцию, чтобы ускорить ее. На данный момент у меня есть следующее:
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);
r=reshape(R,[],1);
g=reshape(G,[],1);
b=reshape(B,[],1);
clear R G B;
VNormalizedRed = r(:)/(r(:)+g(:)+b(:));
VNormalizedGreen = g(:)/(r(:)+g(:)+b(:));
VNormalizedBlue = b(:)/(r(:)+g(:)+b(:));
NormalizedRed = reshape(VNormalizedRed,height,width);
NormalizedGreen = reshape(VNormalizedGreen,height,width);
NormalizedBlue = reshape(VNormalizedBlue,height,width);
Основная проблема заключается в том, что когда он достигает VNormalizedRed = r(:)/(r(:)+g(:)+b(:));
, он отображает ошибку нехватки памяти (что действительно странно, потому что я только что освободил три вектора одинакового размера). Были ошибки? (* 1 007 * решена )
Возможно ли сделать тот же процесс более эффективно?
Изменить:
После использования предложений Мартина я обнаружил, что функция изменения формы не нужна, и я могу сделать то же самое с помощью простого кода:
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);
NormalizedRed = R(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
NormalizedGreen = G(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
NormalizedBlue = B(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
norm(:,:,1) = NormalizedRed(:,:);
norm(:,:,2) = NormalizedGreen(:,:);
norm(:,:,3) = NormalizedBlue(:,:);