我想优化下面的代码,这只是一个矩阵乘法 - 我敢肯定这可以在不使用循环的情况下完成 - 但我似乎无法将其弄好。
k = [ 76 150 29; ...
-44 -85 128; ...
128 -108 -21];
for i = 1:size(rgb,1)
for j = 1:size(rgb,2)
triplet(1:3) = rgb(i,j,:);
yuv(i,j,:) = single(triplet) * single(k');
yuv(i,j,:) = fix(yuv(i,j,:) ./ 256);
end
end
有什么想法或建议吗?
对于那些具有图像处理背景的人来说,你会发现上面的代码只是一个RGB到YUV的转换 - 你可能会问我为什么不使用内置的rgb2ycbcr
函数 - 但是在这种情况下,我想使用上面概述的8位转换系数。
答案 0 :(得分:6)
你可以reshape
rgbR = reshape( rgb, [], 3 );
yuvR = single(rgbR) * single( k' );
yuv = reshape( fix( yuvR./ 256 ), size(rgb,1), size(rgb,2), [] );